• Unity开发笔记-PlayerPrefs存储bytes[]和自定义对象


    PlayerPrefs没有提供存储bytes[]和其他自定义结构的接口,我们可以利用现有的SetString接口,将bytes[]转化为string存储,从而实现扩展

    1.bytes[]和string之间的互相转换

      `System.Convert.ToBase64String(bytes)`
    
      `System.Convert.FromBase64String(string);`
    

    2.自定义数据存储

    利用上述bytes[]的扩展,我们可以将自定义对象序列化成bytes[],即可实现扩展,类似于实现网络协议

    1.定义一个接口用来约定自定义对象序列化和反序列化

      `public interface IPrefSerializer
    {
        void Write(BinaryWriter writer);
        void Read(BinaryReader reader);
    }`
    

    2.实现自定义对象的扩展

    `public static void SetObject(string key, IPrefSerializer value)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            value.Write(new BinaryWriter(ms));
            byte[] bytes = ms.ToArray();
            SetBytes(key, bytes);
        }
    }`
    

    3.实现自定义对象列表的扩展
    序列化List时,需要先序列化List的长度

      `public static void SetObjectList<T>(string key, List<T> value) where T : IPrefSerializer
      {
        using (MemoryStream ms = new MemoryStream())
        {
            BinaryWriter writer = new BinaryWriter(ms);
            writer.Write(value.Count);
            for (int i = 0; i < value.Count; i++)
            {
                IPrefSerializer data = value[i];
                data.Write(writer);
            }
            byte[] rlt = ms.ToArray();
            SetBytes(key, rlt);
        }
    }`
  • 相关阅读:
    unity编辑器脚本工具练习
    虚拟现实之机械拆装项目架构
    unity两点之间抛物线,完美金手指
    unity发射弓箭轨迹的实现
    基于unity的直升机模拟设计
    windows使用小技巧
    硬盘分区表知识——详解硬盘MBR
    针对设备转发表的攻击
    kali2020创建root用户
    OllyDBG的基本快捷键及其功能
  • 原文地址:https://www.cnblogs.com/terrynoya/p/13395847.html
Copyright © 2020-2023  润新知