魔塔游戏是一个极简的RPG,虽然简单,但涉及的系统非常全面,非常适合作为入门项目。以下是我在mota24项目中使用的几个实用插件和工具。
LDtk
LDtk(Level Designer Toolkit)是一个现代化的2D关卡编辑器,由《死亡细胞》的开发者开发。它是一个快速、免费的开源工具,专为游戏开发者设计。相比Unity自带的Tilemap,LDtk更为好用,还可以用来配置关卡事件。
虽然在LDtk里可以通过给Entity增加自定义字段来配置数据和逻辑,但我个人建议将LDtk作为一个简单的关卡编辑器使用,逻辑和数据在LDtk外部配置。因为当涉及到LDtk不擅长的领域时,使用起来会比较别扭。
魔塔的地形和阻挡等基本Tilemap编辑就不多说了。下面以魔塔的怪物和公主为例,重点介绍我是如何使用LDtk的Entity的。
下图可以看到,所有怪物都是单独的Entity,怪物有两个字段:MonsterId表示怪物ID,与配置表关联;AnimFrames表示动画帧数,Unity的导入器会根据这个帧数从图集中读取对应的Sprite来生成帧动画。
对于怪物、物品等在关卡中大量复用的Entity,我在LDtk中只配置ID,在导入Unity时自动绑定对应脚本,怪物属性等数据通过Excel配置,根据ID对应。
然而,魔塔中还有很多NPC,NPC的特点是不复用,每个NPC都是独特的,有自己的对话和逻辑,并与关卡中的其他Entity关联。
如图所示,公主有三个字段:Script对应Unity的脚本名字(通过反射绑定),TargetStair关联一个楼梯(与公主对话后,这个楼梯需要显示出来),AnimFrames表示动画帧数。
LDtk to unity支持自定义导入后处理(https://cammin.github.io/LDtkToUnity/documentation/Topics/topic_CustomImporting.html),我在后处理中根据Entity的属性绑定对应的脚本,不同脚本会根据需求读取Entity的字段。
这个方案的好处在于,我不会手动修改LDtk导入后的内容,所有修改都在后处理脚本中完成。这样每次在LDtk中修改关卡内容后,切回Unity,等待导入结束就可以直接运行游戏了,不需要额外处理,减少操作失误。
Luban
https://luban.doc.code-philosophy.com/
Luban是一个强大且易用的游戏配置解决方案,专为处理游戏项目中的复杂配置工作流而设计。它支持多种文件类型(如Excel、JSON、XML等)和多种导出格式(如binary、JSON、XML等),并且兼容主流编程语言(如C#、Java、Go、C++等)。Luban提供了丰富的数据校验功能和良好的跨平台能力,支持Unity、Unreal、Cocos2d-x、Godot等主流游戏引擎。此外,它还具有清晰优雅的生成管线设计,方便开发者进行二次开发和定制。
在多年的开发中,我尝试过很多不同的数据配置方案,踩了不少坑后,现在只使用纯文本格式配置(如JSON)或Excel,不建议使用可视化配置方式,如ScriptableObject,或自己写Editor窗口来配置,或类似插件。
选择Luban的主要原因有几点:支持复杂类型(列表、类),支持数据校验、支持枚举、支持代码生成。
如图所示,这是mota24的bean表(可以理解为面向对象的类定义),导表后会生成对应的C#代码,这个功能非常好用,保证配置表和代码一致。
这是枚举定义表。
这是物品表,可以看到复杂类型的配置方式。虽然乍一看可能不好懂,但习惯后其实非常直观。
Luban的复杂类型配置方式有多种,可以根据自己喜好选择:https://luban.doc.code-philosophy.com/docs/manual/exceladvanced
Luban的缺点
Luban的缺点可能就是上手难度较大。Luban的文档一看就是程序员写的,通篇都是技术理论,对于非技术人员来说,有点难啃。希望官方能优化文档,增加更多的示例项目,优化使用流程。
Yarn Spinner
Yarn Spinner是一个友好的对话编写工具,专为游戏开发者设计。它允许作家以类似电影剧本的形式创作交互式对话,并将其无缝集成到游戏中。Yarn Spinner提供了丰富的功能,包括台词展示、分支选项以及通过自定义指令与游戏引擎进行交互。它兼容Unity、Unreal等主流游戏引擎,极大地简化了对话系统的开发过程。
对于对话配置,我的观点和数据配置一样,最好是纯文本的配置方式。这比可视化配置对话要好用太多了。可视化对话配置工具一般用结点和连线表示对话,看起来直观,但当配置需求变大后,工具往往不能完美满足需求。例如,基于正则表达式的文本搜索和替换、多行编辑、多语言等功能。基于文本的配置方式则没有这些问题,只要熟悉一款IDE就能高效操作文本,省去了工具的学习成本(功能越全的可视化编辑器,学习成本也越高)。当然,这只是个人推荐,大家还是根据自己习惯选择。
魔塔的对话需求并不简单。下图是15层神秘老人的对话,涉及条件判断、对话分支、读写游戏数据以及调用游戏函数等。
Yarn Spinner的优点是写对话就像写小说一样,不需要频繁操作鼠标,直接一行一行写文本即可。VSCode有插件,能校验语法,也能校验脚本导出的自定义函数的使用,所以不用担心写错。
总结
这三个工具我都是第一次使用,可能在用法上不太专业。如果大家有更好的建议,欢迎分享。这些工具对这个项目帮助很大,如果我选择自己做工具,mota24这个项目估计很难在一个月内完成。
这三个工具也符合我对好工具的标准:基于文本(LDtk完全基于JSON,理论上可以直接编辑其JSON文件),与引擎没有强耦合,可以适配不同引擎,或自研引擎也可以使用。
暂无关于此日志的评论。