如何创建脚本列表并将其作为组件添加到新的游戏对象中

时间:2015-09-17 21:03:20

标签: c# list inheritance unity3d

我想创建一个脚本列表,并将它们作为组件添加到新的游戏对象中。我希望我将添加的脚本继承自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继承而不是

提前感谢您提供任何帮助或代码!

吉姆

1 个答案:

答案 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