首页 > 解决方案 > ScriptableObject 是一个好的数据库设计吗?

问题描述

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

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

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

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

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

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

标签: unity3dinventoryscriptable-object

解决方案


我将分解你的问题:

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

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


推荐阅读