Unity之Quaternion和Vector3的API

由于我发现我经常记不牢这些API还经常搞混,于是总结一下

Quaternion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
在Unity中,`Quaternion` 类用于表示三维空间中的旋转。以下是你提到的API的传入参数和返回值的总结:

1. Quaternion.Euler(Vector3)
- 传入:一个 `Vector3` 对象,表示绕x、y、z轴的旋转角度(以度为单位)。
- 返回值 :一个新的 `Quaternion` 对象,表示由这些欧拉角定义的旋转。

2. Quaternion.AngleAxis(float, Vector3)
- 传入 :旋转角度(以度为单位)和一个 `Vector3` 对象,表示旋转轴。
- 返回值 :一个新的 `Quaternion` 对象,表示围绕给定轴的旋转。

3. Quaternion.FromToRotation(Vector3, Vector3)
- 传入 :两个 `Vector3` 对象,分别表示初始方向和目标方向。
- 返回值 :一个新的 `Quaternion` 对象,表示从初始方向旋转到目标方向的旋转。

4. Quaternion.Inverse(Quaternion)
- 传入 :一个 `Quaternion` 对象。
- 返回值 :一个新的 `Quaternion` 对象,表示传入旋转的逆旋转。

5. Quaternion.Lerp(Quaternion, Quaternion, float)
- 传入 :两个 `Quaternion` 对象和一个插值参数 `t`(在0到1之间)。
- 返回值 :一个新的 `Quaternion` 对象,表示两个旋转之间的线性插值。

6. Quaternion.Slerp(Quaternion, Quaternion, float)
- 传入 :两个 `Quaternion` 对象和一个插值参数 `t`(在0到1之间)。
- 返回值 :一个新的 `Quaternion` 对象,表示两个旋转之间的球形插值。

7. Quaternion.RotateTowards(Quaternion, Quaternion, float)
- 传入 :两个 `Quaternion` 对象和一个最大旋转角度。
- 返回值 :一个新的 `Quaternion` 对象,表示从第一个旋转向第二个旋转旋转,但不超过最大旋转角度。

8. Quaternion.SetLookRotation(Vector3, Vector3)
- 传入 :两个 `Vector3` 对象,分别表示“向前”和“向上”的方向。
- 返回值 :一个新的 `Quaternion` 对象,表示使对象面向指定方向的旋转。

9. Quaternion.Normalize(Quaternion)
- 传入 :一个 `Quaternion` 对象。
- 返回值 :一个新的 `Quaternion` 对象,表示标准化(单位长度)的旋转。

10. Quaternion.Dot(Quaternion, Quaternion)
- 传入 :两个 `Quaternion` 对象。
- 返回值 :一个 `float` 值,表示两个旋转之间的点积。

11. Quaternion.Angle(Quaternion a, Quaternion b)

- 传入:两个 Quaternion 对象 a 和 b。
- 返回值:一个 float 值,表示从旋转 a 到旋转 b 所需的最小角度(以度为单位)

12. Quaternion.LookRotation(Vector3 forward, Vector3 upwards = Vector3.up)

- 传入:一个 Vector3 对象 forward,表示前方方向;可选的 Vector3 对象 upwards,表示上方方向(默认为 Vector3.up)。
- 返回值:一个新的 Quaternion 对象,表示使对象朝向 forward 方向并对齐 upwards 方向的旋转
这些API是Unity中处理三维旋转的常用工具,它们可以帮助开发者在游戏和应用程序中实现复杂的旋转和动画效果。

Vector3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
以下是 `Vector3` 类中提到的函数的总结:

1. Vector3.Angle(Vector3 from, Vector3 to)
- 传入 :两个 `Vector3` 对象 `from` 和 `to`。
- 返回值 :一个 `float` 值,表示两个向量之间的夹角(以度为单位)。

2. Vector3.ClampMagnitude(Vector3 vector, float maxLength)
- 传入 :一个 `Vector3` 对象 `vector` 和一个 `float` 值 `maxLength`。
- 返回值 :一个新的 `Vector3` 对象,其大小被限制为 `maxLength`。

3. Vector3.Cross(Vector3 a, Vector3 b)
- 传入 :两个 `Vector3` 对象 `a` 和 `b`。
- 返回值 :一个新的 `Vector3` 对象,表示 `a` 和 `b` 的叉积结果。

4. Vector3.Distance(Vector3 a, Vector3 b)
- 传入 :两个 `Vector3` 对象 `a` 和 `b`。
- 返回值 :一个 `float` 值,表示 `a` 和 `b` 之间的距离。

5. Vector3.Dot(Vector3 a, Vector3 b)
- 传入 :两个 `Vector3` 对象 `a` 和 `b`。
- 返回值 :一个 `float` 值,表示 `a` 和 `b` 的点积结果。

6. Vector3.Lerp(Vector3 a, Vector3 b, float t)
- 传入 :两个 `Vector3` 对象 `a` 和 `b`,以及一个插值参数 `t`(在0到1之间)。
- 返回值 :一个新的 `Vector3` 对象,表示 `a` 和 `b` 之间的线性插值结果。

