#memo

indiedev太郎

箱の上に上がる、柵を乗り越える

箱の上に上がりたい

CharacterMovementのパラメーターにはMaxStepHeightがあり、これは歩ける段差の最大の高さ、階段の1段
これが例えば30cmだとする、ここで乗り越えられる箱の最大の高さを決める、1mとする
すると、30cm ~ 1m の高さのオブジェクトには乗り越えられることになる

いきなりいろいろやると面倒なので、とりあえず、1mの箱の上に上がる処理を考えていく

アニメ作る
高さ可変をやるなら、手の位置がIKで変動する、考えるのがめんどくさい、1mFIXでアニメを打つ、適当にやる

https://i.gyazo.com/84e66ac2b0ded17f2c4e1843104768dc.gif
とのことです。

カプセルの移動問題
ルートモーションでうまいことできない挙動なので(うまいことやったらできるのかも)、アニメーション終了時にカプセルの位置を更新する必要がある
とりあえず思いついたのは、コンストラクションで指定ノード(BodyRootとか)とカプセル位置のオフセットを保存しておき、終了時の指定ノードからカプセル座標を逆算する

https://i.gyazo.com/0db688a10e6cd36c41d8408a559be31e.gif
https://i.gyazo.com/571674e2ecdfbf819f1992454abca37b.png

とやっていたけれど、どうしても1フレームテレポートのグリッチがでる、StateMachine使うともっと顕著になって、結果ブレンドも良くない
物理アニメとかもこのワープでかなりグリッチが出るので、ルートモーションで素直に作り直す

ルートモーションでやる
なんかコントローラーを移動させないと行けない気がしていて、ルートモーション無理とか思い込んでたけど、Rootノードを直接操作すればいい話で普通にできた
・そのままだとY方向のルートモーション聞かないので、アニメーション再生中は一時的にflyingモードに変える、終了で戻す
コリジョンも無効にする、ただ射撃があるようなゲームだと長時間無敵になってしまうので考える、乗り越えオブジェクト専用のプリセットを作成する等
・ルートモーション、AnimBP全体で使うか使わないか共通の設定なので、特定モーションで使う使わないがあると動きがおかしくなる、必要なアニメで設定を切り替えるようにする
・アニメ終了時に即ルートモーション設定切り替えると、AnimationPhysicsでグリッチが出るので、ちょっとDelayを挟む

https://i.gyazo.com/1c1c52e1204603312baaf24bb86297b0.gif
無事形にはなった

次は、のりこえ可能判定の処理を考えてみる、とりあえず2パターン

1.ジャンプ動作を乗り越え動作に変更するBoxを作る実装
https://i.gyazo.com/f6152724b1ba4fd9e1b8e5c0a682efa6.png

乗り越えが発生しそうなパターンを見ると、単に乗り越えポイントを指定するのが一番単純かつ確実そう
AND条件で、"プレイヤーが壁の方向を見ている"も入れる

・確実なマップデザインができる
・アセットが膨大になってくると絶対めんどくさい、設定し忘れ出る

2.Traceで自動的に乗り越えられる場所を判定する
・自動でやってくれるので超楽
グリッチでそう
アルゴリズム考えるのがいろいろレギュレーション出来てからになる

将来的には2をやり、今回は1でやってみる
変更するのは判定の部分だけなので、乗り越え実行とかは共通の物を使えるはず



残る問題は可変乗り越え高さに対する手のIK

問題が出たら追記