目录
在 Unity 开发中,Vector3 是一个常用且重要的结构体。从本节课开始,我们将深入讲解脚本中常用的类和结构体,首先聚焦于 Vector3。
一、Vector3 的基本概念
(一)定义与组成
Vector3 是一个结构体,其中最常用的三个变量是 x、y、z。它可以描述多种信息,比如从名字来看,它是向量,但同时它也可以代表坐标、旋转、缩放等。例如,当它作为坐标时,可以确定一个位置;当与欧拉角相关时,又可能代表旋转;在涉及缩放比例时,如 x、y 方向不动,z 缩放为 0.5 倍,它就体现了缩放的含义。
(二)初始化方法
- 直接
new
一个 Vector3,也可以通过vector3.zero
等静态属性来初始化。vector3.zero
能拿到一个初始化为 (0, 0, 0) 的结构体,vector3.one
则是初始化为 (1, 1, 1)。还有forward
(0, 0, 1)、back
(0, 0, -1)、left
(-1, 0, 0)、right
(1, 0, 0)、up
(0, 1, 0)、down
(0, -1, 0)等静态属性可快捷获取向量结构体。
二、Vector3 的操作与应用
(一)向量计算
- 夹角计算
- 当有两个向量,如
v
和v2
时,可以使用vector3.angle
方法计算它们的夹角,该方法传入两个向量,返回的夹角是float
类型。例如,当两个向量分别为红色箭头指向的 (1, 0, 0) 和蓝色箭头指向的 (0, 0, 1) 时,计算出的夹角为 90 度。
- 当有两个向量,如
- 距离计算
- 如果把向量当作两个点(坐标)来使用,就可以通过
vector3.distance
方法计算两点之间的距离。比如有两个坐标点,通过这个方法可以得到它们之间的距离值。
- 如果把向量当作两个点(坐标)来使用,就可以通过
- 点乘与叉乘
- Vector3 有点乘(
dot
)和叉乘(cross
)操作。点乘结果是一个数值,叉乘结果是一个向量。通过代码vector3.dot vv2
进行点乘运算,叉乘则类似有对应的方法进行计算,运行代码可以看到相应的结果。
- Vector3 有点乘(
- 差值计算
- 在两个向量之间可以做差值计算,例如
vector3.Lerp
(差值计算相关方法),通过给定比例,如在 (0, 0, 0) 向量和 (1, 1, 1) 向量之间,给定比例为 0.5,差值返回结果是 (0.5, 0.5, 0.5);比例为 0.8 时,结果是 (0.8, 0.8, 0.8)。差值计算在游戏动画等方面有很多应用。
- 在两个向量之间可以做差值计算,例如
- 向量的模与规范化
- 可以获取向量的模,比如拿到
v
向量的模,代表它当前的长度。通过v.normalize
可以得到规范化的向量,使整个向量变成一个单位向量。
- 可以获取向量的模,比如拿到
以下是用 C# 在 Unity 中使用Vector3
的示例代码:
using UnityEngine;
public class Vector3Example : MonoBehaviour
{
void Start()
{
// 初始化方法示例
Vector3 v1 = new Vector3(2, 3, 4);
Vector3 v2 = Vector3.zero;
Vector3 v3 = Vector3.one;
Vector3 v4 = Vector3.forward;
Vector3 v5 = Vector3.back;
Vector3 v6 = Vector3.left;
Vector3 v7 = Vector3.right;
Vector3 v8 = Vector3.up;
Vector3 v9 = Vector3.down;
// 向量计算示例
Vector3 vv1 = new Vector3(1, 0, 0);
Vector3 vv2 = new Vector3(0, 0, 1);
// 夹角计算
float angle = Vector3.Angle(vv1, vv2);
Debug.Log("夹角为:" + angle);
// 距离计算
Vector3 point1 = new Vector3(2, 2, 2);
Vector3 point2 = new Vector3(5, 5, 5);
float distance = Vector3.Distance(point1, point2);
Debug.Log("两点距离为:" + distance);
// 点乘示例
float dotResult = Vector3.Dot(vv1, vv2);
Debug.Log("点乘结果为:" + dotResult);
// 叉乘示例
Vector3 crossResult = Vector3.Cross(vv1, vv2);
Debug.Log("叉乘结果为:" + crossResult);
// 差值计算示例
Vector3 start = Vector3.zero;
Vector3 end = Vector3.one;
Vector3 lerpResult1 = Vector3.Lerp(start, end, 0.5f);
Vector3 lerpResult2 = Vector3.Lerp(start, end, 0.8f);
Debug.Log("比例为 0.5 的差值结果为:" + lerpResult1);
Debug.Log("比例为 0.8 的差值结果为:" + lerpResult2);
// 向量的模与规范化示例
Vector3 vv3 = new Vector3(3, 4, 5);
float magnitude = vv3.magnitude;
Debug.Log("向量的模为:" + magnitude);
Vector3 normalized = vv3.normalized;
Debug.Log("规范化后的向量为:" + normalized);
}
}
这段代码展示了在 Unity 中Vector3
的各种常见操作和应用,包括初始化、夹角计算、距离计算、点乘、叉乘、差值计算以及向量的模和规范化。你可以将这个脚本挂载到一个游戏对象上,在 Unity 编辑器中运行游戏,查看控制台输出的结果。
在 Unity 开发中,熟练掌握 Vector3 的使用是非常重要的基础,随着后续开发的深入,我们会更加理解它的多种用途和灵活操作。更多关于 Vector3 的高级应用,我们将在后续编写更复杂的代码时进一步探索和理解。