【发布时间】:2015-02-23 15:16:16
【问题描述】:
如果我有很多预制件并且我想将它们全部实例化,我该如何做而不需要重写相同的代码。
我认为使用循环然后调用 Instantiate,但是所有预制件的名称都不同,那么我怎样才能将它们放在一个列表中?
for(int i =0; i < size; i++)
Instantiate(prefabName);
【问题讨论】:
标签: c# unity3d instantiation
如果我有很多预制件并且我想将它们全部实例化,我该如何做而不需要重写相同的代码。
我认为使用循环然后调用 Instantiate,但是所有预制件的名称都不同,那么我怎样才能将它们放在一个列表中?
for(int i =0; i < size; i++)
Instantiate(prefabName);
【问题讨论】:
标签: c# unity3d instantiation
您需要创建一个所有Enemies 都继承自的基类。
public interface Enemy
{
}
然后让你所有的 Enemy 预制件都继承自这个。
public class Red_Enemy : MonoBehaviour, Enemy
{
}
然后在产生Enemies 的类中,您可以创建一个数组。
public Enemy [] list;
foreach(Enemy e in list)
Instantiate(e);
您可以通过编辑器简单地通过拖放来填充list。
【讨论】:
您可以为敌人使用通用名称,例如 E1, E2, E3...,并将敌人预制件保存在目录中,例如 Prefabs> Resources> PrefabName
然后您可以将循环用作,
for(int i =0; i < size; i++)
Instantiate(Resources.Load("E"+i), position, rotation);
// "E"+i for E1, E2 ...
注意:Resources.Load() 会查找诸如Assets/Resources 之类的路径
【讨论】: