我想创建一个脚本列表,并将它们作为组件添加到新的游戏对象中。我希望我将添加的脚本继承自Monobehaviour和我的基类' Fruit'。
到目前为止,我有测试代码来创建一个空对象并尝试在其上放两个脚本(到目前为止没有运气)
public class List_Test : MonoBehaviour {
public List<Fruit> fruitList;
void Start () {
fruitList = new List<Fruit>();
fruitList.Add(new Pear());
fruitList.Add(new Apple());
foreach(Fruit fru in fruitList){
print ("A fruit was found and it was a " + fru);
}
GameObject tInstance = new GameObject("test");
for (int i = 0; i < fruitList.Count; i++){
Fruit inst = fruitList[i];
tInstance.AddComponent<inst>();
/* This doesn't work at all and throws an error in the inspector
error CS0246: The type or namespace name `inst' could not be found. Are you missing a using directive or an assembly reference? */
print (inst);
}
}
}
我有一个基础水果课
using UnityEngine;
using System.Collections;
public class Fruit {
}
然后是子类
using UnityEngine;
using System.Collections;
public class Apple : Fruit {
}
等等。
如果我尝试从基类Fruit继承Monobehavior,子类将不会添加到列表中。它打印
A fruit was found and it was a null
UnityEngine.MonoBehaviour:print(Object)
我似乎也在努力将这些脚本添加为组件,无论是否从Monobehaviour继承而不是
提前感谢您提供任何帮助或代码!
吉姆
答案 0 :(得分:1)
我认为你的错误行是错误的。就是这样:
while (strlen($str = fread($fh, 1)) > 0) {
...
}
这是一个通用方法tInstance.AddComponent<inst>();
,其中AddComponent<T>
是一种类型,而不是一个实例。因此,T
是有效的,但AddComponent<Pear>()
不是。
要在您不知道编译类型的类型时添加组件,可以使用AddComponent(Type)
。您可以像这样使用它:
AddComponent<new Pear()>()
这将获取实例的类型并将其传递给tInstance.AddComponent(inst.GetType());
。 Unity将创建一个具有正确类型的组件,并将其附加到AddComponent
。