子のコンポーネントの回転を親のポーンに適用させたいのですが、やろうとするとアクタの回転が荒ぶってしまいます。子の回転は常にカメラに合わせて動くようになっており、子には親の回転を継承させず、一定の条件下で子のワールド回転軸を取り出し同じ値を親に適用させようとしましたが上手くいきませんでした。例えると、首の向きはそのままに体を回転させて首と同じ方を向かせる感じです。
前提として、一般的に3DCGでは、子のTransformは親のTransformからの相対値により決定されます
ですので、親のTransformが変われば子はその影響を受けます
例えると、首の向きはそのままに体を回転させて首と同じ方を向かせる感じです
残念ながらこのたとえは成り立っていません
実際に自身の体で試してみればわかると思いますが、最終的に体と首の向きを揃えるには、首の回転を戻す という動作が必要です
首が体とつながってさえいなければ(同一のオブジェクトでなければ)、この例えは成り立つのですが…
そういう訳で、子のTransformを親に転写するのであれば、転写と同時に子のTransformをリセットする必要があります
あるいは、親子の関係を解消する必要があるでしょう
実現したい動作が全くわかりませんが、ケースによってはComponentのTransformの設定で、RotationをWorldからの相対値(つまりWorld座標)に指定にすることで、実現できる可能性もあります
やりたい動作は、慣性の再現です。普通に直進させると向きを変えた際に向きを変えた方向にすぐ動きが変わってしまうので、向きを変えても変えた状態で前進するまで向きを変える前の動作を続けるようにしたいです。そのため移動を親が、向きを子が担当し、子がどの方向を向いても親は向きが変わらないようにしておき、入力があった場合に子の向いている方向へ親が向きを変えるようにしようと考えました。
やりたい動作は、慣性の再現です
この方法で慣性には全くつながらないと判断します
物理的に慣性というものを考え直せば、親子関係とか回転とかは関係ない、というのはわかるかと思います
慣性の計算に必要なのはAcceleration(加速度)です
慣性を実現しようとすれば、物理に沿った速度と加速度の計算を実装する必要があります
これについては物理の公式を参照してください
物理に沿わないのであれば、VInterpToノード等で補完してそれっぽく見せる、という方法が考えられます
下記はTwinStickShooterTemplateのTwinStickPawnをもとにした実装例です
いずれにしろ、目的が慣性挙動なのであれば、回転ではなく移動に対して着目するべきでしょう
そうですね。慣性の動き自体は既に出来てます。問題は回転です。移動をローカル軸で操作しているので、回転させるとローカルは動くため回転させた方向へ慣性が働いてしまうのです。なので回転させても動きには影響がないように移動と回転を分け、回転させても移動の方向が変わらないようにしました。つまり現在移動に使用しているローカル軸をワールド軸に一時的に固定したいんです。ローカル軸の動きをワールド軸に変換できれば、移動の際はアクタのローカル方向へ、慣性移動の場合は入力された最後のローカル方向をワールド方向に変換することで、最後に入力された方向へ慣性で動き続けるようにできると考えています。
内容はわかりましたが、ローカル軸移動に拘る理由がわかりません
コメントにある目的を達成するには、ワールド軸で移動するようにしたほうがシンプルになると考えます