2014-12-02 59 views
1

我在一個腳本中(爲了調試)在「0,0,0」的Canvas上放置一個預製件(基本上是一個圖像)。當我在編輯器中按下play時,會執行此操作,但GameObject最終會以「-3.051758e-05,-280,0」結束,即從0,0,0開始。什麼會造成這種情況?Unity 4.6中奇怪的位置bug,作爲Canvas的子對象prefab gameobject

畫布是根畫布的子項,並且設置爲最大化其大小以便與其父項一樣大。

使用Unity 4.6。

更新:不是100%肯定,但當設置位置使用somegameobject.localPosition = somevector定位似乎工作。

回答

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(當然,你不會在督察中看到這一點)。

+0

謝謝,真正讓我從一開始就錯誤的方向是Unity編輯器界面。 Unity編輯器中的Recttransform中的位置與代碼中的somegameobject.transform.position不同。他們應該對此做些事情:-P另一方面,我認爲只有少數情況下,您需要位於某個其他元素內部的2D元素的全局位置。通常我需要的位置是當地的位置。 – Jonny 2014-12-02 11:01:06