csharpunity网络编程

[Unity 3D] ET 框架网络模块的抽离、重构与模块化

2022-09-24  本文已影响0人  雨落随风

在本文,笔者介绍一下这段时间重构的 ET 网络模块,希望能够遇到需要它的人吧。
ET: 一个双端 C# Unity 游戏开发框架,网络 + 热重载的功能亮点; Attribute + 扩展方法 + 反射的底层驱动逻辑;ECS 架构特色。

前言

做一个飞屏软件,负责技术的同事敲定用 ET ,emmm.... 内心是抗拒的,毕竟项目不大,但反过来想想,项目不大正好是个学习 ET 的契机。
因为我负责控制端,用不到热更,并且习惯了在 Unity 内做开发,所以我决定把 ET 的网络模块剥离出来,用在我负责的控制端上,这样一来,既能够与 ET 后台对接,也能保持我自己的开发习惯。

当然,非要说细节上为啥抗拒,其实是有几点的,作为 ET 0 基础小白斗胆小声BB几句:

  1. 为了热重载,严格约束用户按照 ET ECS 架构开发,因此开发一个应用得整好几个解决方案,而且还不是常规的打开方式。
  2. 不需要热更,ILRuntime 插件冗余了,不能忍,如果考虑热更那也只会是对现有开发模式无侵入的 HCLR。
  3. 修改在 Model 、 Hotfix 程序集,需要编译才能看到修改的效果,而开启自动编译一度让我困惑。
  4. 框架文件结构限定的比较死,由于很多路径都是写死在逻辑中,原本仅有一个 Server ,一个 Client,想要做 一个 Server + 两个 Client 令初次接触 ET 的我无从下手(当然,现在整明白了,改一些脚本中文件夹路径就行,按说 ET7 啥都内敛到了 Unity 内部,也不预设热更方案也就没有这些痛点了)。

抽离

重构

模块化

借助 Unity 官方 Assembly Definition File ,我们可以在 Unity 项目中轻松的模块化 ET 网络模块。

可见:

使用

  1. clone 本项目,将文件夹 ET Network Module 拷贝到你的项目中(可考虑自行改为 UPM )
  2. 删除 Generated 文件夹。
  3. 如果有代码引用了 OuterMessage 中的类型,则这个代码所在的文件夹改名,加上 ~ (波浪号)完成编译后再删除波浪号
  4. 约定:前后端公用的 outermessage.proto 中 Ping 消息置顶。
  5. 通过 Tools 菜单中提供的工具,依次生成 OuterMessage.cs 、OuterOpcode.cs 以及各个非 RPC 消息处理器
  6. 调用 ET 原生 API:call + send 实现通信,var response = await Session.call(new SomeRPCRequest()) 或者 Session.Send(new NoRPCRequest())
  7. 非 RPC 消息的监听:使用 using static MessageHandler 即可在自己的类中通过 ListenSignalRemoveSignal 处理感兴趣的网络消息,示例代码如下:
using ET;
using UnityEngine;
using static MessageHandler;
public class HandlerUsageCase : MonoBehaviour
{
    private void Start()
    {
        ListenSignal<M2C_CreateMyUnit>(OnMyUnitCreated);
        ListenSignal<M2C_CreateUnits>(OnUnitsCreated);
    }

    private void OnUnitsCreated(Session arg1, M2C_CreateUnits arg2)
    {
        // 撰写你自己的逻辑
    }
    private void OnMyUnitCreated(Session arg1, M2C_CreateMyUnit arg2)
    {
        // 撰写你自己的逻辑
    }
    private void OnDestroy()
    {
        RemoveSignal<M2C_CreateMyUnit>(OnMyUnitCreated);
        RemoveSignal<M2C_CreateUnits>(OnUnitsCreated);
    }
}

演示

演示一:消息生成,消息处理器生成

code generate

演示二:测试与 ET 服务器通信(登录网关,登录地图,Ping(心跳))

写到最后

原创作品,转载请注明出处

上一篇 下一篇

猜你喜欢

热点阅读