【问题标题】:Weird position bug in Unity 4.6 for prefab gameobject as child of CanvasUnity 4.6 中将预制游戏对象作为 Canvas 子对象的奇怪位置错误
【发布时间】:2015-01-30 05:06:30
【问题描述】:

我将一个预制件(基本上是一个图像)放在脚本中“0,0,0”的画布上(为了调试)。当我在编辑器中按下播放时,会执行此操作,但游戏对象最终位于“-3.051758e-05,-280,0”,即远离 0,0,0。这是什么原因造成的?

Canvas 是根画布的子级,并设置为最大尺寸以便与其父级一样大。

使用 Unity 4.6。

更新:目前还不能 100% 确定,但是当使用 somegameobject.localPosition = somevector 设置位置时,定位似乎可以工作。

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    transform.localPosition 设置相对于父位置的位置,而transform.position 设置在世界空间中的位置。如果您在场景视图中查看画布,您会看到画布的左下角将位于世界空间中的0, 0, 0,但画布的0, 0, 0 位于其中心。因为你必须先实例化一个游戏对象然后让它成为一个孩子,它在世界空间中的位置是0, 0, 0,但它在检查器中的位置是它相对于它的父位置的位置,因此不会是0, 0, 0,因为画布没有不要坐0, 0, 0

    在实例化后使用localPosition 设置子元素会将其定位为您希望它相对于画布的方式。然后0, 0, 0 将位于游戏视图的中心。然后孩子在世界空间中的位置将是canvas.x, canvas.y, 0(当然,您不会在检查器中看到它)。

    【讨论】:

    • 谢谢,真正让我从一开始就走错方向的是 Unity 编辑器界面。 Unity 编辑器中 Recttransform 中的位置与代码中的 somegameobject.transform.position 不同。他们应该对此做点什么:-P 另一方面,我认为只有少数情况下您需要位于某个其他元素内的 2D 元素的全局位置。通常我需要的位置是本地位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 2022-07-14
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多