Unity3d ScriptableObject是一个好的数据库设计吗?
我试图制作一个简单的游戏数据库,包含简单的项目 我的数据库只是一个ScriptableObject,包含其他ScriptableObject(项目)的列表,其中包含关于项目的信息和字符串键Unity3d ScriptableObject是一个好的数据库设计吗?,unity3d,inventory,scriptable-object,Unity3d,Inventory,Scriptable Object,我试图制作一个简单的游戏数据库,包含简单的项目 我的数据库只是一个ScriptableObject,包含其他ScriptableObject(项目)的列表,其中包含关于项目的信息和字符串键 var item = DB.GetItem("weapon.magic_sword"); 1-是否有比使用键字符串标识项目更好的解决方案 2-如果我想要生成项目。例如,将随机统计数据添加到现有的“模板”项中,是否强制我为该项创建一个单行为脚本,并从模板脚本对象实例化该脚本?我使用流媒体资产来保存播放器的库存
var item = DB.GetItem("weapon.magic_sword");
1-是否有比使用键字符串标识项目更好的解决方案
2-如果我想要生成项目。例如,将随机统计数据添加到现有的“模板”项中,是否强制我为该项创建一个单行为脚本,并从模板脚本对象实例化该脚本?我使用流媒体资产来保存播放器的库存,因此我需要能够使用流媒体资产中生成的项目
注:我更喜欢避免使用真实的数据库(如sql)我将详细分析您的问题:
ScriptableObject
不能用于实现实际的数据库ScriptableObject
非常适合存储物品(基础护甲、伤害、成本等)的元数据PlayerPrefs
中。我们使用JSON.NET并将其存储为字符串;如果您想更优化/更安全,可以使用一些二进制序列化(Protobuff、内置二进制序列化等)GUID
,并通过其唯一ID获取/设置它我希望我正确地理解了您的问题并回答了它。这样做的目的是为了在整个游戏过程中保持变化吗?或者只是作为一个表格来查找有关物品的数据?在游戏过程中,库存内容可能会发生变化。但是,添加/删除的物品本身是固定的(除了那些随机统计的现有物品的变体)。当玩家关闭/重新打开游戏时会怎样?数据是否应该持久?是的,在游戏会话之间,库存是持久的。我计划将字符串id列表保存在流媒体资产中。但是,我不知道如何处理生成的项,因为我想我需要一个monobhavior来保存字符串id和项的stats修改。您可以将其存储在不是单一行为的标准类中。也就是说,对ScriptableObjects的更改不会在游戏会话之间持续。不能将scriptableobject用作数据库。您理解正确。我通过App.persistentDataPath和流媒体资产进行序列化。但是,如何自动生成GUID?它似乎比字符串更有效。我们不能100%确定Unity支持GUI,我们使用的是支持它的GUI。但是你可以很容易地自己做一个,然后为它创建一个