大家好,
我们刚刚发布了《Cosmo Cargo》的新试玩版:https://store.steampowered.com/app/4659480/Cosmo_Cargo_Demo/
我想分享一下我们如何从Unity项目视角来组织这个游戏,因为用了Unity14年后,我觉得这是目前最好的项目。(当然,等到下一个项目就不一定了!)
游戏数据:
- 所有数据都存储为ScriptableObject
- 这些SO在游戏运行期间以“只读”方式使用
- 我们制作了许多编辑器,以便像在谷歌表格中一样,通过炫酷的电子表格来操作这些数据
- 我们使用Artifice Toolkit(一个类似Odin的插件)来增强Inspector面板
效果系统:
- 效果(伤害、治疗、灼烧、生成、摧毁等)是C#类
- 它们通过多态列表([SerializedReference])存储在物品SO中。使用Artifice,这变得非常简单
- 效果带有条件。同样是纯C#类,也以多态列表形式存储
MVC:
- 游戏采用模型/视图/控制器架构
- 模型是数据(SO),控制器是使用模型初始化的C#类,视图是UI/MonoBehaviour
- 这意味着游戏整个核心是纯C#,仅依赖UnityEngine来处理SO
- 这使得我们可以用单元测试来测试大部分内容(目前已有215+个测试)
- 同时也使得核心类易于序列化用于存档,也易于恢复
状态机:
- 配合MVC,我们有一个简单的状态机。进入战斗 -> 状态,进入商店 -> 状态,打开地图 -> 状态,等等
- 每个状态……都有一个视图!因此它可以在有Unity或无Unity的情况下工作
不详细说明“视图”,因为它们主要是简单uGUI组件的预制体。
我们还有一些需要妥善解决的问题,比如在鼠标优先的游戏中实现手柄控制……我的拖放文件是一个超过3000行的代码巨石,我对此绝对不自豪。
如果你想了解更多或需要更详细的说明,请告诉我。
评论 (0)