エビフライを反復横跳びさせる
「エビフライのジャンプ方法についてこのところ悩んでて、CharacterMovementを使うかとか、スプライン関数はどうかとか、色々考えてたんだけど、最終的にこの本のアルゴリズムを使うことにした」
アクションゲームアルゴリズムマニアックス : 松浦 健一郎, 司 ゆき : 本 : Amazon.co.jp
「2Dのアクションゲームを作る時に使いそうなアルゴリズムがまとまってて、非常に便利な本なんだけど、今見たら絶版になってるね……。今入手可能な本を紹介したかったんだけど、ちょっと思いつかなかった。」
妹「それはアンリアルエンジンの本なの?」
「C++で書いてある。でもC++用の本じゃなくて、たまたまC++で書いてあるだけって感じだし、同じことをブループリントで再現できる。流用禁止とか書いてなければ他のアクションゲーム用入門書とかでもいいんだけど」
妹「C++むずかしい……」
「そうなるよね。実際は計算ノードとブランチノードの分岐だけしか使わないシンプルなものだけど、それしか使わなくていいとわかるまでがむずかしそう。いまの妹なら読めそうな気もするんだけど。とりあえずブループリント化の例としてはこんな感じになる」
「この本にはいくつかジャンプ処理の例が載ってるけど、今回は一番単純な固定長ジャンプ。64ページから65ぺージに掲載されているプログラムを使った。入力イベントで処理すべき内容と、イベントティックで処理すべき内容が混ざってるので、それぞれ分離してブループリントにする」
妹「でもこれ2Dのだから、そのままじゃ駄目なのでは?」
「見た目はそうだけど動きはこれ2Dだから。上がYのマイナス方向から、Zのプラス方向に変わってたりするんで、その調整はしてる。3Dの場合でも向きを単位ベクトルに変えたりすれば流用出来るけど、その場合多少難易度が上がる」
「するとこうなる」
妹「ピョインピョインしてるね」
「実際には横の移動制限付け忘れたんで、画面外まで飛んでいったりもするけど、基本設計はこれでいいはず。もっとUE4っぽくてシンプルな方法もあるかもしれないけど、それ探すのめんどくさかったのと、ジャンプ自体は単純な処理だからこういう実装にした」
妹「単純じゃない処理とは?」
「今回は地面の高さだけ指定してるけど、地形のコリジョンを使う場合は着地のあたりがかわってくるし、上昇中に壁にあたる場合も違ってくる。あと他の物体にUE4の重力処理がかかってる場合、自キャラもそれに合わせないと気持ち悪いかも。今回はエビフライだけで、何も遮るものがないから」
妹「猫は遮ってくるのでは?」
「それが面倒だから、猫の手のコリジョンはオーバーラップ型にするか自前計算だけにして、ジャンプ中も無敵にしようかと。そしたら猫との衝突の問題は考えなくていい」