7. Vector3.LerpUnclamped(Vector3 a, Vector3 b, float t)
- 传入 :两个 `Vector3` 对象 `a` 和 `b`,以及一个插值参数 `t`(不受0到1限制)。
- 返回值 :一个新的 `Vector3` 对象,表示 `a` 和 `b` 之间的线性插值结果。

8. Vector3.Max(Vector3 a, Vector3 b)
- 传入 :两个 `Vector3` 对象 `a` 和 `b`。
- 返回值 :一个新的 `Vector3` 对象,其每个分量是 `a` 和 `b` 对应分量的最大值。

9. Vector3.Min(Vector3 a, Vector3 b)
- 传入 :两个 `Vector3` 对象 `a` 和 `b`。
- 返回值 :一个新的 `Vector3` 对象,其每个分量是 `a` 和 `b` 对应分量的最小值。

10. Vector3.MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta)
- 传入 :一个 `Vector3` 对象 `current`,一个 `Vector3` 对象 `target`,以及一个 `float` 值 `maxDistanceDelta`。
- 返回值 :一个新的 `Vector3` 对象,表示从 `current` 向 `target` 移动,但不超过 `maxDistanceDelta` 指定的距离。

11. Vector3.Normalize(Vector3 value)
- 传入 :一个 `Vector3` 对象 `value`。
- 返回值 :一个新的 `Vector3` 对象,表示 `value` 方向上的单位向量。

12. Vector3.OrthoNormalize(Vector3 normal, Vector3 tangent)
- 传入 :两个 `Vector3` 对象 `normal` 和 `tangent`。
- 返回值 :两个单位向量,`normal` 被标准化,`tangent` 被标准化并正交于 `normal`。

13. Vector3.Project(Vector3 a, Vector3 b)
- 传入 :两个 `Vector3` 对象 `a` 和 `b`。
- 返回值 :一个新的 `Vector3` 对象,表示 `a` 在 `b` 上的投影。

14. Vector3.ProjectOnPlane(Vector3 vector, Vector3 planeNormal)
- 传入 :一个 `Vector3` 对象 `vector` 和一个 `Vector3` 对象 `planeNormal`。
- 返回值 :一个新的 `Vector3` 对象,表示 `vector` 在由 `planeNormal` 定义的平面上的投影。

15. Vector3.Reflect(Vector3 inDirection, Vector3 inNormal)
- 传入 :一个 `Vector3` 对象 `inDirection` 和一个 `Vector3` 对象 `inNormal`。
- 返回值 :一个新的 `Vector3` 对象,表示 `inDirection` 从由 `inNormal` 定义的平面反射的结果。

16. Vector3.RotateTowards(Vector3 current, Vector3 target, float maxRadiansDelta, float maxMagnitudeDelta)
- 传入 :一个 `Vector3` 对象 `current`,一个 `Vector3` 对象 `target`,以及两个 `float` 值 `maxRadiansDelta` 和 `maxMagnitudeDelta`。
- 返回值 :一个新的 `Vector3` 对象,表示 `current` 向 `target` 旋转,但不超过 `maxRadiansDelta` 和 `maxMagnitudeDelta` 指定的角度和大小变化。

17. Vector3.Scale(Vector3 a, Vector3 b)
- 传入 :两个 `Vector3` 对象 `a` 和 `b`。
- 返回值 :一个新的 `Vector3` 对象,其每个分量是 `a` 和 `b` 对应分量的乘积。

18. Vector3.SignedAngle(Vector3 from, Vector3 to, Vector3 axis)
- 传入 :三个 `Vector3` 对象 `from`、`to` 和 `axis`。
- 返回值 :一个 `float` 值,表示 `from` 和 `to` 相对于 `axis` 的有符号夹角(以弧度为单位)。

19. Vector3.Slerp(Vector3 a, Vector3 b, float t)
- 传入 :两个 `Vector3` 对象 `a` 和 `b`,以及一个插值参数 `t`(在0到1之间)。
- 返回值 :一个新的 `Vector3` 对象,表示 `a` 和 `b` 之间的球形插值结果。

20. Vector3.SlerpUnclamped(Vector3 a, Vector3 b, float t)
- 传入 :两个 `Vector3` 对象 `a` 和 `b`,以及一个插值参数 `t`(不受0到1限制)。
- 返回值 :一个新的 `Vector3` 对象,表示 `a` 和 `b` 之间的球形插值结果。

21. Vector3.SmoothDamp(Vector3 current, Vector3 target, ref Vector3 currentVelocity, float smoothTime, float maxSpeed, float deltaTime)
- 传入 :一个 `Vector3` 对象 `current`,一个 `Vector3` 对象 `target`,一个 `Vector3` 引用 `currentVelocity`,一个 `float` 值 `smoothTime`,一个 `float` 值 `maxSpeed`,和一个 `float` 值 `deltaTime`。
- 返回值 :一个新的 `Vector3` 对象,表示 `current` 随时间平滑过渡到 `target` 的结果。

这些函数在Unity中用于处理向量运算,包括角度计算、大小限制、插值、投影等,广泛应用于物理计算、动画制作和游戏开发中。

如果想要得到局部方向,比如局部Z方向,只需要this.transfrom.rotation * Vector3.forward