通过数组向对象添加脚本

时间:2015-03-22 18:00:23

标签: c# unity3d

我目前正在将一个Scripts列表存储在一个数组中,我试图将每个脚本添加到另一个对象中。我只是按名称搜索脚本但是在我更新到unity 5之后我不停地收到警告告诉我不要这样做,因为它会减慢一切。

目前我的代码看起来像这样:

GameObject unit1;
Knight knight; // name of code
Pawn pawn;

CodeName    = new Units [3]     {knight, knight, pawn}

unit1.AddComponent(CodeName[0]);

这给了我错误"无法转换' Knight'表达式输入`System.Type'"。

它显然是在对象类型之后,但我无法弄清楚如何传递信息。

1 个答案:

答案 0 :(得分:1)

我不确定你为什么要在一个对象中存储类,因为你并不是真的必须这样做。只要Class是公共的,您总是调用AddComponent而不使用数组来存储它们。

类已经从CLR存储,只有在实例化时才会使用。这意味着如果不使用它,它将不需要实例化。在Mono(Unity3d)中,您存储在数组中的所有内容都需要首先实例化或者至少具有null值,但这对Unity3D来说并不重要。它会向你发出一个警告:它很慢,因为你将一个组件添加到" GameObject"不是C#理解的对象。该组件已在RunTime上已知,但您仍然试图将脚本从数组中拉出来 - 在C#中这是一个很大的SIN。为什么要将类存储在可以直接访问它的位置,具体取决于它的访问修饰符。

在你的代码中,你制作一个指针或引用骑士类和Pawn Class< - 你不需要。

然后将它们存储在数组中。 (你必须有充分的理由)如果你真的需要这样做,请进一步解释。

但你需要做的就是这个。

unit1.AddComponent<Knight>(); 
// In case you didn't notice it is <> which represents Generic, it can be any type.

所以你真的可以做到

unit1.AddComponent<Codename[0]>();
// But take my word for it, it is slow. 

因为您正在这样做。

为每个要添加组件的对象实例化3个类。 将它们存储到GameObject中,其中包含阵列的脚本。 从阵列中拉出它们并检查Type是否为Equal类型。 将它们添加到GameObject。 通过调用脚本构造函数重新实例化它们。

如果这是国际象棋游戏。想象一下你的运行时会做多少次 你可以做的地方。

- 添加组件并初始化。

希望这有帮助。