如何从接口列表中实例化游戏对象
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方法
所以,我有 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方法