Sam*_*tel 1 c# unity-game-engine
我正在开发第三人称射击游戏。我找到了这段代码。但我不能对此毫无意义。首先,它将四元数与“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;
}
}
Run Code Online (Sandbox Code Playgroud)
让我们来分解一下:
y = target.eulerAngles.y;
Run Code Online (Sandbox Code Playgroud)
这是Transform.eulerAngles()并为您提供目标的当前旋转Quaternion。
然后将该旋转重新应用于目标,但移除绕 Z 轴的旋转。
Quaternion rotation = Quaternion.Euler(x, y, 0);
Debug.Log(rotation);
transform.rotation = rotation;
Run Code Online (Sandbox Code Playgroud)
这是Quaternion.Euler(x,y,z)并为您提供三度值的旋转。
最后是如下计算:
var postion = target.position - (rotation *Vector3.forward* distance + new Vector3(0, -targetheight, 0));
transform.position = postion;
Run Code Online (Sandbox Code Playgroud)
将 a 乘以Vector3a 即可Quaternion将旋转应用于向量。因此,在这种情况下,您将根据目标的旋转来旋转前向矢量(没有 Z 轴旋转,因为我们之前将其设置为 0)。然后将所得的前向矢量乘以一定的距离,得到目标当前面向方向前方某处的点,并根据变量降低targetheight。
最后,从我们自己的当前位置中减去该计算,基本上以目标为点执行点反射。结果是,我们实际上最终得到了一个具有正高度的位置(最初我们使用的是负目标高度)并且位于目标面向方向的后面。