【问题标题】:How to Instantiate Enemy Prefabs Without Knowing the Name如何在不知道名称的情况下实例化敌人预制件
【发布时间】:2015-02-23 15:16:16
【问题描述】:

如果我有很多预制件并且我想将它们全部实例化,我该如何做而不需要重写相同的代码。

我认为使用循环然后调用 Instantiate,但是所有预制件的名称都不同,那么我怎样才能将它们放在一个列表中?

for(int i =0; i < size; i++)
   Instantiate(prefabName);

【问题讨论】:

    标签: c# unity3d instantiation


    【解决方案1】:

    您需要创建一个所有Enemies 都继承自的基类。

    public interface Enemy
    {
    }
    

    然后让你所有的 Enemy 预制件都继承自这个。

    public class Red_Enemy : MonoBehaviour, Enemy
    {
    }
    

    然后在产生Enemies 的类中,您可以创建一个数组。

    public Enemy [] list;
    
    foreach(Enemy e in list)
       Instantiate(e);
    

    您可以通过编辑器简单地通过拖放来填充list

    【讨论】:

      【解决方案2】:

      您可以为敌人使用通用名称,例如 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 之类的路径

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-05
        • 1970-01-01
        相关资源
        最近更新 更多