我有一个组件列表,我希望给每个孩子一个列表中的一个组件及其特定值。
public List<ItemData> lootableItems = new List<ItemData>();
我想将ItemData组件分配给已经包含ItemData组件的Item Prefab。所以我需要以某种方式交换组件,因此它具有列表中的更新值而不是默认值。
有一种简单的方法可以做到这种改变吗? 我想的是:
item.gameObject.AddComponent(lootableItems[i]);
谢谢你的回答!
答案 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
}
}