【问题标题】:Unity - Attach Component from a list to a GameObjectUnity - 将列表中的组件附加到游戏对象
【发布时间】:2017-05-11 02:41:20
【问题描述】:

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

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

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

有没有一种简单的方法来进行这种更改? 我在想类似的东西:

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

感谢您的回答!

【问题讨论】:

    标签: c# list unity3d components


    【解决方案1】:

    旧的 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
    (...)
    

    【讨论】:

    • AddComponent(string) 已过时。
    【解决方案2】:

    最好不要在运行时修改预制件。相反,实例化您的Item 预制件,然后在实例化的GameObject 上更改ItemData 组件的值:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多