Unity - 将组件从列表附加到GameObject

时间:2016-12-26 17:40:24

标签: c# list unity3d components

我有一个组件列表,我希望给每个孩子一个列表中的一个组件及其特定值。

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

我想将ItemData组件分配给已经包含ItemData组件的Item Prefab。所以我需要以某种方式交换组件,因此它具有列表中的更新值而不是默认值。

有一种简单的方法可以做到这种改变吗? 我想的是:

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

谢谢你的回答!

2 个答案:

答案 0 :(得分:0)

旧的GameObjet.AddComponent(字符串)函数存在重载。

您可以像这样使用它:

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

然后禁用旧组件。

来源:http://answers.unity3d.com/questions/936452/attaching-a-script-at-runtime.html&#39;

另一种可能的解决方案是以相同的方式更改旧组件的值。 AKA:

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

答案 1 :(得分: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
  }
}