2017-07-01 4 views
0

3Dオブジェクトを回転させることに問題があります。そのロック・オン・ロケットは、常に目標に向かっているはずですが、x軸を中心に回転しているはずです。ターゲットをスムーズに見て、別の軸の周りの回転を無効にします

私はそれがスムーズにターゲットに見えるようにするには、次のコードを使用しています:

void SmoothLookAt (Vector3 target) 
{ 
    Vector3 difference = target - transform.position; 
    float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg; 
    var targetRotation = Quaternion.Euler(0, 0, rotationZ); 
    transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, 5 * Time.deltaTime); 
} 

どのように私はまた、x軸を中心に回転させることができますか?

私は

transform.Rotate(Vector3.right * Time.deltaTime * speed); 

が、その運を追加しようとしました。私のロケットはまったく回転を拒否する(意図した方向に向かって進む)

ありがとうございます!

+0

回転を書き込む2つの異なる機能があります。それが自分の最後の変更から変わらないことを期待する人、そしてそれを特定の方向に強制する人。何が起こると思いますか? – Draco18s

+0

私はちょうどRotate()didintが働いていると分かりました。私は何をしたいのですか? – artman

+0

変換階層を使う必要があります.2つの関数を一緒に回転させて動作させることはできません。 – Draco18s

答えて

1

使用複数の変換

あなたは回転の2つの競合種類を持っているとして、それらを積み重ねるために取得する唯一の方法は、変換階層に変換するために各1を割り当てることです。 「スピン」部分を「ターゲットに向ける」部分の子にする。シーン階層の下にある変換行列は、残りの部分を処理します。

関連する問題