24.Unity本地坐标转世界坐标

  1. 24.Unity本地坐标转世界坐标
    1. 24.1 题目
    2. 24.2 深入解析
      1. 代码示例
      2. 其他坐标转换API
    3. 24.3 答题示例
    4. 24.4 关键词联想

24.Unity本地坐标转世界坐标


24.1 题目

Unity中如何将本地坐标转为世界坐标?


24.2 深入解析

在Unity中,将本地坐标转为世界坐标可以通过以下两种方式实现:

  1. 手动计算

    • 用本地坐标加上父对象相对世界的坐标。如果有多层父子关系,不停地往上加即可。
  2. 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中,将本地坐标转换为世界坐标主要有两种方式:

  1. 使用Transform组件的TransformPoint方法:这是最便捷的方式。TransformPoint会自动结合当前物体及其所有父对象的变换(位置、旋转、缩放),直接将本地坐标转换为世界坐标。例如,若物体的本地坐标为(1,0,0),调用transform.TransformPoint(localPos)即可得到对应的世界坐标,尤其适合多层父子层级的场景,无需手动处理父对象的变换叠加。

  2. 手动计算:当需要理解转换逻辑时,可手动计算。原理是先通过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

×

喜欢就点赞,疼爱就打赏