今天梳理下github上的commit日志,回顾一下2019年的工作。
- 一月 | 指令流程制作中遇到问题:过于手动、重复性大
- Tile系统制作,以Tile结构包含各种建筑物和其他场景元素。
- 制作玩家指令流程:建设规划,但是发现其中存在的大量重复工作。
- 基于上一条,开始研究FlowCanvas以抽象化指令流程。
- 移除一些Entitas的残余。
- 二月 | 采用FlowCanvas改造的方案重做指令系统
- Flow继续改造,仅保留FlowCanvas的设计思想和编辑器。自己重写适应DOTS+ECS结构的运行时。
- 试做少量Node的Flow流程。
- 进行结构整理,创建Common系列库,抽象非游戏逻辑的功能进入Common.ECS库、策划数据定义相关进入Common.Define库,Flow功能进入Common.Flow库。
- 开始制作具体游戏逻辑所需的FlowNode以逐步替代原有制作流程。
- 三月 | 完成了建设指令的FlowCanvas版本制作
- 继续制作各种游戏逻辑所需的具体FlowNode。
- 跟随Unity, DOTS, Odin 的版本变化进行版本更新。
- 完成Build Flow建设流程。
- 彻底移除Entitas。
- 四月 | 部分UI的设计与制作
- 基本UI样式设计
- 规划、生产UI设计
- 规划UI的制作
- 实现Unity新的Hybrid方案
- 五月 | 玩家与建筑物的交互
- 为了保证玩家在多重可交互物品之间能够顺滑的选中目标,引入DOTS的物理系统做面向检测。
- 引入插件Rewired实现键盘与手柄的同时支持
- 与可生产的建筑物的交互操作
- 六月 | 生产功能的UI与实现
- 生产UI的制作
- 生产功能实现
- 生产的flow流程
- 七月 | 搬家
- 建设生产的UI收尾、处理BUG
- 抽象出制作UI时新写的几个专用UI组件,以便以后复用
- 搬家
- 八月 | 场景美术
- AI的基础学习,考虑等待官方AI Package。
- 由于后续程序需要有角色AI才能继续,决定先进行一些美术的补充工作。
- 木工T0三个建筑物的设计、建模。
- 采集与伐木的建筑物设计、建模。
- 九月 | 场景美术,Space Shifter
- 制皮T0两个建筑物的设计、建模。
- 参与了机核的BOOOM! 活动,制作了一个小品游戏SpaceShifter
- 十月 | 开始自制Goap AI
- 此时等到了官方AI Package的新版本,但是由于表现不甚理想,决定开始自己制作基于Goap思想的AI模块。
- 基于现学的Goap知识,首先制作了一遍传统方式(GameObject)的Goap框架。
- A * + DOTS的制作,由于网上也没有现成的DOTS版本的A*,所以在做Goap之前要先把这个做一遍。
- 十一月 | Goap + DOTS
- 正式制作在DOTS环境下的Goap系统了,个人感受是自己几年来对自己脑力最大的一次挑战 d(≧ω≦)/。
- 完成Goap的Node展开流程。
- 十二月 | Goap继续制作, Goap的可视化Debugger
- 制作对展开后的Node Graph的最优路径寻找。
- 增加多重Setting扩展node以支持同一个任务的不同设置(setting)带来的区别
- 在Goap的节点结构越发复杂之后,感觉单凭debug信息进行调试已经变成了极其费眼又低效的工作,于是开始制作一个可视化的Node展开debug工具。
进度总结:
开发进度比预想有挺大的延迟。除了年中增加了一点美术方面的游戏内容以外,其他时间仍是属于底层的工作、甚至是发现有大的知识漏洞,需要补课学习(AI)。但预期在AI完成之后,可以开始铺开具体建筑的具体功能了。
一些经验教训:
- 追随早期版本带来了反复修改:例如早期DOTS不支持string,我使用了hashcode方式绕开,在官方支持之后再换回string,同样的例子还有bool, 以及很多系统使用方式的版本改变。
- DOTS数据结构、代码思想的不断学习和重新理解带来了大量的试探、修改、重构工作。在今天回顾老代码时,也看到了不少早期理解不到位的地方。但是即使今天,我仍然感觉对 Data Oriented Design 一知半解。
- 第三方工具匮乏:不要误会,Unity的插件是非常丰富的。问题是在于DOTS这个新的框架下,这些插件几乎 `所有` 都是不能使用的,所以连A*寻路这种常见的工具都需要自己在DOTS下重新造一遍轮子。
- 测试与重构:“既然在做自己的项目,自然要做到最好”,基于这样的理念,在这个游戏中我把单元测试做到尽可能完备。这也引起一些程序朋友的争议,但我还是相信在后期会带来简化debug的回报。而另一方面,我在发现瑕疵时也总是绝不凑合,第一时间进行重构,因为产生了大量的结构思考、重构工作量。而我对这一点的看法是:学习与经验的累积与这个项目本身同等重要。
- 个人时间安排:唉总觉得在家久了以后,总是会不知不觉的以日常事务压缩工作的时间。我现在的典型的一天是这样的:
- 9点左右起床做饭吃饭
- 10点-11点 健身环、洗澡
- 11点-12点 工作
- 12点-1点半 午饭、午休
- 1点半-2点半 午觉
- 2点半-5点半 工作
- 5点半-7点 做晚饭、吃晚饭
- 7点-8点半 工作
- 8点半-12点 玩游戏
- 自己列出来看都觉得有点不好意思。整体来看,一天的工作时间只有5-6个小时,主要的问题在于:
- 睡眠质量差:每天有大约10小时的睡眠时间,但是仍然会有黑眼圈。
- 健身环、自己做饭:由于多年上班长期吃外卖,确实能感受到影响了身体健康。现在只能还债,唉。
- 游戏:这个可能是最不好意思说的,一天不玩够2小时,总会感觉不爽。但是,若不是因为爱玩游戏,又怎会想要做游戏呢。这可能正是矛盾的地方吧。
讨论群: 827072601
爱发电: https://afdian.net/@taohuayuan
任务板: https://trello.com/b/StForyw7/taohuayuan
twitter: https://twitter.com/zephyr1125
wiki: https://taohuayuanwiki.a2hosted.com
discord: https://discord.gg/sMuKYE6
大佬好!之前看大佬的Dots科普文章入坑的Dots.不过在开发的时候遇到了诸多问题,实在能力有限搞不定,后来痛定思痛还是移除了Dots,换回了原先的开发流.
也尝试过用dots实现A*,还有引入规避算法RVO防止单位相互重叠.总之效果实在不好,单人的力量太单薄了,和大佬说的一样,要做太多底层工作,严重拖延进度.
对于寻路,大佬可以尝试下有个插件叫A* pathfinding project,pro版的测试版支持dots,这个插件把很多可能会用到的功能(例如rvo)都实现了,可能会比自己写容易些.
最后大佬加油,还有注意身体奥~
@aslan:非常感谢你的建议!我去看看他这个项目