NetworkServer中注册事件RegisterHandler

主要是注册服务端使用的事件

   // message handlers /// <summary>Register a handler for message type T. Most should require authentication.</summary>// TODO obsolete this some day to always use the channelId version.//      all handlers in this version are wrapped with 1 extra action.public static void RegisterHandler<T>(Action<NetworkConnectionToClient, T> handler, bool requireAuthentication = true)where T : struct, NetworkMessage{ushort msgType = MessagePacking.GetId<T>();if (handlers.ContainsKey(msgType)){Debug.LogWarning($"NetworkServer.RegisterHandler replacing handler for {typeof(T).FullName}, id={msgType}. If replacement is intentional, use ReplaceHandler instead to avoid this warning.");}handlers[msgType] = MessagePacking.WrapHandler(handler, requireAuthentication);}

使用方法如下:
先设计传输的数据

  public struct TestServerMessage: NetworkMessage{public string message;}

服务端注册事件,注意一定要在服务端,事件格式如下所示

NetworkServer.RegisterHandler<TestServerMessage>(OnTestServerMessage);
public void OnTestServerMessage(NetworkConnectionToClient conn, TestServerMessage msg)
{Debug.Log(msg.message);
}

然后发送事件,客户端使用Send发送事件,发送给服务端执行,而不是发送给其他客户端

 NetworkClient.Send(new TestServerMessage { message="我来了"});

NetworkClient.Send() 函数

主要是发送数据给服务端,调用注册的服务端函数

    // send /// <summary>Send a NetworkMessage to the server over the given channel.</summary>public static void Send<T>(T message, int channelId = Channels.Reliable)where T : struct, NetworkMessage{if (connection != null){if (connectState == ConnectState.Connected){connection.Send(message, channelId);}else Debug.LogError("NetworkClient Send when not connected to a server");}else Debug.LogError("NetworkClient Send with no connection");}

NetworkConnectionToClient中的Send函数

主要是向该连接的客户端发送消息,例如我在服务端保存了所有客户端NetworkConnectionToClient,可以通过该客户端的Send函数执行对应的事件

 // Send stage one: NetworkMessage<T>/// <summary>Send a NetworkMessage to this connection over the given channel.</summary>[MethodImpl(MethodImplOptions.AggressiveInlining)]public void Send<T>(T message, int channelId = Channels.Reliable)where T : struct, NetworkMessage{using (NetworkWriterPooled writer = NetworkWriterPool.Get()){// pack message and send allocation freeMessagePacking.Pack(message, writer);NetworkDiagnostics.OnSend(message, channelId, writer.Position, 1);Send(writer.ToArraySegment(), channelId);}}

例如在服务器端运行的OnServerConnect函数中,检测到一旦有客户端加入,就会执行该函数,conn为加入函数的客户端NetworkConnectionToClient 。

public override void OnServerConnect(NetworkConnectionToClient conn){}

创建一个客户端使用的传输数据

    public struct TestClientMessage : NetworkMessage{public string message;}

注册该事件,每个客户端都要注册,如果出现客户端没有注册该事件,但是仍然发送数据过去,就会出现下面这个错误,因为NetworkClient没有注册该事件,所以会出现该问题

一般注册在OnStartClient函数中

public override void OnStartClient(){NetworkClient.RegisterHandler<TestClientMessage>(OnTestClientMessage);
}
public void OnTestClientMessage(TestClientMessage msg)
{Debug.Log(msg.message);
}

注册完成之后,进行发送调用

public override void OnServerConnect(NetworkConnectionToClient conn){conn.Send(new TestClientMessage { message=conn.connectionId+"发来消息"});
}

