Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从界面列表实例化游戏对象_C#_Unity3d_Interface_Casting_Typing - Fatal编程技术网

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版本。唯一的区别是,如果您有一个默认接口实现,那么您只能在相关接口中定义此方法一次。否则,必须在接口的每个实现中定义此方法。我写了一篇关于参考资料文件夹的博客,在这里:。也许会有帮助