unity3d - 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)?
解决方案
您正确理解这LocalPosition
是孩子相对于其父母的位置。
如果父级不在 position [0, 0, 0]
,则首先应用子变换,然后再应用父变换。
想象父母是一个盒子,孩子是盒子里的一支铅笔。如果您移动/旋转铅笔,您将应用局部变换。但是如果你移动盒子,铅笔也会移动。从盒子的角度来看,铅笔不会移动,因此它LocalPosition
会保持不变。不过,盒子和铅笔的全局位置都会发生变化。
不要让铅笔的盒子成为您希望铅笔在盒子移动时保持在原位的父级。
推荐阅读
- r - ifelse 在 r 中给出了设计之外的答案,表现得很奇怪
- reactjs - react-native-device-info `getUniqueId()` 是否提供 UUID 或 GUID?
- c# - 用不同的内部for循环重构两个相似的函数
- java - 如何使用堆栈为 DFS 图形添加时间戳
- angular - 如何在获得代码覆盖率的同时排除规范文件 [Angular]
- wordpress - 关于 wordpress 和 woocommerce 下的会员跟踪代码
- python - 在 Python 中单击我如何查看父项具有必需选项的子命令的 --help?
- c++ - 在我的 func 实现中如何在 std::string 上切换 char*?
- c# - Math.net C# 中三角函数的幂
- opencv - 计算图像中彩色钻石的数量