Unity多人联机框架Mirro学习记录(一)相关推荐

  1. SSM框架入门学习记录

    SSM框架入门学习记录 //项目结构 在这里插入图片描述 在这里插入图片描述 包名多种多样,命名习惯问题. 流程:Controller(接受请求)-->Service(biz)(bl)(写业务函 ...

  2. scrapy框架菜鸟学习记录

    scrapy框架菜鸟学习记录 scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.其可以应用在数据挖掘,信息处理或储存历史数据等一系列的程序中.其最初是为了页面抓取(更确切的说,网络抓 ...

  3. Unity游戏优化(第2版)学习记录8

    Unity游戏优化[第二版]学习记录8 第8章 掌握内存管理 一.Mono平台 1.垃圾回收 2.内存碎片 3.运行时的垃圾回收 4.多线程的垃圾回收 二.代码编译 三.分析内存 1.分析内存消耗 2 ...

  4. Unity多人联机的实现

    实现多人联机的方法有几种,具体取决于你的具体需求.以下是一些选项: Unity Multiplayer:Unity有自己的内置网络解决方案,称为Unity Multiplayer(以前称为UNET). ...

  5. unity多人联机插件_别在纠结“后端”开发了,联机小游戏还可以这样做!

    本篇文章要感谢「银笑的尤里」从 9月28日腾讯云深圳「游戏开发的超"音""速"」沙龙发来了重磅消息,下面 Shawn 重点介绍对个人开发者惊喜的"MG ...

  6. unity多人联机插件_Unity Multiplayer多人联网全新升级

    Unity作为全球开发者信赖的开发平台,也为大家提供了包括Unity Ads广告.Analytics分析.Performance Reporting性能报告及Multiplayer多人联网等在内的多个 ...

  7. unity多人联机插件_Unity3D多人协作开发环境搭建

    多人协作 说到多人协作开发,大家都会想到要使用版本控制工具来管理项目,当然最常用的要数SVN和Git了,但是SVN管理Unity3D项目的确有一些不尽人意的地方. 比如:两个人修改了同一个场景,SVN ...

  8. unity多人联机插件_Mirror ---Unity多人联机游戏API(一)

    Mirror是Unity 商店的资源: https://assetstore.unity.com/packages/tools/network/mirror-129321 Mirror是 high l ...

  9. Unity 3D官方教程——Adventure Game学习记录

    1.Interactable System: 1.Picture Interactable:Player走到SecurityRoom墙前的那张画 2.Fish Interactable鱼档前的交互 3 ...

  10. MFQPPDCS测试分析和测试设计框架l学习记录

    这几天在学习邰晓梅老师提出的MTQ-PPDCS测试框架,作为嵌入式软件测试从业人员,在测试框架学习过程中结合个人经历过的嵌入式软件测试项目,以思维导图形式梳理邰晓梅老师的框架理论,整理如下,希望通过进 ...

最新文章

  1. 一起学nRF51xx 16 -  adc
  2. 解决Silverlight中DataGrid在显示数据时多一空白列
  3. Vue简介及HelloWord编写
  4. php判断简写,怎么简写php 中的三元运算符
  5. vc mscomm串口通信使用了CButtonST按钮类软件分析
  6. OPEN SQL中通配符的使用
  7. python使用递归、尾递归、循环三种方式实现斐波那契数列
  8. 2013年7月3日星期三
  9. 安卓rom制作教程_Android ROM制作教程-开发必需
  10. 安卓24:Android关于日期和时间的几个相关控件DatePicker、TimePicker等
  11. 运放输入偏置电流方向_测试运算放大器的输入偏置电流
  12. Win11玩红警2突然就卡住不动?
  13. 大学计算机英语要求,2015级本科生大学英语、计算机分级考试要求.doc
  14. 【JAVAWEB开发】带你零基础学JAVA项目(二嗨租车项目篇)
  15. windows defender might impact performance
  16. 响应式布局之微软商城部分开发
  17. 我的视频拍摄和剪辑秘密|故宫
  18. Excel做一个类似QQ登录窗口
  19. ap计算机科学a 难吗,福利贴||AP计算机科学A并不难!下文视频带彩蛋哦
  20. 四川职业技术学院2021年计算机考纲,2021年关于公布四川省普通高校对口招生职业技能考试大纲的通知...

热门文章

  1. 服务器1U,2U的含义
  2. 元数据管理与数据质量保障
  3. vlog短视频_适用于Vlog或视频网络的20+ WordPress主题
  4. iPhone查询商品历史价格详细教程
  5. 易语言让我逆天改命--李长茂(紫川秀)————【Badboy】
  6. 通过STM32CubeMX实现LED闪烁——基于HAL库
  7. 利用Excel去除重复项
  8. vs code php终端输出中文乱码及环境配置解决办法
  9. activiti获取偏移量minx与miny
  10. “香港一卡通” 內地見證開戶