一、基础

  • Vector2:表示 2D 坐标、方向、距离,由 x / y 组成
  • 适用场景:UGUI 位置、2D 物体移动、鼠标坐标、屏幕坐标

二、常用静态属性

Vector2.zero;      // (0,0)          最常用!
Vector2.one;       // (1,1)
Vector2.up;        // (0,1)          上
Vector2.down;      // (0,-1)         下
Vector2.right;     // (1,0)          右
Vector2.left;      // (-1,0)         左

三、实例属性

Vector2 v = new Vector2(1, 2);

v.x; v.y;              // 坐标分量
v.magnitude;           // 向量长度(距离)
v.sqrMagnitude;        // 长度平方(性能更高,用于比较)
v.normalized;          // 归一化(长度=1,纯方向)

四、常用静态方法

1. 距离

float dist = Vector2.Distance(a, b);

2. 点乘(判断方向/前后)

float dot = Vector2.Dot(a, b);
// >0 同向  <0 反向  =0 垂直

3. 插值(平滑移动)

Vector2.Lerp(a, b, t);    // t 0~1

4. 匀速移动

Vector2.MoveTowards(from, to, step);

5. 反射(2D 反弹)

Vector2.Reflect(入射方向, 法线);

6. 投影

Vector2.Project(vector, onNormal);

五、运算符(直接用)

a + b;    // 相加
a - b;    // 求方向
a * k;    // 缩放长度
a / k;

六、高频实战代码(2D 专用)

1. 求 2D 方向

Vector2 dir = (targetPos - myPos).normalized;

2. 2D 物体移动

transform.Translate(dir * speed * Time.deltaTime);

3. UGUI 平滑跟随

rectTransform.anchoredPosition = Vector2.Lerp(当前, 目标, 0.1f);

4. 判断是否到达目标

if(Vector2.Distance(当前, 目标) < 0.1f) { }

5. 鼠标位置(屏幕转世界)

Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

七、高频坑点

  1. 2D 移动必须用 .normalized
  2. Vector2 是结构体,不能直接改 x
    // 错误
    rectTransform.anchoredPosition.x = 100;
    // 正确
    Vector2 pos = rectTransform.anchoredPosition;
    pos.x = 100;
    rectTransform.anchoredPosition = pos;
    
  3. 可以和 Vector3 互相转换:
    Vector3 v3 = v2;   // 自动转 Z=0
    Vector2 v2 = v3;   // 自动丢掉 Z