【问题标题】:Child of UI element does not change localPostion when parent change position at runtime当父级在运行时更改位置时,UI 元素的子级不会更改 localPostion
【发布时间】:2017-09-25 14:17:25
【问题描述】:

我正在使用 Unity UI。

我有一个包含图像和子图像的父图像——当然,它们都在画布内。

我正在使用子图像位置从父图像位置生成敌人。

当我在运行时移动父图像并查看检查器时,我希望看到子位置也会随着父图像移动(因此它会在正确的位置生成敌人),但事实并非如此。

子图像在场景视图中确实与父图像一起移动,但子图像的 RectTransform 的 LocalPostion 不会随父图像发生变化,因此我无法在正确的位置生成。

我想我错过了什么......

【问题讨论】:

    标签: unity3d unity5


    【解决方案1】:

    场景中任何元素的本地位置都是相对于其父位置的,这就是“本地”的意思。

    元素的最终世界位置是其相对于其父世界位置的本地位置。

    假设不涉及旋转/缩放,则世界位置定义为:

    transform.position = transform.parent.position + transform.localPosition
    

    所以你所看到的就是预期的。

    【讨论】:

    • 是的,它成功了,谢谢!.. 出于某种原因,我添加了一个内存,即孩子的位置应该根据父位置更新,而不需要您编写的代码部分。
    • 或者,您可以使用transform.TransformPoint()。如果有多个层次的父级,并且您想一直回到场景空间坐标,这很有用。
    • 不要误会我的意思,您不需要在任何地方从我的答案中添加该代码,Unity 会在后台自动为所有元素执行此操作。我只是写这个来解释它是如何工作的。
    • 好吧 Draco18s,实际上我的答案中的定义已经考虑了所有级别,直到根,因为它考虑了父级的世界位置,这递归地取决于其父级的世界位置等等。 TransformPoint() 很有用,因为它还考虑了旋转和缩放。
    猜你喜欢
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 2010-12-24
    • 2022-08-20
    相关资源
    最近更新 更多