当前位置: 首页 > news >正文

DeepSeek教unity------MessagePack-01

中文:GitCode - 全球开发者的开源社区,开源代码托管平台

MessagePack是C# 的极速 MessagePack 序列化器。它比 MsgPack-Cli 快 10 倍,并且性能超过其他 C# 序列化器。MessagePack for C# 还内置支持 LZ4 压缩——一种极其快速的压缩算法。性能在诸如游戏、分布式计算、微服务或数据缓存等应用中尤为重要。
这个库通过 NuGet 分发。也有特殊的 Unity 支持。我们针对 .NET Standard 2.0 进行了优化,特别适用于 .NET 8+ 和 .NET Framework。库代码是纯 C#(在某些平台上使用即时 IL 代码生成或 AOT 安全源生成器)。
要使用 NuGet 安装,只需安装 MessagePack 包。还有多种官方和第三方扩展包可用(了解更多请参阅我们的扩展部分):
MessagePack.ReactiveProperty
MessagePack.UnityShims
MessagePack.AspNetCoreMvcFormatter
最低支持的 Unity 版本将是 2022.3.12f1,因为需要通过 C# 源生成器支持 IL2CPP。在 Unity 中使用它需要两个安装步骤。这两个步骤都需要完成,而不仅仅是一个。

1、从 NuGet 使用 NuGetForUnity 安装 MessagePack。从 NuGet -> 管理 NuGet 包 打开窗口,搜索 "MessagePack" 并点击安装。

https://github.com/GlitchEnzo/NuGetForUnity

2、通过引用 Git URL 安装 MessagePack.Unity 包。打开包管理器窗口并点击从 Git URL 添加包,输入以下路径:

https://github.com/MessagePack-CSharp/MessagePack-CSharp.git?path=src/MessagePack.UnityClient/Assets/Scripts/MessagePack

MessagePack 使用 ..* 发布标签,因此你可以指定一个版本,如 #v3.0.0。例如:

https://github.com/MessagePack-CSharp/MessagePack-CSharp.git?path=src/MessagePack.UnityClient/Assets/Scripts/MessagePack#v3.0.0

在 Unity 中,MessagePackSerializer 可以序列化 Vector2、Vector3、Vector4、Quaternion、Color、Bounds、Rect、AnimationCurve、Keyframe、Matrix4x4、Gradient、Color32、RectOffset、LayerMask、Vector2Int、Vector3Int、RangeInt、RectInt、BoundsInt 以及它们的可空类型、数组和列表类型,这通过内置的扩展 UnityResolver 实现。
MessagePack.Unity 在应用程序启动时自动将 UnityResolver 添加到默认选项解析器中,以便启用此序列化。如果你想自定义解析器或更改默认选项,最好记住这一点。在 Unity 包中有如下的代码来实现这一点:

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
private static void Init()
{MessagePackSerializer.DefaultOptions = MessagePackSerializerOptions.Standard.WithResolver(UnityResolver.InstanceWithStandardResolver);
}

