Quaternion如何乘以向量?

时间:2017-05-28 07:17:30

标签: c# unity3d

我正在拍摄第三人称射击游戏。我找到了这段代码。但我无法理解它。首先,它将Quaternion乘以" 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;
    }
}

1 个答案:

答案 0 :(得分:3)

让我们分解一下:

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;

Vector3乘以Quaternion表示将旋转应用于矢量。因此,在这种情况下,您可以根据目标的旋转旋转前向矢量(没有Z轴旋转,因为我们之前将其设置为0)。然后将得到的前向向量乘以一定距离,以便在目标面向当前方向的某个位置给出一个点,并根据targetheight变量降低。

最后,从我们自己的当前位置减去该计算,基本上执行以目标为点的点反射。结果是我们实际上最终获得了一个具有正高度的位置(最初我们使用的是负目标高度)并且位于目标面向方向的后面。