2016-12-26 63 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 
    } 
}