首页 > 解决方案 > unity transform.localPosition ,如果 Parent 不在 0 位置,代码结果与编辑器变换位置不同?

问题描述

实际上我知道 localPosition 是指游戏对象“A”(子)在游戏对象“B”(父)内的位置,当我将“B”父设置为位置 0,0,0 并用鼠标移动我的游戏对象 A如果我用代码设置生成位置如transform.localPosition = new Vectore(1,0,0);并运行游戏会发现它在 1,0,0 正确的位置产卵,但如果父“B”不在 0,0,0 例如:3,0,0 并且如果我手动将子“A”位置设置为( 1,0,0) 并运行相同的代码我不会在与 1,0,0 相同的位置找到“A”游戏对象,它将被定位在一个奇怪的错误位置,这是否意味着如果你想使用 transform.localPosition 父游戏对象必须在 0,0,0 ?因为我认为如果父游戏对象在 0,0,0 或不在 0,0,0 中,我们可以控制相对于其父对象的子位置不是问题;如果使用该行代码生成子项,则编辑器中子项的 1,0,0 位置必须相同transform.localPosition = new Vector3(1,0,0)?

标签: unity3d

解决方案


您正确理解这LocalPosition是孩子相对于其父母的位置。

如果父级不在 position [0, 0, 0],则首先应用子变换,然后再应用父变换。

想象父母是一个盒子,孩子是盒子里的一支铅笔。如果您移动/旋转铅笔,您将应用局部变换。但是如果你移动盒子,铅笔也会移动。从盒子的角度来看,铅笔不会移动,因此它LocalPosition会保持不变。不过,盒子和铅笔的全局位置都会发生变化。

不要让铅笔的盒子成为您希望铅笔在盒子移动时保持在原位的父级。


推荐阅读