2017-05-28 210 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

现在,谢谢我明白,乘法只是为了在向量中应用旋转 –