24.Unity本地坐标转世界坐标
24.1 题目
Unity中如何将本地坐标转为世界坐标?
24.2 深入解析
在Unity中,将本地坐标转为世界坐标可以通过以下两种方式实现:
手动计算:
- 用本地坐标加上父对象相对世界的坐标。如果有多层父子关系,不停地往上加即可。
Transform.TransformPoint方法:
- 利用Transform中的TransformPoint方法,该方法可以将本地坐标转换为世界坐标。
代码示例
using UnityEngine;
public class LocalToWorldConversion : MonoBehaviour
{
void Start()
{
// 获取物体的 Transform 组件
Transform transform = GetComponent<Transform>();
// 本地坐标
Vector3 localPosition = new Vector3(1, 0, 0);
// 方法1:手动计算
Vector3 worldPosition1 = transform.position + transform.TransformDirection(localPosition);
// 方法2:TransformPoint 方法
Vector3 worldPosition2 = transform.TransformPoint(localPosition);
Debug.Log("方法1计算的世界坐标:" + worldPosition1);
Debug.Log("方法2计算的世界坐标:" + worldPosition2);
}
}
其他坐标转换API
转换类型 | 方法 | 说明 | 示例 |
---|---|---|---|
世界坐标转本地坐标 | InverseTransformPoint 方法 | 世界坐标系的点转换为本地坐标的点 | print("转换后的点 " + this.transform.InverseTransformPoint(Vector3.forward)); |
InverseTransformDirection 方法 | 世界坐标系的方向转换为本地方向(不受缩放影响) | print("转换后的方向(不受缩放影响)" + this.transform.InverseTransformDirection(Vector3.forward)); |
|
InverseTransformVector 方法 | 世界坐标系的方向转换为本地方向(受缩放影响) | print("转换后的方向(受缩放影响)" + this.transform.InverseTransformVector(Vector3.forward)); |
|
本地坐标转世界坐标 | TransformPoint 方法 | 本地坐标系的点转换为世界坐标的点(受缩放影响) | print("本地 转 世界 点" + this.transform.TransformPoint(Vector3.forward)); |
TransformDirection 方法 | 本地坐标系的方向转换为世界方向(不受缩放影响) | print("本地 转 世界 方向" + this.transform.TransformDirection(Vector3.forward)); |
|
TransformVector 方法 | 本地坐标系的方向转换为世界方向(受缩放影响) | print("本地 转 世界 方向" + this.transform.TransformVector(Vector3.forward)); |
24.3 答题示例
在Unity中,将本地坐标转换为世界坐标主要有两种方式:
使用Transform组件的TransformPoint方法:这是最便捷的方式。TransformPoint会自动结合当前物体及其所有父对象的变换(位置、旋转、缩放),直接将本地坐标转换为世界坐标。例如,若物体的本地坐标为(1,0,0),调用
transform.TransformPoint(localPos)
即可得到对应的世界坐标,尤其适合多层父子层级的场景,无需手动处理父对象的变换叠加。手动计算:当需要理解转换逻辑时,可手动计算。原理是先通过
transform.TransformDirection(localPos)
将本地方向转换为世界方向(考虑旋转和缩放),再加上当前物体的世界位置(transform.position
),即世界坐标 = 物体世界位置 + 转换后的本地方向
。但这种方式在多层父子关系中需逐层处理父对象的变换,不如TransformPoint高效。
24.4 关键词联想
- Transform.TransformPoint
- 本地坐标(Local Position)
- 世界坐标(World Position)
- 父子层级(Parent-Child Hierarchy)
- TransformDirection
- 坐标变换(Coordinate Transformation)
- Transform.position
- 层级变换叠加
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com