Unity3D : 本地坐标系,世界坐标系,和TransformPoint,TransformVector,TransformDirection的区别

目录

一、世界坐标系与本地坐标系

二、srcGameObject.transform.TransformPoint(Vector3  vec)

三、srcGameObject.transform.TransformVector(Vector3  vec)

四、srcGameObject.transform.TransformDirection(Vector3  vec)

五:示例


一、世界坐标系与本地坐标系

        世界坐标很好理解,就是模型的 transform.position,通常在无父物体的情况下,创建出来的模型默认位置就是世界坐标系的原点。

        每个物体都有自身的坐标系,此坐标系就是本地坐标系。本地坐标系的原点在模型确认后就无法更改,在Unity中本地坐标系的原点大多都在物体的重心处。两者坐标系如图所示

 注意,transform.localposition就是在父物体的本地坐标系下的本物体坐标。

二、srcGameObject.transform.TransformPoint(Vector3  vec)

       传的参数是在srcGameObject的本地坐标系下的vec点的相对位置,返回的是vec世界坐标。此函数受srcGameObject的scale缩放的影响。例如在一个物体旁边创建一个紧贴着原物体的新物体。

 Vector3 thePosition = srcObject.transform.TransformVector(Vector3.right * 1);
<think>好的,我现在需要回答用户关于Unity世界坐标系本地坐标系区别以及转换方法的问题。首先,我要确保自己正确理解这两个概念,并根据提供的引用资料来组织回答。 首先,世界坐标系是全局的,所有对象的位置都是相对于这个固定原点的。而本地坐标系是相对于父对象的,原点在父对象的位置,轴向也会随父对象的旋转而变化。根据引用[2],世界坐标系的原点是世界的中心,轴向固定,而本地坐标系的轴向跟随父对象。引用[3]提到,子节点的本地坐标在父节点变换时会改变其世界坐标,但本地坐标本身不变。 接下来,转换方法。用户想知道如何相互转换。引用[2]提到使用transform.position等API获取世界坐标,而本地坐标则是transform.localPosition。转换方法方面,引用[4]指出使用Transform.TransformPointInverseTransformPoint进行点方向的转换。另外,引用[3]中的关系式说明转换涉及矩阵乘法,但用户可能不需要深入数学细节,只需要知道API的使用。 需要确保回答结构清晰,分点说明区别转换方法,并引用提供的资料。同时,按照用户要求,生成相关问题,比如性能优化、应用场景等。最后,检查是否符合格式要求,如使用正确的LaTeX格式,虽然这个问题可能不需要太多数学公式,但如果有的话,需要用$...$或$$...$$。 现在组织回答内容: 1. 区别部分: - 世界坐标系:原点固定,轴向固定,引用[2]中的描述。 - 本地坐标系:原点在父对象,轴向随父对象旋转,引用[2][3]。 2. 转换方法: - 本地世界:Transform.TransformPoint,引用[4]。 - 世界本地:Transform.InverseTransformPoint,引用[4]。 - 方向的转换:TransformDirectionInverseTransformDirection,引用[4]。 - 其他API如TransformPointlocalPosition的使用,引用[2]。 确保每个引用标注正确,例如在转换方法部分引用[4][3]。可能还需要提到transform.localPositiontransform.position的区别,如引用[2]中的API。 最后生成相关问题,考虑用户可能想了解更多应用、性能优化或原理,比如如何优化转换计算的性能,实际应用案例,或者数学原理等。</think>### Unity世界坐标系本地坐标系区别及转换方法 #### 一、核心区别 1. **世界坐标系** - **原点**:固定为场景的全局中心点[^2]。 - **轴向**:三个轴向(X/Y/Z)始终固定,不随物体旋转而改变[^2]。 - **应用场景**:描述物体在全局空间中的绝对位置,例如`transform.position`直接获取世界坐标。 2. **本地坐标系** - **原点**:基于父物体的位置,若无父物体则与世界坐标系一致[^3]。 - **轴向**:跟随父物体的旋转或缩放而变化。例如,父物体旋转后,子物体的本地坐标轴向也会改变[^3]。 - **应用场景**:描述物体相对于父物体的相对位置,通过`transform.localPosition`获取本地坐标。 #### 二、转换方法 1. **本地坐标 → 世界坐标** - **点坐标转换**: ```csharp Vector3 worldPos = transform.TransformPoint(localPos); ``` 此方法将本地坐标`localPos`转换为世界坐标`worldPos`,并考虑父物体的缩放旋转[^4]。 - **方向向量转换**: ```csharp Vector3 worldDir = transform.TransformDirection(localDir); ``` 仅转换方向,忽略缩放影响[^4]。 2. **世界坐标 → 本地坐标** - **点坐标转换**: ```csharp Vector3 localPos = transform.InverseTransformPoint(worldPos); ``` 将世界坐标`worldPos`转换为当前物体坐标系下的本地坐标[^4]。 - **方向向量转换**: ```csharp Vector3 localDir = transform.InverseTransformDirection(worldDir); ``` 方向转换同样忽略缩放。 3. **父子层级关系的影响** 子物体的世界坐标由其父物体的变换矩阵决定,满足关系式: $$ \text{WorldMatrix} = \text{ParentWorldMatrix} \times \text{LocalMatrix} $$ 即子物体的最终世界坐标是父物体变换矩阵与其本地变换矩阵的乘积。 #### 三、关键API总结 | 功能 | 世界坐标系API | 本地坐标系API | |---------------------|---------------------|------------------------| | 获取坐标 | `transform.position`| `transform.localPosition`[^2] | | 获取旋转(欧拉角) | `transform.eulerAngles` | `transform.localEulerAngles`[^2] |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值