我正在拍摄第三人称射击游戏。我找到了这段代码。但我无法理解它。首先,它将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;
}
}
答案 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
变量降低。
最后,从我们自己的当前位置减去该计算,基本上执行以目标为点的点反射。结果是我们实际上最终获得了一个具有正高度的位置(最初我们使用的是负目标高度)并且位于目标面向方向的后面。