読者です 読者をやめる 読者になる 読者になる

妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

ハシゴにぴったりフィットさせたい問題

妹「ハシゴを登るという仕組みを前に作ったわけだけど、なんか気に入らないというか、ハシゴの中心からかなり外れてても登れちゃうというか……」

「頑張ってつかんで登ってるんじゃないの?」

妹「そんな謎の握力はないよ! で、まあ色々考えたんだけど、ハシゴのコリジョンをいくら小さくしても、プレイヤーのコリジョンと重なっちゃうから、発想を変えてハシゴの両脇に2つ細いコリジョンを作ってみたんだよ」

f:id:una_unagi:20151220234552p:plain
f:id:una_unagi:20151220234559p:plain

妹「これで両端のコリジョンにオーバーラップしてる場合に限り、ハシゴと重なってる……というふうに考えるようにした」

f:id:una_unagi:20151220234723g:plain

妹「で、理論通りに動くようにはなったんだけど、この方法で合ってるのかな? 登れてるんだから間違ってはないんだろうけど、常識的なハシゴの作り方としてどうなんだろうかと」

「そういわれてもなあ。UE4の2Dゲームは数が少なくて常識が出来るほどじゃないし、2Dゲームの常識だとハシゴとキャラクターのX座標が同じだったらとかで済む事が多いし……」

妹「Xが同じだったら? それってUE4だと使えないの?」

「2Dゲームでカクカクって動くやつは、ピッタリ位置合わせするの簡単だから。でも今の状態だと小数点以下の単位で動くから、一致というのは無理。やるとしたらキャラの動きをわざとカクカクにするか、ピッタリじゃなくて若干の幅を持たせて条件分岐するか……」

妹「それはあんまり簡単そうではない気がする」

「もう1つ考えられるのは、ハシゴの中心に細いコリジョンを1つ置いて、キャラクタ側に移動用とは別の、中心付近に小さいコリジョンをくっつけて、その2つの小さいがオーバーラップした時だけハシゴとして認識させる。これだとUE4の仕組みとしてもそんなに違和感がない。UE4のコリジョンはちょっと厄介で、複数コリジョンの片方がBlockで片方がOverlapとかだと駄目なんだけど、今回の場合は接触判定が同じでいいから、多分これならいけそう」

妹「コリジョンをハシゴに2つ作るのもキャラクターに2つ作るのも同じじゃないの?」

「ハシゴだけならそうかもしれないけど、キャラクターの中心コリジョンは他のアクターに対しても使えるかもしれないから。アクター全部に2つ作って、それ用のブループリントを書くと考えると、キャラに1回だけ書いた方が楽そうな気がする。ハシゴも敵キャラとか登るんだったらそれも考慮しないといけないけど」

妹「ハシゴに他の人が登ったりはしないと思うけど、他で使うかどうかはやってみないとわからない……」

「あるコリジョンの内部に別のコリジョンが完全に含まれてるか、という判定が出来ればコリジョン1つずつでも綺麗に処理出来そうなんだけど、どうもそういうのはなさそうだから、方法を色々考えてみるしかない。それが最善の方法じゃなかったとしても、自分で考えた方法でちゃんと動くの見るのは楽しいものだし。作業がめんどくさくなってきたら、もっと楽になる方法を考える感じで」