2016-12-26 77 views
0

我有一個組件列表,我想給每個子組件列表中的其中一個組件以及它的特定值。Unity - 將列表中的組件從列表附加到遊戲對象

public List<ItemData> lootableItems = new List<ItemData>(); 

我想將該ItemData組件分配給已經具有ItemData組件的Item Prefab。所以我需要以某種方式交換組件,所以它具有來自列表的更新值而不是默認值。

有沒有簡單的方法來做這種改變? 我想的是一樣的東西:

item.gameObject.AddComponent(lootableItems[i]); 

感謝anwers!

回答

0

舊的GameObjet.AddComponent(string)函數存在重載。

你可以使用這樣的:

ItemData data = gameObject.AddComponent<ItemData>(); 
    data.Value1 = lootableItems[i].Value1; 
    (...) 

然後禁用舊的組件。

來源:http://answers.unity3d.com/questions/936452/attaching-a-script-at-runtime.html'

另一種可能的解決方案將是改變舊分量的值,以相同的方式。又名:

ItemData data = gameObject.GetComponent<ItemData>(); 
data.Value1 = lootableItems[i].Value1 
(...) 
+0

AddComponent(串)已經過時。 – Everts

+0

從我讀到的,仍然可以使用通用版本? –

0

最好不要在運行時修改預製件。相反,實例化Item預製,然後更改ItemData分量的值的實例GameObject

GameObject newItem = Instantiate(item) as GameObject; 
if (newItem != nulll) 
{ 
    ItemData itemData = newItem.GetComponent<ItemData>(); 
    if (itemData != null) 
    { 
    itemData.price = lootableItems[i].price; //example 
    } 
}