妹でもわかるUnrealEngine4

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

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

CanWalkOffLedgeで崖から落ちない、崖の上で折り返す

f:id:una_unagi:20160317230929p:plain

妹「さらに調査した結果、CanWalkOffLedgeをFalseにすると、床からはみ出しても落ちないというか、そもそもはみ出さないようになることがわかった」

「アクションだと落ちるのが普通だけど、アクション要素の無いRPGだと落ちないのが普通だからね。街中なら柵で囲ってもいいけど、ダンジョンでそれはいまいちだし、コリジョンでぐるっと囲むのも漏れがありそうで怖い。そう考えるとなかなか便利な機能」

妹「わたしが考えたのはそういうことでなく、これで崖っぷちに行った敵が、逆向きに歩くのが出来ないかなと思うんだよ。もちろん2Dゲームで」

「今までも床があるべきところにOverlapコリジョンを作って、それが地面に触れてなかったら反転するみたいなのはやってなかったっけ?」

妹「やってる。でも敵ごとに調整するの面倒だし、落ちないようにする機能があるってことは、なんか使える方法があるんじゃないかと思って。落ちないようにするのと同じ仕組みをブループリントで再現するとか、崖っぷちで落ちそうになった時に起こるイベントとか……」

「調べた感じイベント発生はしてなさそう。ブループリントで同じ仕組みは作れるのかもしれないけど、ざっとC++のコードを眺めた感じだとよくわからなかった。でもよく考えたらVelocityを調べれば崖に来たかどうかわかるんじゃないかな?」

f:id:una_unagi:20160317232239g:plain

「左右に歩いて、そのあいだCharacterMovementのgetVelocityを表示してるけど、崖で進めなくなると、いくらキャラクターを移動させようとしても動けないから、Velocityが0になる。これを利用して、Tickイベントで"歩いてるのにVelocityが0だった時"に反対方向を向くようにすれば……」

妹「おー、それだったらできそうな気がする」

「問題点としては、崖以外に普通にぶつかってる時もVelocityは0になるってところ。崖か障害物かは区別出来ない。でもマリオとかだと崖で向きを変えるやつは土管に当たっても向き変えるわけだから、それと同じ仕組みなら区別出来なくても問題ないと思う」