標題是這樣打啦,因為我不知道中文要怎麼翻比較恰當,主題大概是: 我要如何用Script使得在遊戲中可以產生一個Image,並設定他的Parent。
這是我昨天Google到半夜3點的結論,總結一下:
- 要產生一個UI物件時,要先將該物件作為Prefeb(預置物)
- Image在某個版本(確切幾版後不清楚)後需要再Canvas下才會顯示出來。
- 所以在製作時,必須要先產生該圖片,並設定他的父親(OOP繼承的概念),但是這裡有個問題:
好,接下來一點一點來解決
- 首先,先把要生成的Image做成Prefab,然後我在Hierarchy先放了一個Canvas作為等下Image的父親
接下來,就是Instantiate Image,這裡要注意的是,Image是Unity的UI物件,所以不是用GameObject。
程式碼最前面要先加上using UnityEngine.UI;
Image NewArraw = (Image)Instantiate(arraw,GameObject.Find("Player").transform.position,
GameObject.Find("Player").transform.rotation) as Image;
//產生一個arraw的Image在Player的位置
- 再來設定他的父親,這裡會用到兩個API:SetParent、Find。
NewArraw.transform.SetParent(GameObject.Find("ArrawCanvas").transform, false); |
這樣就成功摟!!
- 最後來講一下我學到的經驗: 之所以會卡那麼久主要是因為我在Instantiate的時候我一開始用了兩種方法
GameObject.Find(); |
這兩種都可以回傳一個GameObject的參考,所以可以當成Instantiate的參數使用。 兩者的差別是在於GameObject.Find()必須要在目前Hierarchy下有的物件才找的到,Resources.Load()需要創一個Resources的資料夾,並把Prefeb放進去。
由於我不想要讓物件一開始就存在遊戲中,我使用了後者的方法,但是這種方法就會造成無法SetParent,理由同我上述所說的,完畢。