妹でもわかるUnrealEngine4

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

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

2D的に影のできる場所をどうやって探すか

妹「ジャンプしてる時とかに、影をどうやって出せばいいかという問題があるんだけど」

「どうやってというと」

妹「空中にいるわけだから、足元じゃ駄目で、その下にある地面がどこか調べないといけない。LineTraceかなと思うんだけど、なんか大げさな気もする」

「なるほど。2Dだからライトも使わないのか。それだったらLineTrace案でいいのでは」

妹「でももっと簡単な方法あったりしない? 例えばファミコンのアクションゲームとかでLineTraceなんか使ってなかったんじゃないかなあと」

「それは使ってないと思うけど、仕組み自体がだいぶ違うからね」

f:id:una_unagi:20180424221758p:plain

「昔の2Dゲームは地形をブロック単位のデータで持ってて、一番シンプルなのだと床があるかないかだけで区別できる。この場合の影は縦方向の位置は一定だから、横の位置だけ自分に合わせて、あとは下に床がない時に非表示にすればいい」

妹「でこぼこしてる時は?」

「その場合は床の高さを調べるんだけど、キャラの横座標から、対応する配列の数字を調べて、その高さに合わせるとか。斜め見下ろし型みたいになってると、さらに配列を二次元に増やさないと駄目だけど、そもそもファミコンだとそこまで複雑な仕様にはしないかも」

妹「そういうやり方では作ってないね」

UE4コリジョンシステムは、昔の配列で管理する考え方より柔軟になってるから、ソレ用にLineTraceというのも必要になってくる。今回のケースで調べるのは真下だけだから、LineTraceよりは単純なしくみでいいんだろうけど」

妹「じゃあLineTraceでいいのか。なんかもったいない気もするけど」

「先に配列を作って、そこからブロックをスポーンさせるという作り方はUE4でも出来るし、その場合は昔ながらの方法で当たり判定とってもいいと思うけど。まあでもLineTraceはよく使う物だから、十分高速化されてると思うよ。たぶん」