Unity 4.6中的奇怪位置错误,用于预制游戏对象作为Canvas的孩子

时间:2014-12-02 03:01:58

标签: unity3d

我将一个预制件(基本上是一个Image)放在一个脚本中的“0,0,0”画布上(为了调试)。当我在编辑器中按下播放时,会执行此操作,但GameObject最终会在“-3.051758e-05,-280,0”结束,即从0,0,0开始。什么可能导致这种情况?

Canvas是根画布的子画面,并且设置为最大化它的大小,以便与其父画布一样大。

使用Unity 4.6。

更新:尚未100%确定,但使用somegameobject.localPosition = somevector设置位置时,定位似乎有效。

1 个答案:

答案 0 :(得分: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(当然,您在检查员中看不到这一点。)