局部空间vs全局空间vs unity3d中的对象空间

时间:2018-02-15 06:34:24

标签: c# unity3d

我在看this (game dev, space parenting & rotation) Sebastian Lague视频发现实际上有三个空间(不是两个),这些是世界空间,局部空间和物体空间。

  1. 世界空间:静态空间(0,0,0)
  2. 对象空间:与对象空间相关
  3. 本地空间:与对象的父级相关
  4. 我很惊讶我没有在官方统一形式上找到这两个空间(本地和对象)之间的区别,但实际上它存在。我的问题是为什么没有Space.Local?我发现有空间。自我与空间。世界。 Space.Self指的是对象空间。我可以使用此

    将对象移动到对象空间
    void Update () {
        transform.Translate(new Vector3(0,0,1) * Time.deltaTime * 2,Space.World);
    }
    

    我可以使用此

    将我的物体移动到世界空间
    std::string::compare()

    但不支持本地空间,我可以将对象移动到本地空间(意味着移动与其父对象相关的对象)。本地和对象空间之间有一个公平的区别,但统一并不认为我猜或我错了。

1 个答案:

答案 0 :(得分:1)

在Unity的检查器中,Transform组件的位置和旋转相对于父 <<>>(在本地空间中定义)

由Gizmo手柄代表的轴是全局的(世界空间)或对象的,如视频中的S. Lague所指出。

当你选择一个游戏对象时,没有表示局部轴(父变换的轴),与其他3D软件(如我认为的Maya)相反,并且没有C#函数可以在本地空间进行翻译,但是你可以创建之一:

Vector3 right     = transform.parent.right;
Vector3 up        = transform.parent.up ;
Vector3 forward   = transform.parent.forward;
Vector3 direction = X * right + Y * up + Z * forward ;

transform.Translate(direction * Time.deltaTime, Space.World);

但是,请记住,对象A总是在对象空间中具有位置和旋转(0,0,0),因为后者是< / strong>由对象本身定义。无法从本身移动/旋转对象A