#コードの訂正箇所
どうやら下記コードで挙動が違うようです。
<訂正前>
C#
1transform.rotation *= Quaternion.FromToRotation(transform.up, hit.normal);
<訂正後>
C#
1transform.rotation = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation;
ですので次のように記述すれば良いみたいです。
あとガタガタ不自然に傾いてしまうのでLerpを追記し自然に動くようにしました。
C#
1if(Physics.Raycast(transform.position, -transform.up, out RaycastHit hit, float.PositiveInfinity))
2{
3 transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation, 0.1f);
4}
#残りの問題
地面の角度とキャラクターを平行にするのとは別に
左右どちらかに回転させたい。つまりY軸の回転。
Y軸の回転のみQuaternion.FromToRotationの影響を受けないようにしたい。
#最終的なコード
C#
1if(Physics.Raycast(transform.position, -transform.up, out RaycastHit hit, float.PositiveInfinity))
2{
3 transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(Vector3.Cross(-hit.normal, transform.right)), 0.1f);
4}
#コード説明
放線に一致するように回転
キャラクターから見て対象への角度を「-180~180度」の範囲で求める
Quaternionの使い方
#残りの問題で記述した問題点について...(恥)
書き忘れていましたが今回のキャラクターはAnimatorのApply Root Motionで行っていました。
移動のアニメーションの場合は良いですが方向転換のアニメーションとコードでの回転操作が邪魔して
うまく方向転換されてなかったようです。ですので方向転換のアニメーションのみコードで操作するようにすると解決しました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/03 14:57