Unity多人联机框架Mirro学习记录(一)
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学习记录(一)相关推荐
- SSM框架入门学习记录
SSM框架入门学习记录 //项目结构 在这里插入图片描述 在这里插入图片描述 包名多种多样,命名习惯问题. 流程:Controller(接受请求)-->Service(biz)(bl)(写业务函 ...
- scrapy框架菜鸟学习记录
scrapy框架菜鸟学习记录 scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.其可以应用在数据挖掘,信息处理或储存历史数据等一系列的程序中.其最初是为了页面抓取(更确切的说,网络抓 ...
- Unity游戏优化(第2版)学习记录8
Unity游戏优化[第二版]学习记录8 第8章 掌握内存管理 一.Mono平台 1.垃圾回收 2.内存碎片 3.运行时的垃圾回收 4.多线程的垃圾回收 二.代码编译 三.分析内存 1.分析内存消耗 2 ...
- Unity多人联机的实现
实现多人联机的方法有几种,具体取决于你的具体需求.以下是一些选项: Unity Multiplayer:Unity有自己的内置网络解决方案,称为Unity Multiplayer(以前称为UNET). ...
- unity多人联机插件_别在纠结“后端”开发了,联机小游戏还可以这样做!
本篇文章要感谢「银笑的尤里」从 9月28日腾讯云深圳「游戏开发的超"音""速"」沙龙发来了重磅消息,下面 Shawn 重点介绍对个人开发者惊喜的"MG ...
- unity多人联机插件_Unity Multiplayer多人联网全新升级
Unity作为全球开发者信赖的开发平台,也为大家提供了包括Unity Ads广告.Analytics分析.Performance Reporting性能报告及Multiplayer多人联网等在内的多个 ...
- unity多人联机插件_Unity3D多人协作开发环境搭建
多人协作 说到多人协作开发,大家都会想到要使用版本控制工具来管理项目,当然最常用的要数SVN和Git了,但是SVN管理Unity3D项目的确有一些不尽人意的地方. 比如:两个人修改了同一个场景,SVN ...
- unity多人联机插件_Mirror ---Unity多人联机游戏API(一)
Mirror是Unity 商店的资源: https://assetstore.unity.com/packages/tools/network/mirror-129321 Mirror是 high l ...
- Unity 3D官方教程——Adventure Game学习记录
1.Interactable System: 1.Picture Interactable:Player走到SecurityRoom墙前的那张画 2.Fish Interactable鱼档前的交互 3 ...
- MFQPPDCS测试分析和测试设计框架l学习记录
这几天在学习邰晓梅老师提出的MTQ-PPDCS测试框架,作为嵌入式软件测试从业人员,在测试框架学习过程中结合个人经历过的嵌入式软件测试项目,以思维导图形式梳理邰晓梅老师的框架理论,整理如下,希望通过进 ...
最新文章
- 一起学nRF51xx 16 - adc
- 解决Silverlight中DataGrid在显示数据时多一空白列
- Vue简介及HelloWord编写
- php判断简写,怎么简写php 中的三元运算符
- vc mscomm串口通信使用了CButtonST按钮类软件分析
- OPEN SQL中通配符的使用
- python使用递归、尾递归、循环三种方式实现斐波那契数列
- 2013年7月3日星期三
- 安卓rom制作教程_Android ROM制作教程-开发必需
- 安卓24:Android关于日期和时间的几个相关控件DatePicker、TimePicker等
- 运放输入偏置电流方向_测试运算放大器的输入偏置电流
- Win11玩红警2突然就卡住不动?
- 大学计算机英语要求,2015级本科生大学英语、计算机分级考试要求.doc
- 【JAVAWEB开发】带你零基础学JAVA项目(二嗨租车项目篇)
- windows defender might impact performance
- 响应式布局之微软商城部分开发
- 我的视频拍摄和剪辑秘密|故宫
- Excel做一个类似QQ登录窗口
- ap计算机科学a 难吗,福利贴||AP计算机科学A并不难!下文视频带彩蛋哦
- 四川职业技术学院2021年计算机考纲,2021年关于公布四川省普通高校对口招生职业技能考试大纲的通知...