妹でもわかるUnrealEngine4

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

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

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

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

「どうやってというと」

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

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

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

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

f:id:una_unagi:20180424221758p:plain

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

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

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

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

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

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

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

表向き用の影と、裏向き用の影と、両方くっつけとく

妹「昨日のやり方だと、影が足より前にきちゃうんだけど」

imoue.hatenablog.com
昨日のやり方

「そっか、ポリゴンの表示順が逆になるのか。反対向くと。このへんは2D用のゲームエンジンじゃないからむずかしい。キャラはSpriteStudioだからいいけど、影も含めると、ジャンプした時に困りそうな」

妹「設定で表示順はいじれそうだけど、それで上手くいくかわからないし、他のとこで問題があった。それで常時Tickで影を奥側にずらそうかと思うんだけど」

「それでもちゃんと動くとは思うけど、表用の影と、裏用の影と、1キャラに2つの影をくっつけておくのでもいいかも」

f:id:una_unagi:20180423001022p:plain

f:id:una_unagi:20180423001056p:plain

「最初に1つ、こっちから見える影があるから、それを反対の位置と向きになるように、もう1個影をおく」

妹「それだと2つ見えて変になったりしない?」

「今のところ逆を向いたら全然見えないわけだから、どちらか片方の影しか見えないはず。あ、でもマテリアルは両面じゃなくて片面に戻さないとダメだけど」

f:id:una_unagi:20180423001103p:plain

「これでちゃんとなってるはずなんだけど、見てもよくわからん」

妹「Tickでやるのとどっちがいいの?」

「速度的には、大量にキャラを出してみるとかしないと差は出ないと思うけど、たぶんポリゴンを増やす方が速そうな気がする。あとは好みの問題」

ポリゴンが両面から見えるようにするマテリアル

f:id:una_unagi:20180421215525g:plain

妹「敵に影をつけてみたんだけど」

「こういう角度のアクションゲームだとあった方がいいね。空中にいる敵とかは奥行きがわかりにくいし」

妹「うん、それはそうなんだけど、左右反転すると影が見えなくなるんだよ」

「この影どうやって出してるの?」

妹「Planeのポリゴンに、黒くて丸い感じの絵になるマテリアルをくっつけてあるんだけど」

「反対を向かせるとポリゴンが裏になるから見えないのかな。このマテリアルの"両面処理"ってとこにチェックを入れるといいはず」

f:id:una_unagi:20180421215803p:plain

f:id:una_unagi:20180421215814p:plain

「これで裏表どっちも見えるようになったから、どちら側を向いた敵にも影が見えるよう」

妹「ちゃんと向きに合わせてポリゴンを回転させた方がよくない?」

「それでもいいんだけど、キャラを回転させて、その状態で影を逆方向に回転させてとやると、作ってて混乱しそうな気がする。この影の場合は2ポリゴンしかないわけだから、両面処理にしても大した負荷はなさそう」