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

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屏幕坐标 → 视口坐标

相关文章:

  • svn: E170013 和 svn: E120171 的问题
  • 【蓝桥杯省赛真题52】python连续正整数和 第十五届蓝桥杯青少组Python编程省赛真题解析
  • 历史数据分析——宁波海运
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Expanding Cards (展开式卡片)
  • 产品周围的几面墙
  • 大模型中的Token机制深度解析
  • [ctfshow web入门] web122
  • 安全漏洞频发,如何加强防护措施?
  • IntelliJ IDEA设置编码集
  • 普通用户的服务器连接与模型部署相关记录
  • 代码随想录算法训练营 Day49 图论Ⅰ 深度优先与广度优先
  • 基于 Zookeeper 部署 Kafka 集群
  • Linux系统:ext2文件系统的核心概念和结构
  • 什么是open BMC?
  • GO语言(一期)常用关键字总结
  • C++学习:六个月从基础到就业——C++17:结构化绑定
  • 数据治理进阶:精读62页数据治理体系建设文档【附全文阅读】
  • 二十一、案例特训专题4【数据库篇】
  • Vue3进行工程化项目,保姆级教学(编译软件:vscode)大部分编译平台适用
  • EmuEdit
  • 打造信息消费新场景、新体验,上海信息消费节开幕
  • 解放日报:“感觉全世界人都在上海买买买”
  • 第十一届世界雷达展开幕,尖端装备、“大国重器”集中亮相
  • 中国军网:带你揭开3所新调整组建军队院校的神秘面纱
  • 泽连斯基:乌代表团已启程,谈判可能于今晚或明天举行
  • 商务部回应稀土出口管制问题