2017-05-28 104 views
-1

我正在研究第三人稱射擊遊戲。我找到了這個代碼。但我無法用它做出任何意義。首先它將四元數與「Vector3.forward」相乘,編譯器不顯示任何內容。你也可以讓我清楚這個代碼的主要邏輯。我知道背誦代碼不是一個好習慣。那麼你能解釋我的代碼嗎?那Quaternion.euler做了什麼,就是把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)並給你一個三度值的旋轉。

最後是如下的計算:

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

乘以由QuaternionVector3裝置到旋轉應用到載體中。因此,在這種情況下,您可以根據目標的旋轉來旋轉前向矢量(無需Z軸旋轉,因爲我們先將其設置爲0)。然後,結果向前的向量乘以一定的距離,給我們一個位於目標當前面向方向前的某個點,並根據變量targetheight降低。

最後,計算從我們自己的當前位置中減去,基本上以目標爲點進行點反射。其結果是,我們實際上最終得到了一個具有正高度的位置(最初我們使用了一個負目標高度)並且落後於目標的正面方向。

+0

現在,謝謝我明白,乘法只是爲了在向量中應用旋轉 –