大家好,

我们刚刚发布了《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行的代码巨石,我对此绝对不自豪。

如果你想了解更多或需要更详细的说明,请告诉我。