OnBeforeSerialize And OnAfterDeserialize

这篇博客介绍了在Unity3D中如何处理Dictionary类型的序列化问题。通过实现ISerializationCallbackReceiver接口,利用OnBeforeSerialize和OnAfterDeserialize两个方法来同步Dictionary _myDictionary的内容,确保其在序列化前后保持一致。示例代码展示了如何将Dictionary的键值对分别存储到_list和_values中,并在反序列化后重新构建Dictionary。" 39291541,4820137,C# 使用DotNetBar实现ExpanableSplitter控件,"['C#编程', 'DotNetBar库', 'Windows应用开发', '控件设计', '客户端开发']
摘要由CSDN通过智能技术生成
using UnityEngine;
using System.Collections.Generic;

public class test : MonoBehaviour, ISerializationCallbackReceiver
{
    
	public List<int> _keys;
    public List<string> _values;

    //Unity doesn't know how to serialize a Dictionary
    public Dictionary<int, string> _myDictionary = new Dictionary<int, string>
		{
			{3, "I"},
			{4, "Love"},
			{5, "Unity"}
		};

    // 一改_keys,_values就调用
    public void OnAfterDeserialize()
    {
        Debug.Log(" ** OnAfterDeserialize **");
        _myDictionary.Clear();
        for (int i = 0; i != System.Math.Min(_keys.Count, _values.Count); i++)
            _myDictionary.Add(_keys[i], _values[i]);
    }

    // 每帧调用
    public void OnBeforeSerialize()
    {
        //Debug.Log(" ** OnBeforeSerialize **");
        //_keys.Clear();
        //_values.Clear();
        //foreach (var kvp in _myDictionary)
        //{
        //    _keys.Add(kvp.Key);
        //    _values.Add(kvp.Value);
        //}
    }

    void OnGUI()
    {
        foreach (var kvp in _myDictionary)
            GUILayout.Label("Key: " + kvp.Key + " value: " + kvp.Value);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值