Unity学习总结篇(1)关于各种坐标系

目录

[一、世界坐标系(World Space)](#一、世界坐标系(World Space))

[二、物体坐标系(Local Space)](#二、物体坐标系(Local Space))

[世界坐标 ↔ 本地坐标](#世界坐标 ↔ 本地坐标)

[三、屏幕坐标系(Screen Space)](#三、屏幕坐标系(Screen Space))

[四、视口坐标系(Viewport Space)](#四、视口坐标系(Viewport Space))

[世界坐标 ↔ 视口坐标](#世界坐标 ↔ 视口坐标)

[屏幕坐标 ↔ 视口坐标](#屏幕坐标 ↔ 视口坐标)

结:

[Unity 坐标系转换 API 与属性总结表](#Unity 坐标系转换 API 与属性总结表)


一、世界坐标系(World Space)

全局参考系,原点为场景原点 (0, 0, 0),所有对象的位置、旋转、缩放均基于此坐标系。

核心属性:

transform.position:世界坐标系中的位置。

transform.rotation:四元数表示的世界旋转。

transform.eulerAngles:欧拉角形式的世界旋转。

transform.lossyScale:世界坐标系中的缩放(只读,因层级缩放影响)。

二、物体坐标系(Local Space)

相对于父对象的位置,若无父对象则与世界坐标系一致。

核心属性:

transform.localPosition:父对象坐标系中的位置。

transform.localRotation:相对于父对象的旋转(四元数)。

transform.localEulerAngles:本地欧拉角。

transform.localScale:相对于父对象的缩放。

世界坐标 ↔ 本地坐标
cpp 复制代码
// 世界坐标转本地坐标
Vector3 localPos = transform.InverseTransformPoint(worldPos);

// 本地坐标转世界坐标
Vector3 worldPos = transform.TransformPoint(localPos);

// 方向与向量转换(忽略位置)
Vector3 localDir = transform.InverseTransformDirection(worldDir);
Vector3 worldDir = transform.TransformDirection(localDir);

// 本地向量 → 世界向量
Vector3 worldVector = transform.TransformVector(localVector);

// 世界向量 → 本地向量
Vector3 localVector = transform.InverseTransformVector(worldVector);

三、屏幕坐标系(Screen Space)

基于屏幕像素的坐标系,左下角为 (0, 0),右上角为 (Screen.width, Screen.height)。

核心属性:

Input.mousePosition:鼠标在屏幕坐标系中的位置。

Screen.width / Screen.height:屏幕分辨率。

世界坐标 ↔ 屏幕坐标

cpp 复制代码
// 世界坐标转屏幕坐标(z 值为距摄像机深度)
Vector3 screenPos = Camera.main.WorldToScreenPoint(worldPos);

// 屏幕坐标转世界坐标(需指定深度)
Vector3 worldPos = Camera.main.ScreenToWorldPoint(
    new Vector3(screenPos.x, screenPos.y, cameraDepth));

四、视口坐标系(Viewport Space)

归一化坐标系,范围 0, 1,左下角 (0, 0),右上角 (1, 1),基于摄像机视口。

世界坐标 ↔ 视口坐标
cpp 复制代码
// 世界坐标转视口坐标
Vector3 viewportPos = Camera.main.WorldToViewportPoint(worldPos);

// 视口坐标转世界坐标
Vector3 worldPos = Camera.main.ViewportToWorldPoint(viewportPos);
屏幕坐标 ↔ 视口坐标
cpp 复制代码
// 视口坐标转屏幕坐标
Vector3 screenPos = Camera.main.ViewportToScreenPoint(viewportPos);

// 屏幕坐标转视口坐标
Vector3 viewportPos = Camera.main.ScreenToViewportPoint(screenPos);

结:

Unity 坐标系转换 API 与属性总结表

属性/方法 参数 返回值 作用 是否受缩放影响 父子级关系影响
世界坐标系相关属性
transform.position - Vector3 获取/设置世界坐标系中的位置 否(仅自身位置) 是(综合父级变换)
transform.rotation - Quaternion 获取/设置世界坐标系中的旋转(四元数) 否 是
transform.eulerAngles - Vector3 获取/设置世界坐标系中的欧拉角 否 是
transform.lossyScale - Vector3 获取世界坐标系中的缩放(累积父级缩放) 是(综合父级缩放) 是
物体坐标系相关属性
transform.localPosition - Vector3 获取/设置父物体坐标系中的位置 否 是(仅父级影响)
transform.localRotation - Quaternion 获取/设置父物体坐标系中的旋转(四元数) 否 是
transform.localEulerAngles - Vector3 获取/设置父物体坐标系中的欧拉角 否 是
transform.localScale - Vector3 获取/设置相对于父物体的缩放 是 是
世界 ↔ 本地坐标转换方法
transform.TransformPoint localPoint Vector3 本地坐标 → 世界坐标(包含位置、旋转、缩放) 是 是
transform.InverseTransformPoint worldPoint Vector3 世界坐标 → 本地坐标 是 是
transform.TransformDirection localDirection Vector3 本地方向 → 世界方向(仅受旋转影响) 否 是
transform.InverseTransformDirection worldDirection Vector3 世界方向 → 本地方向 否 是
transform.TransformVector localVector Vector3 本地向量 → 世界向量(受旋转和缩放影响) 是 是
transform.InverseTransformVector worldVector Vector3 世界向量 → 本地向量 是 是
世界 ↔ 屏幕坐标转换方法
Camera.WorldToScreenPoint worldPos Vector3 世界坐标 → 屏幕坐标(包含深度值) 否 否
Camera.ScreenToWorldPoint screenPos(含深度) Vector3 屏幕坐标 → 世界坐标 否 否
世界 ↔ 视口坐标转换方法
Camera.WorldToViewportPoint worldPos Vector3 世界坐标 → 视口坐标(归一化) 否 否
Camera.ViewportToWorldPoint viewportPos Vector3 视口坐标 → 世界坐标 否 否
屏幕 ↔ 视口坐标转换方法
Camera.ViewportToScreenPoint viewportPos Vector3 视口坐标 → 屏幕坐标 否 否
Camera.ScreenToViewportPoint screenPos Vector3 屏幕坐标 → 视口坐标 否 否
相关推荐
旖旎夜光11 分钟前
【C++ 基础入门】C++ 多态(中):虚函数表、多态原理与动静绑定
开发语言·c++·笔记·学习
1-1=01 小时前
C# 数据结构和特殊类型
数据结构·c#·.net·.netcore
旖旎夜光1 小时前
【C++ 基础入门】C++多态(下):单/多继承虚表、多态补充与 21 道高频题
开发语言·c++·笔记·学习
叼烟扛炮6 小时前
[LangChain] 学习笔记(07):大模型长出手脚——工具(Tools)定义与调用闭环
笔记·学习·langchain
叼烟扛炮11 小时前
[LangChain] 学习笔记(06):突破大模型限制——结构化输出(Structured Output)
windows·笔记·学习·langchain
且从容.12 小时前
VUE3学习笔记(根据黑马教程总结)
笔记·学习
Martina_032113 小时前
AI生成3D场景的霓虹灯一开就糊成光团?用6步检查Emissive、Bloom与曝光
人工智能·3d·ai·自然语言处理·游戏引擎·材质·贴图
蒸蒸yyyyzwd13 小时前
关于 AI 开发相关的一些面经。
笔记·学习
坤坤子吖20 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
蒸蒸yyyyzwd21 小时前
后端相关学习笔记。
笔记·学习