> 技术文档 > Unity 多人游戏框架学习系列十二

Unity 多人游戏框架学习系列十二


系列文章目录

unity知识点


文章目录

  • 系列文章目录
  • 前言
  • 一、NetworkClient
  • 二、NetworkConnection
  • 三、NetworkServer
  • 四、NetworkServerSimple
  • 壁纸分享
  • 总结

前言

书接上回,承接下回,一系列的。
博客将会介绍多人游戏学习。希望这篇博客对Unity的开发者有所帮助。
大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
欢迎点赞评论哦.下面就让我们进入正文吧 。


提示:以下是本篇文章正文内容,下面案例可供参考

Multiplayer 类参考

一、NetworkClient

NetworkClient 是一个高级 API 类,用于管理客户端服务器之间的网络连接,并能在客户端与服务器之间发送和接收消息。NetworkClient 类还有助于管理生成的网络游戏对象,以及远程过程调用消息和网络事件的路由。

属性 功能 serverIP 此客户端连接到的服务器的 IP 地址。 serverPort 此客户端连接到的服务器的端口。 connection 此 NetworkClient 实例正在使用的 NetworkConnection 游戏对象。 handlers 已注册消息处理程序函数的集合。 numChannels 已配置 NetworkTransport QoS 通道的数量。 isConnected 如果客户端已连接到服务器,则为 true。 allClients 激活状态 NetworkClient(静态)的列表。 active 如果任何 NetworkClient 处于激活状态(静态),则为 true。

二、NetworkConnection

NetworkConnection 是一个封装网络连接的高级 API 类。NetworkClient 对象拥有一个 NetworkConnection,而 NetworkServer 则拥有多个连接——每个客户端一个。NetworkConnection 具有发送字节数组或序列化对象作为网络消息的能力。

属性 功能 hostId The NetworkTransport hostId for this connection. connectionId 此连接的 NetworkTransport connectionId。 isReady 该标志用于控制是否将状态更新发送到此连接 lastMessageTime 在此连接上收到消息的最后时间。 address 此连接所连接到的端点的 IP 地址。 playerControllers 已使用 AddPlayer() 添加的玩家的集合。 clientOwnedObjects 此连接有授权的对象的集合。

NetworkConnection 类包含当数据发送到传输层或者从传输层接收数据时调用的虚拟函数。这些函数允许专用版本的 NetworkConnection 检查或修改此数据,甚至将数据路由到不同源。下面显示了这些函数,包括默认行为:
代码如下:

public virtual void TransportRecieve(byte[] bytes, int numBytes, int channelId){ HandleBytes(bytes, numBytes, channelId);}public virtual bool TransportSend(byte[] bytes, int numBytes, int channelId, out byte error){ return NetworkTransport.Send(hostId, connectionId, channelId, bytes, numBytes, out error);} 

这些函数的一个用例是记录传入和传出数据包的内容。以下是派生自 NetworkConnection 的 DebugConnection 类的示例,此类用于将数据包的前 50 字节记录到控制台。要使用这样的类,请在 NetworkClient 或 NetworkServer 上调用 SetNetworkConnectionClass() 函数。

class DebugConnection : NetworkConnection{ public override void TransportRecieve(byte[] bytes, int numBytes, int channelId) { StringBuilder msg = new StringBuilder(); for (int i = 0; i < numBytes; i++) { var s = String.Format(\"{0:X2}\", bytes[i]); msg.Append(s); if (i > 50) break; } UnityEngine.Debug.Log(\"TransportRecieve h:\" + hostId + \" con:\" + connectionId + \" bytes:\" + numBytes + \" \" + msg); HandleBytes(bytes, numBytes, channelId); } public override bool TransportSend(byte[] bytes, int numBytes, int channelId, out byte error) { StringBuilder msg = new StringBuilder(); for (int i = 0; i < numBytes; i++) { var s = String.Format(\"{0:X2}\", bytes[i]); msg.Append(s); if (i > 50) break; } UnityEngine.Debug.Log(\"TransportSend h:\" + hostId + \" con:\" + connectionId + \" bytes:\" + numBytes + \" \" + msg); return NetworkTransport.Send(hostId, connectionId, channelId, bytes, numBytes, out error); }}

三、NetworkServer

NetworkServer 是一个高级 API 类,可管理来自多个客户端的连接。

属性 功能 active 检查服务器是否已启动。 connections 来自客户端的所有当前连接的列表。 dontListen 如果启用此属性,则服务器将不会在常规网络端口上监听传入连接。 handlers 向服务器注册的消息处理程序的字典。 hostTopology 服务器使用的主机拓扑。 listenPort 服务器执行监听的端口。 localClientActive 如果本地客户端当前在服务器上处于活动状态,则为 true。 localConnections 服务器上的本地连接的列表。 maxDelay 在连接上发送数据包之前的最大延迟。 networkConnectionClass 创建新网络连接时要使用的类。 numChannels 为网络配置的通道数量。 objects 这是已在服务器上生成的联网对象的字典。 serverHostId 此服务器使用的传输层 hostId。 useWebSockets 此属性可使服务器监听 WebSocket 连接,而不是正常的传输层连接。

四、NetworkServerSimple

NetworkServerSimple 是一个高级 API (HLAPI) 类,可管理来自多个客户端的连接。NetworkServer 类负责处理游戏类型内容(比如生成、本地客户端和玩家管理器)而且有一个静态接口,而 NetworkServerSimple 类是一个纯网络服务器,无任何游戏相关功能。NetworkServerSimple 也没有任何静态接口或单例,所以在同一时间内,在一个进程中可存在多个实例。

NetworkServer 类在内部使用 NetworkServerSimple 的实例来进行连接管理。

属性 功能 connections 与远程客户端的活动连接的集合。这是一个稀疏数组,其中的 NetworkConnect 对象位于其 connectionId 的索引位置。对于最近关闭的连接,此数组中可能存在 null 值。位于索引零的连接可能是来自本地客户端的连接。 handlers 已注册消息处理程序函数的集合。 networkConnectionClass 要为新连接创建的 NetworkConnection 对象的类型。 hostTopology 此服务器用来配置传输层的主机拓扑对象。 listenPort 服务器执行监听的网络端口。 serverHostId 与此服务器实例相关联的传输层 hostId。

壁纸分享

Unity 多人游戏框架学习系列十二

总结

点关注不迷路哦。欲知后事如何,且听下回分解。
本次总结的就是这样的, 有需要会继续增加功能
如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢
你的点赞就是对博主的支持,有问题记得留言评论哦!
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!