ScriptableObject 是一个好的数据库设计吗?
Is ScriptableObject a good database design?
我正在尝试制作一个包含简单项目的简单游戏数据库。
我的数据库只是一个 ScriptableObject,包含其他 ScriptableObject(项目)的列表,其中包含项目信息和字符串键。
var item = DB.GetItem("weapon.magic_sword");
1 - 有没有比使用关键字字符串来识别项目更好的解决方案?
2 - 如果我想生成项目。例如,将随机统计信息添加到现有的 "templates" 项目,我是否被迫为项目创建一个 MonoBehaviour 脚本并从模板脚本对象实例化它?我使用流式资产来保存播放器的库存,所以我需要能够在流式资产中使用那些生成的项目。
PS:我更喜欢避免使用真实的数据库(例如sql)
我将分解你的问题:
- 不确定你所说的 "database" 是什么意思 - 但如果你的意思是实际意义上的,不,
ScriptableObject
不能用于实现实际的 DB
ScriptableObject
非常适合存储物品的元数据(基础护甲、伤害、成本等)
- 如果您想(本地)存储用户进度的动态数据,IMO 最简单和最强大的解决方案是序列化您的库存 class 并将其存储在
PlayerPrefs
中。我们使用 JSON.NET 并将其存储为字符串;如果你想要更多optimized/secure,你可以使用一些二进制序列化(Protobuff,内置二进制序列化等)
- 我建议使用生成的 GUID 而不是使用命名字符串,它会增加人为错误的风险。而是简单地向每个对象添加一个自动生成的
GUID
并通过它的唯一 ID get/set 它。
希望我正确理解并回答了你的问题。
我正在尝试制作一个包含简单项目的简单游戏数据库。
我的数据库只是一个 ScriptableObject,包含其他 ScriptableObject(项目)的列表,其中包含项目信息和字符串键。
var item = DB.GetItem("weapon.magic_sword");
1 - 有没有比使用关键字字符串来识别项目更好的解决方案?
2 - 如果我想生成项目。例如,将随机统计信息添加到现有的 "templates" 项目,我是否被迫为项目创建一个 MonoBehaviour 脚本并从模板脚本对象实例化它?我使用流式资产来保存播放器的库存,所以我需要能够在流式资产中使用那些生成的项目。
PS:我更喜欢避免使用真实的数据库(例如sql)
我将分解你的问题:
- 不确定你所说的 "database" 是什么意思 - 但如果你的意思是实际意义上的,不,
ScriptableObject
不能用于实现实际的 DB ScriptableObject
非常适合存储物品的元数据(基础护甲、伤害、成本等)- 如果您想(本地)存储用户进度的动态数据,IMO 最简单和最强大的解决方案是序列化您的库存 class 并将其存储在
PlayerPrefs
中。我们使用 JSON.NET 并将其存储为字符串;如果你想要更多optimized/secure,你可以使用一些二进制序列化(Protobuff,内置二进制序列化等) - 我建议使用生成的 GUID 而不是使用命名字符串,它会增加人为错误的风险。而是简单地向每个对象添加一个自动生成的
GUID
并通过它的唯一 ID get/set 它。
希望我正确理解并回答了你的问题。