【Unity】脚本解释器的一种实现
Galgame引擎/框架本身就是一个解释器,解释脚本读取配置文件,进行演出。
保存存档时要将当时脚本的运行状态保存下来,以便读档时继续执行,也就是脚本运行状态的序列化与反序列化。
——JomiXedYu http://www.imxqy.com/gamedev/unity/ugal.html#toc-8
前辈所言,我深以为然。
galgame的剧情,说白了就是指令操控内容。而这种文字游戏的卖点就是图像与剧情。程序显然写不出大量的剧情脚本,但是编剧也不一定会写程序。所以我决定将团队中编剧与程序彻底分离,让编剧只用excel表格就可以控制游戏流程。
这样做缺点也很明显,表格之间是不存在逻辑的。只能一行一行的取出数据,执行。
不过做一款视觉小说,这样的方法够用了,而且可以省下不少时间,规定一套逻辑执行语句也方便维护修改。
思路
大致来讲就是“制定规则——编剧写入excel——程序读取excel——执行”,很简单。
在这个基础上我们可以添加一些其他内容,比如目前我开发的流程为:
我尝试写入excel一些数据,这个过程十分痛苦,就像便秘了好几天。而且会出现肉眼检查不到的错误。所以我写个小工具帮助编剧导入并保存数据到excel。
关于读取数据这部分,一开始我的选择是游戏运行时读excel,但是这样做感觉很累赘,不如直接写成json然后程序去读json来的快。
其实程序这方面还是有很多不足,软件的设计模式摸得不是很清楚,仍需努力(指先做出来再说)。
规则与小工具
上面这张图是和编剧做好的指令规则约定以及这个小工具的界面,用选项可以帮助编剧不写入奇怪的符号或者不在范围内的规则。
因为是自己写的,所以后面制定新的规则或者需求了可以很快速的修改。
写入excel
用微软的com组件操作excel,保存的时候直接excel.Value
赋值。
在unity中写个MenuItem,游戏运行前用JsonUtility.ToJson()
创造j或者更新son文件。
读取Excel
直接JsonUtility.FromJson<>();
解析成一句一句话然后在游戏运行状态机需要解析的时候找到对应函数执行即可。
妄言妄听
如此这般,基本脚本解释器的思路就是这样。
回看代码,深觉自身不足,无论是设计模式还是安全架构,我负责的程序只能拿个40分。