数据表在工程中的地位

游戏制作过程中难免会涉及到使用一些数据表。

很多游戏对数据表的使用方法是 用游戏对象去依赖数据表,比如初始化血量、攻击力等数值时,去根据相关表格进行计算。

但我个人更倾向于使用 数据表依赖游戏对象 的方法,游戏对象完全不依赖数据表的存在。具体的做法是:数据表中的数据读写,实际上是对游戏对象数据的读写,数据表只是相当于把多个游戏对象的数值汇总,以用于统一管理。

在 Unity 里我习惯使用 ScriptableObject 来作为数据表,这样的话引用 prefab 会很方便。给数据表的 property 加上 Odin InspectorShowInInspector, 就可以实现通过 ScriptableObjectprefab 进行读写。

Prefab 是可以这样做了,但是由于场景中的对象无法在 ScriptableObject 中序列化,所以对于场景对象的修改还得想想办法。

我目前的办法是在场景中放一个对象 M, 用于存放场景中所有需要通过数据表进行修改的对象引用。每次使用数据表时,把 M 拖到数据表中进行数据表中引用的初始化,这样就可以了。

实际上大部分人大概都不是使用 ScriptableObject 来做数据表,而是使用例如 Excel, CSV 之类的表格。这些表格不能读取项目中游戏对象的实际参数,这时我认为应该使用 ScriptableObject 作为中介者,读取表格的数据,写入各个对象。

上面我所说的,都是针对游戏开发阶段。如果是 Stellaris 这类需要在发布后依赖外部表格的游戏,或者是玩家可以通过表格进行自定义修改的游戏,那么需要重新考虑问题。

大部人可能为认为做这些是多此一举,但我写工程习惯于简洁直接地表达事物之间的关系。在整个游戏逻辑里,数据表的概念实际上是不需要的,实际必要的是游戏对象的数值。数据表只是开发者开发时的中间产物,那么它就不应该出现在最后的发布版里。

在极简的道路上越走越远 不再使用 TypeScript
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×