一、基础
- Vector3:表示 3D 空间中的点、方向、位移,由
x/y/z 组成。
- 常用轴:
二、常用静态属性
Vector3.zero; // (0,0,0)
Vector3.one; // (1,1,1)
Vector3.up; // (0,1,0) 上
Vector3.down; // (0,-1,0) 下
Vector3.right; // (1,0,0) 右
Vector3.left; // (-1,0,0) 左
Vector3.forward; // (0,0,1) 前(世界空间)
Vector3.back; // (0,0,-1) 后
三、实例属性
Vector3 v = new Vector3(1,2,3);
v.x; v.y; v.z; // 分量
v.magnitude; // 长度 = √(x²+y²+z²)
v.sqrMagnitude; // 长度平方(更快,用于比较)
v.normalized; // 归一化(长度=1,方向不变)
四、常用静态方法
1. 距离
float dist = Vector3.Distance(a, b);
2. 点乘(判断前后/夹角)
float dot = Vector3.Dot(a, b);
// dot > 0:夹角 < 90°(同向)
// dot = 0:垂直
// dot < 0:夹角 > 90°(反向)
3. 叉乘(求垂直方向/左右)
Vector3 cross = Vector3.Cross(a, b);
4. 线性插值(平滑移动)
Vector3.Lerp(a, b, t); // t 0~1
5. 匀速移动
Vector3.MoveTowards(from, to, maxDistanceDelta);
6. 反射
Vector3.Reflect(inDir, normal);
7. 投影
Vector3.Project(vector, onNormal);
五、运算符
a + b; // 相加
a - b; // 相减(方向:b→a)
a * k; // 缩放
a / k; // 缩小
六、高频实战代码
1. 求方向
Vector3 dir = (target.position - transform.position).normalized;
2. 匀速移动
transform.Translate(dir * speed * Time.deltaTime);
3. 平滑移动
transform.position = Vector3.Lerp(transform.position, targetPos, 0.1f);
4. 判断是否到达
if (Vector3.Distance(transform.position, targetPos) < 0.1f) { }
5. 看向目标
transform.LookAt(target);
七、高频坑点
- 移动必须用
.normalized,否则距离越远越快。
Vector3.forward = 世界前方;transform.forward = 物体自身前方。
- Vector3 是结构体,不能直接改
position.x:// 错误
transform.position.x = 5;
// 正确
Vector3 pos = transform.position;
pos.x = 5;
transform.position = pos;