示例:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MessagePack;public class GameRoot : MonoBehaviour
{//调用 MessagePackSerializer.Serialize<T>/Deserialize<T> 来序列化/反序列化你的对象实例。//你可以使用 ConvertToJson 方法来获取任何 MessagePack 二进制数据的人类可读表示。private void Start(){var mc = new MyClass{Age = 99,FirstName = "hoge",LastName = "huga",};byte[] bytes = MessagePackSerializer.Serialize(mc);MyClass mc2 = MessagePackSerializer.Deserialize<MyClass>(bytes);Debug.Log($"Age: {mc2.Age}, FirstName: {mc2.FirstName}, LastName: {mc2.LastName}");// 你可以将 MessagePack 二进制数据转储为人类可读的 JSON。// 使用索引键(而不是字符串键)会序列化为 MessagePack 数组,// 因此属性名称不可用。// [99,"hoge","huga"]var json = MessagePackSerializer.ConvertToJson(bytes);Debug.Log(json);}
}//定义要序列化的结构或类,并用[MessagePackObject] 属性对其进行注解。使用[Key] 属性对需要序列化成员(包括字段和属性)进行注解。
[MessagePackObject]
public class MyClass
{// Key 属性需要一个序列化索引(或字符串名称)// 这些值必须是唯一的,并且还需要考虑版本控制。// Keys 在后续部分有更详细的描述。[Key(0)]public int Age { get; set; }[Key(1)]public string FirstName { get; set; }[Key(2)]public string LastName { get; set; }// 所有不应被序列化的字段或属性必须用 [IgnoreMember] 进行注解。[IgnoreMember]public string FullName { get { return FirstName + LastName; } }
}
/****************************************************文件:Test_01.cs作者:Edision日期:#CreateTime#功能:示例1
*****************************************************/using MessagePack;
using UnityEngine;public class Test_01 : MonoBehaviour
{//调用 MessagePackSerializer.Serialize<T>/Deserialize<T> 来序列化/反序列化你的对象实例。//你可以使用 ConvertToJson 方法来获取任何 MessagePack 二进制数据的人类可读表示。public void Test(){var mc = new MyClass{Age = 99,FirstName = "hoge",LastName = "huga",};byte[] bytes = MessagePackSerializer.Serialize(mc);MyClass mc2 = MessagePackSerializer.Deserialize<MyClass>(bytes);Debug.Log($"【Test_01Logo】Age: {mc2.Age}, FirstName: {mc2.FirstName}, LastName: {mc2.LastName}");// 你可以将 MessagePack 二进制数据转储为人类可读的 JSON。// 使用索引键(而不是字符串键)会序列化为 MessagePack 数组,// 因此属性名称不可用。// [99,"hoge","huga"]var json = MessagePackSerializer.ConvertToJson(bytes);Debug.Log($"【Test_01Logo】{json}");}//定义要序列化的结构或类,并用[MessagePackObject] 属性对其进行注解。使用[Key] 属性对需要序列化成员(包括字段和属性)进行注解。[MessagePackObject]public class MyClass{// Key 属性需要一个序列化索引(或字符串名称)// 这些值必须是唯一的,并且还需要考虑版本控制。// Keys 在后续部分有更详细的描述。[Key(0)]public int Age { get; set; }[Key(1)]public string FirstName { get; set; }[Key(2)]public string LastName { get; set; }// 所有不应被序列化的字段或属性必须用 [IgnoreMember] 进行注解。[IgnoreMember]public string FullName { get { return FirstName + LastName; } }}
}

http://www.lryc.cn/news/536779.html

相关文章:

  • 知识拓展:Python序列化模块 marshal 模块详解
  • leetcode 2684. 矩阵中移动的最大次数
  • 机械学习基础-6.更多分类-数据建模与机械智能课程自留
  • 自动化测试实战
  • qt QPlainTextEdit总结
  • AWS SES 邮件服务退信/投诉处理与最佳实践指南
  • 理解WebGPU 中的 GPUAdapter :连接浏览器与 GPU 的桥梁
  • rpx和px混用方案
  • 光伏设计软件分类:无人机、Unity3D引擎齐上阵
  • 太速科技-616-基于6U VPX XCVU9P+XCZU7EV的双FMC信号处理板卡
  • 国产鲲鹏920+欧拉+达梦
  • LeetCode--146. LRU 缓存【Golang中的list】
  • 查看notebook的jupyter token
  • vue+springboot+webtrc+websocket实现双人音视频通话会议
  • 什么是高亮环形光源
  • 2025年3月一区SCI-混沌进化优化算法Chaotic evolution optimization-附Matlab免费代码
  • 51单片机俄罗斯方块开机动画
  • RK3588开发板部署DeepSeek-R1-Distill-Qwen-1.5B的步骤及问题
  • 网络安全 | 安全信息与事件管理(SIEM)系统的选型与实施
  • DeepSeek接口联调(postman版)
  • RadASM环境,win32汇编入门教程之三
  • oracle多次密码错误登录,用户锁住或失效
  • HCIA-Datacom笔记3:网络工程
  • [NGINX]命令行参数
  • http 模块
  • 本地部署DeepSeek + AnythingLLM 搭建高效安全的个人知识库
  • LLM - 理解 DeepSeek 的 GPRO (分组相对策略优化) 公式与源码 教程(2)
  • Github 2025-02-14 Java开源项目日报 Top10
  • DeepSeek赋能制造业:图表可视化从入门到精通
  • Python爬虫技术