unity3d - ScriptableObject 是一个好的数据库设计吗?
问题描述
我正在尝试制作一个简单的游戏数据库,其中包含简单的项目。
我的数据库只是一个 ScriptableObject,包含其他 ScriptableObject(项目)的列表,其中包含有关项目的信息并持有一个字符串键。
var item = DB.GetItem("weapon.magic_sword");
1 - 有没有比使用密钥字符串识别项目更好的解决方案?
2 - 如果我想生成项目。例如,将随机统计信息添加到现有的“模板”项目中,我是否被迫为项目创建 MonoBehaviour 脚本并从模板脚本对象中实例化它?我使用流媒体资产来保存播放器的库存,因此我需要能够在流媒体资产中使用那些生成的项目。
PS:我更喜欢避免使用真正的数据库(例如 sql)
解决方案
我将分解你的问题:
- 不知道你所说的“数据库”是什么意思 - 但如果你的意思是实际意义上的,不,
ScriptableObject
不能用于实现实际的数据库 ScriptableObject
非常适合存储物品的元数据(基础护甲、伤害、成本等)- 如果您想(本地)存储用户进程的动态数据,IMO 最简单和最强大的解决方案是序列化您的库存类并将其存储在
PlayerPrefs
. 我们使用 JSON.NET 并将其存储为字符串;如果你想更优化/更安全,你可以使用一些二进制序列化(Protobuff,内置二进制序列化等) - 我建议使用生成的 GUID 而不是使用命名字符串,这会增加人为错误的风险。相反,只需
GUID
向每个对象添加一个自动生成的对象,并通过其唯一 ID 获取/设置它。
我希望我正确理解了您的问题并回答了它。
推荐阅读
- c# - IBM XMS .Net 如何从 MQ 接收 png 和 jpg 等图像文件
- tensorflow - 在 jupyter notebook 中训练低于纪元的模型时写的数字告诉我们什么?
- odoo - 如何在 odoo 14 中更改 OrderReceipt
- react-native - React Native 中的底页覆盖 UI 元素
- php - 在php的foreach循环中获取最新日期的结果?
- jms - 插入 ActiveMQ 的 JmsTransactionManager 的 RedeliveryDelay 无法正常工作
- codeigniter-3 - 使用 phpoffice 读取 .doc 文件
- go - 使用 pulumi golang SDK 无法正确创建 Kubernetes 映射类型自定义资源
- typescript - 分页只在第一页显示条目
- r - 在 dplyr 中用逗号连接二进制列名