2015-08-16 59 views
1

在我的遊戲中,如果這是玩家第一次玩遊戲,那麼我將顯示一個圖像。我初始化它在畫布上,像這樣:Gameobject在畫布中實例化顯示在其他畫布項後面

if (PlayerPrefs.GetInt("First Time", 1) == 1) 
    { 
     introEnabled = true; 

     //pause all activity 
     pause.pauseOrResume(); 

     intro = Instantiate (Resources.Load ("intro"), transform.position, Quaternion.identity) as GameObject; 
     Canvas canvas = GameObject.Find("Canvas").GetComponent<Canvas>(); 
     intro.transform.SetParent(canvas.transform, false); 
     //robot = Instantiate (Resources.Load ("robot"), transform.position, Quaternion.identity) as GameObject; 

     PlayerPrefs.SetInt("First Time", 0); 
     PlayerPrefs.Save(); 
    } 

我可以在檢查時,看到在遊戲運行時創建的對象時,它在畫布上顯示出來。我只是不知道爲什麼它不會顯示在畫布上所有其他對象的頂部。

畫布渲染模式設置爲「Screen space - Overlay」,並按排序順序將其設置爲0。被實例化的遊戲對象也具有0的排序順序,並且它在默認層中。

沒有我已經嘗試過的工作。 z值沒有任何區別,甚至將畫布和實例化對象放置在默認圖層中,並將畫布設置爲2的排序順序,並將實例化對象設置爲1的排序順序(因此它首先被渲染)不會形成區別。

回答

1

你想要的是使用transform.SetAsLastSibling()CanvasRenderer根據它們的兄弟指數(在層次結構中的位置)從上到下呈現GameObject

但是,在進一步檢查你的代碼後,我注意到了一些事情,我應該說,如果你試圖實例化介紹屏幕,我強烈建議用它自己的Canvas實例化它,而不是將它父母化到現有的。一些重要的應該是它自己的專用Canvas

更新:這裏的問題是,您正在使用transformSprite呈現器實例化GameObjectsCanvas UI在所有網格圖層上最後呈現,所以如果您希望您新實例化的GameObjects參與,則它們需要具有RectTransformImage組件。

+0

將變形後的遊戲對象同時添加到canvas和新實例化的遊戲對象中後,新實例化的遊戲對象仍然顯示在舊的畫布項後面。 – saboehnke

+0

他們有'RectTransform's?和'Image'組件? – maksymiuk

+0

新實例化的遊戲對象有一個轉換和一個精靈渲染器。這就對了。這是一個預製,我正在實例化。 – saboehnke

0

而不是默認圖層將其圖層更改爲UI。

+0

對於哪一個位置?畫布或新實例化的對象? – saboehnke

+0

canvas和gameobject都應該在UI層中。 – Nain

+0

我給了一個嘗試,它什麼也沒做。我不知道這是怎麼做的,因爲如果它們默認都在默認層中,並且它們不能正確工作,那麼將它們放在另一個層中並不會產生什麼影響。 – saboehnke

0

您的代碼看起來很好,它可能是與附加此腳本的gameobject相關的問題(因爲您正在實例化中傳遞transform.position)。它可能會將實例化的遊戲對象置於畫布之外。嘗試這樣一旦它可能工作。

intro = Instantiate (Resources.Load ("intro")) as GameObject; 

,並設置它的父(非常重要)後,將其設置是這樣的

intro.transform.localPosition = new vector3(0,0,0); 
+0

我嘗試了你所說的一切,但沒有任何區別。它仍然顯示在其他畫布對象的後面。 – saboehnke