风神界程序:道具模块
创建日期: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 条评论)
暂无评论,来发表第一条评论吧!
请登录后发表评论