繁体   English   中英

序列化 ScriptableObject 参考 (InstanceID)

[英]Serializing ScriptableObject Reference (InstanceID)

假设我有一个 PlayerData ScriptableObject 包含对 AvatarData ScriptableObject 的引用,如下所示:

public class PlayerData : ScriptableObject
{
    public AvatarData avatar;
}

在游戏过程中,玩家可以将头像更改为另一个。 所有 AvatarData 对象都保存在 .asset 文件中。 我想保存对当前选择的 AvatarData 实例的引用并将其保存在 json/binary 文件中以供加载。

对于在 memory 中创建的对象,InstanceID 将更改每个游戏 session。 在 .asset 文件中序列化的对象实例呢? 由于实例已保存到文件中,我们可以依赖它/确保 InstanceID 不会更改吗? JsonUtility.ToJson将为每个 object 生成带有 InstanceID 的 json 但我需要确定当我调用JsonUtility.FromJsonOverwrite时我会得到相同的 object 我知道它不适用于在 memory 中创建的对象,但我认为它应该适用于保存为资产文件的实例。 恐怕每次构建应用程序时 InstanceID 都可能会发生变化。

这个事情谁有经验? 创建自己的 UUID/Hashtable 来引用 Unity3D 中的对象会更好吗?

我发现的大多数答案都建议使用 UnityEditor 命名空间,但它不能在构建中使用。

我发现这篇关于这个问题的帖子。 似乎我们不能在我们的保存系统中依赖 InstanceID,这是通往 go 的方法:

创建另一个 ScriptableObject 资产,其中包含对您的 ScriptableObject 资产的引用列表。 在您的保存数据中,记录列表索引。 您可以实现ISerializationCallbackReceiver并在回调中获取/设置索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM