Appearance
Unity 常用结构体 Struct
先记住一句话
Unity 里的很多常用数据都是 struct,也就是值类型。 它们更像“一包小数据”,比如位置、方向、颜色、矩形、射线命中信息。
常见结构体:
c
Vector2
Vector3
Quaternion
Color
Color32
Rect
Bounds
Ray
RaycastHit
LayerMask
Vector2Int
Vector3Int
Matrix4x4最常用:Vector3
Vector3 表示 3D 位置、方向、速度。
c
Vector3 pos = new Vector3(0f, 1f, 0f);
transform.position = pos;
Vector3 dir = target.position - transform.position;
float distance = dir.magnitude;
Vector3 moveDir = dir.normalized;常用静态值:
c
Vector3.zero
Vector3.one
Vector3.up
Vector3.forward
Vector3.rightQuaternion:旋转
Unity 用 Quaternion 表示旋转。初学不要手动改它的 x/y/z/w。
c
transform.rotation = Quaternion.Euler(0f, 90f, 0f);
Vector3 dir = target.position - transform.position;
transform.rotation = Quaternion.LookRotation(dir);Color:颜色
Color 的 r/g/b/a 是 0 到 1。
c
Color red = new Color(1f, 0f, 0f, 1f);
Color halfAlpha = new Color(1f, 1f, 1f, 0.5f);
image.color = Color.Lerp(Color.red, Color.green, 0.5f);Color32 用 0 到 255:
c
Color32 red32 = new Color32(255, 0, 0, 255);Ray / RaycastHit / LayerMask 射线检测三件套:
c
Ray ray = new Ray(origin, direction);
if (Physics.Raycast(ray, out RaycastHit hit, 100f, groundMask))
{
Debug.Log(hit.point);
Debug.Log(hit.collider.name);
}Ray:从哪里往哪里射。 RaycastHit:打中了什么,命中点在哪。 LayerMask:只检测哪些层。
结构体最容易踩的坑
因为 struct 是值类型,赋值会复制一份。
这个写法通常不行:
c
transform.position.x = 5f;正确写法:
c
Vector3 p = transform.position;
p.x = 5f;
transform.position = p;你要理解成:先把 position 这包数据拿出来,改完以后,再整包放回去。
学习顺序
先学 Vector2 / Vector3。 再学 Quaternion。 再学 Color / Color32。 然后学 Ray / RaycastHit / LayerMask。 最后再补 Rect / Bounds / Vector2Int / Vector3Int / Matrix4x4。
参考链接