我在看this (game dev, space parenting & rotation) Sebastian Lague视频发现实际上有三个空间(不是两个),这些是世界空间,局部空间和物体空间。
我很惊讶我没有在官方统一形式上找到这两个空间(本地和对象)之间的区别,但实际上它存在。我的问题是为什么没有Space.Local?我发现有空间。自我与空间。世界。 Space.Self指的是对象空间。我可以使用此
将对象移动到对象空间void Update () {
transform.Translate(new Vector3(0,0,1) * Time.deltaTime * 2,Space.World);
}
我可以使用此
将我的物体移动到世界空间std::string::compare()
但不支持本地空间,我可以将对象移动到本地空间(意味着移动与其父对象相关的对象)。本地和对象空间之间有一个公平的区别,但统一并不认为我猜或我错了。
答案 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
。