风神界程序:道具模块

创建日期:2026-03-18

更新日期:2026-03-18

阅读次数:34

一阶:单继承(不可行)

木头继承自道具。 问题:木头不只是道具(可放背包),它还是材料(合成)、燃料、建材、商品……

二阶:多继承(不通用)

木头继承自道具、材料、燃料、建材、商品…… 问题:菱形继承问题。通常没问题,但考虑一个极端情况:如果A继承自B与C,B与C都继承自D并重写了D的方法E,那么A的E怎么办?无解。因此现代语言普遍不支持多继承。

三阶:单继承,超级基类(性能灾难)

木头继承自道具。道具有大量属性,涵盖材料、燃料、建材、商品…… 问题:香蕉猴子丛林问题。你只想要一个香蕉,却得到了拿着香蕉的猴子、以及猴子生活的整片丛林。这会带来大量不必要的性能消耗。

四阶:多继承,接口模式(维护灾难)

木头实现道具、材料、燃料、建材、商品接口。 问题:屎山代码。接口代码无法复用,这导致,如果你要修改接口(比如修改燃料的火焰动画),那么你需要改动几十处代码(对所有实现燃料接口的类都修改),非常麻烦,而且还容易遗忘、导致bug。没有程序员愿意维护这样的代码。 (注:现代语言虽然不支持多继承,但支持接口多继承。虽然可能导致灾难,但对于中小型项目,三阶与四阶方案都是不错的,灾难可以忍受)

五阶:多组件模式

木头不再是一个类,而是一个实例(原型类)。 原型可以有很多组件:道具、材料、燃料、建材、商品…… 启动游戏时,新建大量原型,给它们添加各种组件、设置ID与名称、修改组件参数,注册到原型集合中。

最终方案

原型表:

|ID|名称|贴图| |---|---|---| |1001|木头|木头| |1002|石头|石头| 燃料表:

|ID|热值| |---|---| |1001|50| 道具表:

|ID|体积|质量| |---|---|---| |1001|10|20| 其他表:以此类推 脚本:将上述表转化为JSON文件(已完成。还带一个表格编辑器、可以自动多表关联ID、显示名称,可以导出导入JSON。编辑器也已完成) JSON文件:

{
  "1001": {
    "名称": "木头",
    "贴图": "木头",
    "性质": {
      "燃料": {
        "热值": 50
      },
      "道具": {
        "体积": 10,
        "质量": 20
      }
    }
  },
  "1002": {
    "名称": "石头",
    "贴图": "石头",
    "性质": {}
  }
}

初始化代码:将上述JSON注册到原型集

using static 原型集;
public class 性质类 {}
public class 道具性质 : 性质类 {
    public int 体积;
    public int 质量;
}
public class 燃料性质 : 性质类 {
    public int 热值;
}
public class 原型类 {
    public int ID;
    public string 名称;
    public string 贴图;
    public List<性质类> 性质;
}
public static class 原型集 {
    public static Dictionary<int, 设定类> Items;
    public static void 加载原型设定(){
        (已屏蔽)
    }
}
public class Main : MomoBehaviour{
    public void Start(){
        加载原型设定();
    }
}

评论区 (0 条评论)

暂无评论,来发表第一条评论吧!