53.本地转世界坐标API区别

  1. 53.本地转世界坐标API区别
    1. 53.1 题目
    2. 53.2 深入解析
    3. 53.3 答题示例
    4. 53.4 关键词联想

53.本地转世界坐标API区别


53.1 题目

Transform中的本地坐标系的方向转换为相对世界坐标系的方向的两个API TransformVector() 和 TransformDirection() 有什么区别?


53.2 深入解析

  • TransformDirection 不受缩放影响。
  • TransformVector 受缩放影响。
using UnityEngine;

public class TransformExample : MonoBehaviour
{
    void Start()
    {
        // 设置缩放
        transform.localScale = new Vector3(2, 2, 2);

        // 创建一个本地方向向量
        Vector3 localDirection = new Vector3(1, 0, 0);

        // 使用 TransformDirection 转换
        Vector3 worldDirection = transform.TransformDirection(localDirection);
        Debug.Log("TransformDirection 不受缩放影响: " + worldDirection);

        // 使用 TransformVector 转换
        Vector3 worldVector = transform.TransformVector(localDirection);
        Debug.Log("TransformVector 受缩放影响: " + worldVector);
    }
}

在这个例子中:

  • 我们设置了物体的缩放值为 (2, 2, 2)。
  • 创建了一个本地方向向量 (1, 0, 0)。

TransformDirectionTransformVector 的打印结果会有所不同:

TransformDirection 不受缩放影响: (1.0, 0.0, 0.0)
TransformVector 受缩放影响: (2.0, 0.0, 0.0)
  • TransformDirection 将本地方向 (1, 0, 0) 转换为世界方向,不受缩放影响,因此输出仍然是 (1, 0, 0)。
  • TransformVector 将本地方向 (1, 0, 0) 转换为世界向量,受到缩放影响,因此输出是 (2, 0, 0)。

通过这个例子,可以清晰地看到 TransformDirectionTransformVector 在处理缩放时的不同。


53.3 答题示例

“在Unity中,TransformDirectionTransformVector 都用于将本地坐标系的方向转换到世界坐标系,但核心区别在于对缩放的处理方式:

  1. TransformDirection

    • 仅考虑旋转和位移,完全忽略缩放的影响;
    • 适用于转换纯方向向量(如朝向、法线),因为方向本身不应该随缩放改变;
    • 数学上等价于 transform.rotation * direction
  2. TransformVector

    • 会将缩放因素应用到结果中,输出向量的长度会被缩放比例影响;
    • 适用于转换具有实际大小意义的向量(如速度、位移增量);
    • 数学上等价于 transform.localToWorldMatrix.MultiplyVector(vector)

例如,当物体在X轴上缩放为2时,本地向量 (1, 0, 0)TransformDirection 转换后仍为 (1, 0, 0),而 TransformVector 会输出 (2, 0, 0)。实际开发中,若需处理物理碰撞法线(方向)应使用 TransformDirection,而处理角色移动距离(位移)则需使用 TransformVector。”


53.4 关键词联想

  • 坐标系转换(Coordinate System Transformation)
  • 旋转矩阵(Rotation Matrix)
  • 缩放因子(Scale Factor)
  • 向量与方向(Vector vs Direction)
  • 法线变换(Normal Transformation)
  • 局部到世界矩阵(LocalToWorldMatrix)
  • 物理模拟(Physics Simulation)
  • 位移计算(Displacement Calculation)


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