一、基础

  • Vector3:表示 3D 空间中的点、方向、位移,由 x/y/z 组成。
  • 常用轴:
    • 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);

七、高频坑点

  1. 移动必须用 .normalized,否则距离越远越快。
  2. Vector3.forward = 世界前方;transform.forward = 物体自身前方。
  3. Vector3 是结构体,不能直接改 position.x
    // 错误
    transform.position.x = 5;
    // 正确
    Vector3 pos = transform.position;
    pos.x = 5;
    transform.position = pos;