【问题标题】:Is there a method that would be called right before the serialization of the object in Unity3D?在 Unity3D 中序列化对象之前是否有方法可以调用?
【发布时间】:2014-02-14 02:42:56
【问题描述】:

有一个类的数据不容易序列化。但是,我可以将它准备为可序列化的形式。 那么,是否有任何方法可以在序列化之前调用以准备数据?

[System.Serializable]
public MyCalss {
    //Unity can serialise this list;
    public List<int> serializableData;

    //class contains a lot of data that cannot be serialized by Unity3D

    protected override void OnSerialize() { // <-- looking for this method
         //pack all my data into the serializableData array
    }
}

public Behaviour: MonoBehaviour {
    MyClass instanceOfMyClass; // will be serialized by Unity3D
}

【问题讨论】:

  • 你使用什么序列化机制/库?
  • Unity3D的默认序列化
  • 除了OnNetworkSerialize之外,我知道Unity没有自己的序列化...你能举个代码例子吗?
  • 我添加了我期望的代码示例
  • @BlueRaja-DannyPflughoeft ??? Unity UI 的强大功能基于serialization。 Yarg,您的示例方法声明它将数据打包到一个数组中,序列化应该自动为您处理,所以不清楚为什么您需要预序列化传递。

标签: c# serialization unity3d


【解决方案1】:
void OnBeforeSerialize()
void OnAfterDeserialize()

它们存在于界面中

ISerializationCallbackReceiver

所以只要实现这个接口就可以了

【讨论】:

    【解决方案2】:

    如果您想要一个 .Net 解决方案(而不是 Unity 特定的 afpro's answer),您也可以使用 OnSerializingAttribute

    [Serializable]
    public MyCalss {
        //Unity can serialise this list;
        public List<int> serializableData;
    
        //class contains a lot of data that cannot be serialized by Unity3D
    
        [OnSerializing]
        internal void OnSerializingMethod(StreamingContext context)
        {
            //pack all my data into the serializableData array
        }
    }
    

    OnSerializing 类似,您也有OnSerializedOnDeserializingOnDeserialized 属性。它们都需要一个将StreamingContext 作为参数的方法。

    【讨论】:

      猜你喜欢
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      相关资源
      最近更新 更多