箱の上に上がる、柵を乗り越える
箱の上に上がりたい
CharacterMovementのパラメーターにはMaxStepHeightがあり、これは歩ける段差の最大の高さ、階段の1段
これが例えば30cmだとする、ここで乗り越えられる箱の最大の高さを決める、1mとする
すると、30cm ~ 1m の高さのオブジェクトには乗り越えられることになる
いきなりいろいろやると面倒なので、とりあえず、1mの箱の上に上がる処理を考えていく
アニメ作る
高さ可変をやるなら、手の位置がIKで変動する、考えるのがめんどくさい、1mFIXでアニメを打つ、適当にやる
カプセルの移動問題
ルートモーションでうまいことできない挙動なので(うまいことやったらできるのかも)、アニメーション終了時にカプセルの位置を更新する必要がある
とりあえず思いついたのは、コンストラクションで指定ノード(BodyRootとか)とカプセル位置のオフセットを保存しておき、終了時の指定ノードからカプセル座標を逆算する
とやっていたけれど、どうしても1フレームテレポートのグリッチがでる、StateMachine使うともっと顕著になって、結果ブレンドも良くない
物理アニメとかもこのワープでかなりグリッチが出るので、ルートモーションで素直に作り直す
ルートモーションでやる
なんかコントローラーを移動させないと行けない気がしていて、ルートモーション無理とか思い込んでたけど、Rootノードを直接操作すればいい話で普通にできた
・そのままだとY方向のルートモーション聞かないので、アニメーション再生中は一時的にflyingモードに変える、終了で戻す
・コリジョンも無効にする、ただ射撃があるようなゲームだと長時間無敵になってしまうので考える、乗り越えオブジェクト専用のプリセットを作成する等
・ルートモーション、AnimBP全体で使うか使わないか共通の設定なので、特定モーションで使う使わないがあると動きがおかしくなる、必要なアニメで設定を切り替えるようにする
・アニメ終了時に即ルートモーション設定切り替えると、AnimationPhysicsでグリッチが出るので、ちょっとDelayを挟む
次は、のりこえ可能判定の処理を考えてみる、とりあえず2パターン
乗り越えが発生しそうなパターンを見ると、単に乗り越えポイントを指定するのが一番単純かつ確実そう
AND条件で、"プレイヤーが壁の方向を見ている"も入れる
・確実なマップデザインができる
・アセットが膨大になってくると絶対めんどくさい、設定し忘れ出る
2.Traceで自動的に乗り越えられる場所を判定する
・自動でやってくれるので超楽
・グリッチでそう
・アルゴリズム考えるのがいろいろレギュレーション出来てからになる
将来的には2をやり、今回は1でやってみる
変更するのは判定の部分だけなので、乗り越え実行とかは共通の物を使えるはず
残る問題は可変乗り越え高さに対する手のIK
問題が出たら追記