一、基础
- 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);
七、高频坑点
- 2D 移动必须用 .normalized
- Vector2 是结构体,不能直接改
x:// 错误
rectTransform.anchoredPosition.x = 100;
// 正确
Vector2 pos = rectTransform.anchoredPosition;
pos.x = 100;
rectTransform.anchoredPosition = pos;
- 可以和 Vector3 互相转换:
Vector3 v3 = v2; // 自动转 Z=0
Vector2 v2 = v3; // 自动丢掉 Z