2014-12-19 12 views
0

我已經定義了一個預製用的名字是「項目」,並在資源 包含然後,我加載預製的GUI(Unity3D)如何識別Unity3D中不同的預製件?

Object prefab_item = Resources.Load("Item"); 
    GameObject g = Instantiate(prefab_item) as GameObject; 
    g.transform.parent = this.transform; 
    g.transform.position = pos; 
    Sprite sprite = Resources.Load("Images/item_" + item, typeof(Sprite)) as Sprite; 
    g.GetComponent<SpriteRenderer>().sprite = sprite; 

我想要加載不同的項目列表的「項目」預製, 如何識別按下它們時不同的物品?

謝謝大家!

回答

0

你可以給你創建了一個名稱爲每個遊戲對象:

int i=1; 
g.name = string.Format("item {0}", i); 

然後你可以使用識別它:

var object = GameObject.Find("item 1"); 

如果你要處理它被按下時,你便可以:

  1. 將碰撞組件添加到遊戲對象;
  2. 添加onmousedown事件()在MonoBehaviour腳本
  3. 附加MonoBehaviour腳本到遊戲對象編程功能:

    g.AddComponent( 「YourOnMouseDownScript」);

+0

如何獲取名稱GameObject然後比較它?當我按下其中任何一個?謝謝大衛! – 2014-12-19 07:46:02

+1

g.name返回遊戲對象的名稱,您可以使用string.Contains(...)函數進行比較。 – David 2014-12-19 08:05:35

0

相反的:

Debug.Log ("item name: " + gameObject.name); 

你可以這樣寫:

Debug.Log ("item name: " + gameObject.name, gameObject); 

則該消息將在日誌窗口中點擊。當您單擊日誌消息時,該對象將被選中。

+0

它只顯示記錄第一項1,不顯示項目2,3 ...... 9。 雖然,我按下項目2,3,... 9 可能,因爲我定義了一個預製,然後我加載這個預製? – 2014-12-19 09:55:40

+0

是的,那麼你應該考慮如何創建這些項目?如果您的預製件是第1項,並且您多次實例化,則會有大量「項目1」的克隆,而不是任何「項目2」。如果您手動重命名對象,那麼它們可以是「項目2」,「項目3」... – piojo 2014-12-20 18:52:07

+0

謝謝大衛和piojo!我完成了 :) – 2014-12-22 04:47:03