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

妹でもわかるUnrealEngine4

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

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

JumpとLaunchCharacter

Character コンポーネント UE4.11 ブループリント ビヘイビアツリー

f:id:una_unagi:20160503223551p:plain

妹「というわけで、SmartLinkが機能したとして、まだジャンプの方向が定まってないという問題が残ってる。まあLaunchCharacterを使えば良さそうではあるんだけど……」

「使っちゃ駄目なの?」

妹「それはなんかヒキョーな気がする。こっちはジャンプ中の横移動で動いてるのに、向こうはジャンプ台みたいにありえない角度で飛び出せるわけだから」

「それは同じ性能のキャラクター同士の対戦ゲームじゃなかったら気にしなくてもいいと思うけど……とりあえずJumpとLaunchCharacterと原理的にはあんまり変わらない。LaunchCharacterの方が色々設定出来て、Jumpはその簡略版ということになる」

妹「Jumpは自分で飛ぶやつで、LaunchCharacterはこう強制的に飛ばされる感じなのかと思ってたけど」

「そういうことではなく、どっちもVelocityに新しい数値を設定するだけだから。CharacterMovementのJumpZVelocityをZに設定して、あとZOverrideにチェックした状態のLaunchCharacterがJumpと同じ動き方になる」

妹「そうなのか……いやでも、こっちが真上にしか飛べないのに、敵が横に飛べたら、やっぱり敵の方が有利になるような」

「代わりにジャンプ中の横移動をさせないようにしたり、足を遅くしたり、そこは色々方法あると思うけど。こだわるならJumpと横移動でもいい。というか今の状態だとジャンプ中にもビヘイビアツリーのタスクでのAIMoveToが効いてるから、横移動はしてるわけだけど」

妹「でもジャンプ中の横移動とは別の力が働いてる気がするんだよね。SmartLinkのとこにたどり着く勢いのままジャンプしてるというか」

「Jumpの場合ジャンプする直前の、XとYのVelocityはそのままになってるからだろうね。確実に垂直ジャンプさせたいなら、LaunchCharacterで、XとYを0にしてXY0verrideすればいいんだけど」

妹「それだと崖の上までたどり着けない……」

「初期値だとジャンプ中の移動制御はほとんど効かないからね。SmartLinkのところで即ジャンプじゃなく、いったん停止して、崖に向かってダッシュ、ある程度進んでからジャンプというのが正しいんだろうけど、なんかすごくめんどくさそう。ビヘイビアツリーも工夫しないといけないし」

f:id:una_unagi:20160503234606p:plain

「もう1つの方法としては、またもちょっと書いたような気がするけど、進入角度を限定する。今なんで変な方向にジャンプしちゃうかというと、ジャンプ地点に色んな角度から侵入できちゃうのが原因なわけで、入っちゃいけない角度に障害物を置いてしまえばいい。常に同じ方向から侵入してくる=正しい助走がついた状態になるから」

妹「それだとかっこ悪いマップになるような……」

「障害物は透明でもいいし、プレイヤーは通れてもいいんだけど、ナビメッシュ的に通れなくすればいい。ジャンプが必要でない時に多少不自然な追いかけ方になるかもしれないけど」