2017-05-28 4 views
-1

私は第三者のシューティングゲームに取り組んでいます。そして私はこのコードを見つけました。しかし、私はそれで意味をなさない。まず、Quaternionに「Vector3.forward」を掛けていて、コンパイラは何も表示していません。また、このコードの主なロジックについても明確にすることができます。私はコードを暗記することは良い習慣ではないことを知っている。だからあなたは私にコードを説明することができます。 Quaternion eulerは、オイラーをクォータニオンに変更するためのものです。クォータニオンがベクトルにどのように乗算されるのですか?

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class CameraFollow : MonoBehaviour { 
    [SerializeField] 
    Transform target; 
    [SerializeField] 
    float distance; 
    [SerializeField] 
    float targetheight; 

    private float x = 0; 
    private float y = 0; 

    void LateUpdate() 
    { 

     y = target.eulerAngles.y; 

     Quaternion rotation = Quaternion.Euler(x, y, 0); 
     Debug.Log(rotation); 
     transform.rotation = rotation; 

     var postion = target.position - (rotation *Vector3.forward* distance + new Vector3(0, -targetheight, 0)); 
     transform.position = postion; 
    } 
} 

答えて

2

それを打破するのをしてみましょう:

y = target.eulerAngles.y; 

これはTransform.eulerAngles()あるとQuaternionとしてあなたのターゲットの現在の回転を与えます。

その後、回転はターゲットに再適用されますが、Z軸の周りの回転は削除されます。

Quaternion rotation = Quaternion.Euler(x, y, 0); 
Debug.Log(rotation); 
transform.rotation = rotation; 

これはQuaternion.Euler(x,y,z)です。これは3度の値からの回転を示します。

var postion = target.position - (rotation *Vector3.forward* distance + new Vector3(0, -targetheight, 0)); 
transform.position = postion; 

ベクトルに回転を適用するVector3Quaternion手段を掛ける:

最終は次の計算です。したがって、この場合、ターゲットの回転に基づいて前方ベクトルを回転させます(Z軸の回転はゼロに設定しています)。その結果の前方ベクトルにある距離を掛けて、ターゲットの現在の向きの前方のどこかにポイントを与え、targetheight変数に従って降下させます。

最後に、現在の位置から計算が減算され、基本的にターゲットがポイントである点反射が実行されます。結果は、実際には高さが正の位置(元々は負の目標高さを使用していた)で終わり、ターゲットの向いている方向の後ろに位置することになります。

+0

私は、乗算はベクトルの回転を適用するためのものであることを理解しました –

関連する問題