ScriptableObject 是一个好的数据库设计吗?

Is ScriptableObject a good database design?

我正在尝试制作一个包含简单项目的简单游戏数据库。

我的数据库只是一个 ScriptableObject,包含其他 ScriptableObject(项目)的列表,其中包含项目信息和字符串键。

var item = DB.GetItem("weapon.magic_sword");

1 - 有没有比使用关键字字符串来识别项目更好的解决方案?

2 - 如果我想生成项目。例如,将随机统计信息添加到现有的 "templates" 项目,我是否被迫为项目创建一个 MonoBehaviour 脚本并从模板脚本对象实例化它?我使用流式资产来保存播放器的库存,所以我需要能够在流式资产中使用那些生成的项目。

PS:我更喜欢避免使用真实的数据库(例如sql)

我将分解你的问题:

  1. 不确定你所说的 "database" 是什么意思 - 但如果你的意思是实际意义上的,不,ScriptableObject 不能用于实现实际的 DB
  2. ScriptableObject 非常适合存储物品的元数据(基础护甲、伤害、成本等)
  3. 如果您想(本地)存储用户进度的动态数据,IMO 最简单和最强大的解决方案是序列化您的库存 class 并将其存储在 PlayerPrefs 中。我们使用 JSON.NET 并将其存储为字符串;如果你想要更多optimized/secure,你可以使用一些二进制序列化(Protobuff,内置二进制序列化等)
  4. 我建议使用生成的 GUID 而不是使用命名字符串,它会增加人为错误的风险。而是简单地向每个对象添加一个自动生成的 GUID 并通过它的唯一 ID get/set 它。

希望我正确理解并回答了你的问题。