当前位置: 首页 > ops >正文

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

目录

一、世界坐标系(World Space)

二、物体坐标系(Local Space)

 世界坐标 ↔ 本地坐标

三、屏幕坐标系(Screen Space)

四、视口坐标系(Viewport Space)

世界坐标 ↔ 视口坐标

屏幕坐标 ↔ 视口坐标

结:

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:相对于父对象的缩放。

 世界坐标 ↔ 本地坐标
// 世界坐标转本地坐标
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:屏幕分辨率。

世界坐标 ↔ 屏幕坐标

// 世界坐标转屏幕坐标(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),基于摄像机视口。

世界坐标 ↔ 视口坐标
// 世界坐标转视口坐标
Vector3 viewportPos = Camera.main.WorldToViewportPoint(worldPos);// 视口坐标转世界坐标
Vector3 worldPos = Camera.main.ViewportToWorldPoint(viewportPos);
屏幕坐标 ↔ 视口坐标
// 视口坐标转屏幕坐标
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.TransformPointlocalPointVector3本地坐标 → 世界坐标(包含位置、旋转、缩放)
transform.InverseTransformPointworldPointVector3世界坐标 → 本地坐标
transform.TransformDirectionlocalDirectionVector3本地方向 → 世界方向(仅受旋转影响)
transform.InverseTransformDirectionworldDirectionVector3世界方向 → 本地方向
transform.TransformVectorlocalVectorVector3本地向量 → 世界向量(受旋转和缩放影响)
transform.InverseTransformVectorworldVectorVector3世界向量 → 本地向量
世界 ↔ 屏幕坐标转换方法
Camera.WorldToScreenPointworldPosVector3世界坐标 → 屏幕坐标(包含深度值)
Camera.ScreenToWorldPointscreenPos(含深度)Vector3屏幕坐标 → 世界坐标
世界 ↔ 视口坐标转换方法
Camera.WorldToViewportPointworldPosVector3世界坐标 → 视口坐标(归一化)
Camera.ViewportToWorldPointviewportPosVector3视口坐标 → 世界坐标
屏幕 ↔ 视口坐标转换方法
Camera.ViewportToScreenPointviewportPosVector3视口坐标 → 屏幕坐标
Camera.ScreenToViewportPointscreenPosVector3屏幕坐标 → 视口坐标
http://www.xdnf.cn/news/7040.html

相关文章:

  • 信息学奥赛一本通1012:计算多项式的值
  • Spring-Beans的生命周期的介绍
  • python3.13版本降为3.12
  • 基于STM32F103与Marvell88W8686的WIFI无线监控视频传输系统研发(论文)
  • 生成树的保护机制
  • 【运营商查询】批量手机号码归属地和手机运营商高速查询分类,按省份城市,按运营商移动联通电信快速分类导出Excel表格,基于WPF的实现方案
  • 院校机试刷题第六天:1134矩阵翻转、1052学生成绩管理、1409对称矩阵
  • AI驱动的研发流程:定义高度专业和系统化的规划基准
  • 软件架构设计--期末复习
  • 5月18总结
  • 拓展运算符
  • 海盗王改60帧时有关树木抖动的问题
  • 数字电子技术基础(六十)——使用Digital软件绘制脉冲触发的触发器
  • 《Python星球日记》 第89天:LlamaIndex 与知识图谱
  • 中国与全球电子取证行业市场报告(公开信息版)
  • 生产模式下react项目报错minified react error #130的问题
  • 互联网大厂Java求职面试:AI与大模型应用集成及云原生挑战
  • Java核心API实战:从字符串到多线程全解析
  • symfonos: 2靶场
  • Compose笔记(二十五)--Brush
  • 行业事件 | 中国灾害防御协会雷电灾害分会在京正式成立
  • MySQL开发规范
  • Atcoder Beginner Contest 406
  • 网络安全深度解析:21种常见网站漏洞及防御指南
  • 一文读懂----Docker 常用命令
  • SQL性能分析
  • 23种设计模式考试趋势分析之——适配器(Adapter)设计模式——求三连
  • IDE/IoT/搭建物联网(LiteOS)集成开发环境,基于 VSCode + IoT Link 插件
  • ubuntu18.04编译qt5.14.2源码
  • [特殊字符] SSL/TLS 中的密钥协商流程笔记