C# 如何从界面列表实例化游戏对象
所以,我有C# 如何从界面列表实例化游戏对象,c#,unity3d,interface,casting,typing,C#,Unity3d,Interface,Casting,Typing,所以,我有列表 如果我尝试这样做: var a = new List<ITower> {new DotBehaviour(), new RndBehaviour()}; foreach (var tower in a) Instantiate(tower); var a=new List{new dotbeavior(),new RndBehaviour()}; foreach(a中的var塔) 实例化(塔); 我得到: 类型“ITower”必须可转换为“UnityEn
列表
如果我尝试这样做:
var a = new List<ITower> {new DotBehaviour(), new RndBehaviour()};
foreach (var tower in a)
Instantiate(tower);
var a=new List{new dotbeavior(),new RndBehaviour()};
foreach(a中的var塔)
实例化(塔);
我得到:
类型“ITower”必须可转换为“UnityEngine.Object”,才能将其用作泛型方法“T UnityEngine.Object.Instantiate(T)”中的参数“T”
因此,如果:
a) 你能告诉我怎么做吗
b) 如何在接口中创建return方法,该方法将返回与我要实例化的游戏对象相关联的预置。
(Idk如何做到这一点,因为C#的类型很强,但我不想使用
动态)最新版本的C#中有一个默认接口方法实现,但我不知道unity是否实现了它。如果他们这样做了,您可能会在接口中定义一个方法,并返回您想要创建的预置。比如:
GameObject GetPrefab()
{
return Resources.Load("Path/To/My/Prefab");
}
然后调用实例化(tower.GetPrefab());而不是实例化(塔)
如果Unity版本不支持默认接口方法,则必须在相关脚本中实现GetPrfab方法您可以尝试将其强制转换为UnityEngine.Object,然后转换为所需的所有方法。只需确保检查转换是否成功。不能保证接口是由特定类实现的,因此不能实例化接口。如果您有一个特定对象要实例化并引用使用您的接口列表,那么您应该考虑实现一个工厂,该工厂实例化您想要的特定对象,并将接口传递回。您考虑过抽象基类吗?此外(无DOTs专家)是否允许使用行为的new
创建实例?我知道对于monobhavior
来说,这是绝对“禁止的”^1。直接强制转换是不可能的(方法已经尝试这样做)。2.我问过如何在一个特定的环境中做到这一点。3.这只是一个演示列表,不能复制粘贴加载的代码,所以这个示例可能是脏的。所以,这是更新的unity版本的正确答案。但我做的都是基于很久以前录制的教程,所以将所有预置从其他文件夹转移到资源会有问题。我将搜索另一个答案一段时间,并张贴smth,如果我能以某种方式解决这个问题,这将适用于任何Unity版本。唯一的区别是,如果您有一个默认接口实现,那么您只能在相关接口中定义此方法一次。否则,必须在接口的每个实现中定义此方法。我写了一篇关于参考资料文件夹的博客,在这里:。也许会有帮助