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; } }
    }
}

### Unity 中集成 DeepSeek 的使用程 #### 一、项目概述 为了使开发者能够更便捷地利用 DeepSeek 提供的强大自然语言处理能力,在游戏开发或其他交互应用中加入智能化的聊天机器人功能,社区成员已经创建了一些工具和指南。例如,有开发者分享了一个简易版的 DeepSeek 接入 Unity 实现对话功能的小工具[^1]。 #### 二、准备工作 在正式开始之前,确保已准备好如下环境配置: - **Unity 版本**:建议使用最新稳定版本。 - **NuGetForUnity 插件**:用于管理第三方库依赖项,可通过官方渠道获取并安装此插件到 Unity 项目中[^4]。 #### 三、具体实施步骤 ##### 3.1 安装必要的组件 通过 NuGetForUnity 来安装 `MessagePack` 序列化库,这是与服务器端通信所必需的一部分。操作方式是从菜单栏依次选择 Tools -> NuGet Package Manager -> Manage Packages... ,接着输入关键词 "MessagePack" 进行搜索并完成安装过程。 ##### 3.2 配置网络请求接口 针对 DeepSeek API 设计相应的 C# 脚本来封装 HTTP 请求逻辑,以便于后续调用服务端提供的各项功能。这里可以参考其他开源项目的做法或是查阅官方文档了解具体的参数设置方法[^3]。 ```csharp using UnityEngine; using System.Collections; using MessagePack; public class ChatManager : MonoBehaviour { private string apiUrl = "https://api.deepseek.com/v1/chat"; public IEnumerator SendMessage(string message){ var request = new HttpRequest(apiUrl); // 构建消息体 var body = MessagePackSerializer.Serialize(new { text=message }); yield return StartCoroutine(PostRequest(request, body)); } } ``` ##### 3.3 测试验证效果 构建简单的 UI 界面让用户能方便地发送测试信息给后台,并展示返回的结果。可以通过编写脚本监听按钮点击事件触发上述定义好的协程函数来发起会话请求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值