C# 基于类型实例化游戏对象

C# 基于类型实例化游戏对象,c#,unity3d,C#,Unity3d,所以基本上我正在努力解决一个问题,希望这里有人能给我指出正确的方向 我随机生成物品,并试图实例化所述物品,唯一的问题是,虽然我能够实例化父物品,但我不知道生成的物品是否是“武器/盔甲”等,它们都是物品的继承子项。因此,我能够获得生成项的类型,但在将该类型转换回要实例化的脚本/对象时遇到了困难 例如: 物品>武器>剑。 我能够生成一把剑,并获得剑的类型,但是我无法实例化一把剑,因为我只有类型,而没有实际的剑 因为我的剑类在它的Start方法、武器、物品期间加载了数据,所以我不能仅仅实例化一个物品就

所以基本上我正在努力解决一个问题,希望这里有人能给我指出正确的方向

我随机生成物品,并试图实例化所述物品,唯一的问题是,虽然我能够实例化父物品,但我不知道生成的物品是否是“武器/盔甲”等,它们都是物品的继承子项。因此,我能够获得生成项的类型,但在将该类型转换回要实例化的脚本/对象时遇到了困难

例如: 物品>武器>剑。 我能够生成一把剑,并获得剑的类型,但是我无法实例化一把剑,因为我只有类型,而没有实际的剑

因为我的剑类在它的Start方法、武器、物品期间加载了数据,所以我不能仅仅实例化一个物品就知道它是剑。 也许我做错了


谢谢你的阅读

创建武器
enum

public enum WeaponType {sword, crossbow, q36SpaceModulator }
用它来告诉你要构建什么——在这种情况下创建武器的方法

public class WeaponFactory {
    public Weapon Create (WeaponType thisWeapon) {
       Weapon newWeapon; 

       switch (thisWeapon) {
          case WeaponType.sword :
             newWeapon = BuildSword();
             break;

          case WeaponType.crossbow:
             newWeapon = BuildCrossbow();
             break;

          // and so on...
          default:  // we don't have whatever-you-asked-for
       }

       return newWeapon;
    }

    private Weapon BuildSword() { return new Sword(); }

}

// somewhere in code...
// you may have other parameters for particular weapon attributes
var sword = royalArmory.Create(Weapon.sword);

1) 工厂(“让我成为一件东西”)和物品登记处(“给我找到一件我知道名字的东西的样式”)。谢谢!我现在正在读关于工厂的书。你有简单的例子或链接吗?@Draco18s我不知道如何将你的评论标记为一个很好的答案,但非常感谢。教鱼在这个领域非常重要,我学到了很多,我只是不知道从哪里开始。工厂看起来很棒@Holden研究了可编写脚本的对象,您可以创建一个数据库,然后快速进行查找。所以,他们已经出现了一段时间,对于这种特殊情况,他们非常友好。@LevonRavel谢谢!我也会读一读这些=)我真的很喜欢这个概念,但是在需要制造武器的时候,我只知道它的类型。我不知道如何将武器类型转换为WeaponType枚举值。1)研究MSDN中的
Type
类。“名字”就在那里的某个地方。还有
enum
。了解
ToString
的功能。2) 我不明白为什么/怎么你只有一个
类型
对象。代码首先是如何知道
类型的?UI与程序的通信是什么?老实说,我可能在启动时做错了,但基本上我尝试随机生成所有我能生成的内容。当我点击“打开箱子”时,我会随机生成一个物品,然后确定它是否是武器、盔甲、靴子等,然后是什么类型的武器。这就是我用类型结束的地方,这样我就可以看到它是哪种类型。但是什么是“类型”?当然,它代表了应用程序域中的具体内容。但按照编码,它是一个C类型的类对象还是仅仅是一个字符串?你总是把它大写——这是你发明的一个类吗?“我有这个类型”是什么意思?某个类(什么类?)的对象有一个名为“type”的属性,该属性是一个字符串,其值设置为“剑”?一些代码可能会有帮助。只是泛型类型。在这之前我没用过它,所以它是一座很难爬过去的山。我想我已经解决了这个问题,但是现在我遇到了一个问题,当我返回一个新武器时,Unity中的start方法不会运行,除非它在游戏对象中,所以我需要弄清楚如何在创建新武器时“初始化”。