如何从接口列表中实例化游戏对象

How to Instantiate GameObject from Interface list

所以,我有 List<ITower>

如果我尝试这样做:

var a = new List<ITower> {new DotBehaviour(), new RndBehaviour()};

foreach (var tower in a)
    Instantiate(tower);

我得到:

The type 'ITower' must be convertible to 'UnityEngine.Object' in order to use it as parameter 'T' in the generic method 'T UnityEngine.Object.Instantiate(T)'

所以我会很高兴:

a) 你告诉我怎么做或者

b) 如何在接口中制作 return 方法,这将 return 与我要实例化的 GameObject 关联的预制件。 (由于 C# 的强类型,我不知道如何做到这一点,但我不想使用 dynamic

最新版本的C#中有默认的接口方法实现,不知道unity有没有实现。如果他们这样做了,您可能可以在您的界面和 return 您想要实例化的预制件中定义一个方法。类似于:

GameObject GetPrefab()
{
    return Resources.Load("Path/To/My/Prefab");
}

然后你会调用 Instantiate(tower.GetPrefab());而不是 Instantiate(tower);.

如果你的Unity版本不支持默认接口方法,那么你就需要在相关脚本中实现GetPrfab方法