[Unity Mirror] Network Discovery
英文原文:
https://mirror-networking.gitbook.io/docs/components/network-discovery
假设你在一个朋友旁边。他以主持人模式开始游戏,而您想加入他。你的手机将如何定位他的?找出他的 IP 地址并不是很直观,也不是孩子们可以做的事情。
要解决此问题,您可以使用Network Discovery。当您的游戏开始时,它会在您当前的网络中发送一条消息,询问“是否有可用的服务器?”。同一网络内的任何服务器都会回复并提供有关如何连接到它的信息。
Mirror 附带了一个简单的网络发现实现,您可以在游戏中简单地使用它。它还为您提供了一种扩展它的方法,以便您可以在发现阶段传递其他数据。
包括 NetworkDiscovery 和 NetworkDiscoveryHUD 组件,或者您可以从 ScriptTemplate 制作自己的组件。
NetworkDiscovery 使用 LAN 上的 UDP 广播,使客户端能够找到正在运行的服务器并连接到它。
当服务器启动时,它会在 UDP 广播侦听端口上侦听来自客户端的请求,并返回客户端应用于其传输的连接 URI。
您可以使用 Active Discovery Interval 调整客户端发送请求以在几秒钟内找到服务器的频率。
必须将 Server Found 事件分配给处理程序方法,例如NetworkDiscoveryHUD 的 OnDiscoveredServer 方法。
在 NetworkDiscoveryHUD 中,应自动分配 NetworkDiscovery 组件。
快速入门
要使用网络发现,请执行以下步骤:
- 如果您还没有这样做,请使用 NetworkManager 创建一个游戏对象
- 不要添加 NetworkManagerHUD。 Discovery 具有不同的 UI 组件。
- 将 NetworkDiscoveryHUD 组件添加到 NetworkManager 游戏对象。NetworkDiscovery 组件将自动添加并连接到您的 HUD。
- 如果您还没有这样做,请将Player添加到 NetworkManager。
- 构建并运行独立版本
- 点击启动Host
- 在编辑器中启动播放模式,然后单击 Find Servers
- 编辑器应该找到独立版本并显示一个按钮
- 单击按钮以连接到它。
NetworkDiscoveryHUD 是作为一种简单快捷的入门方式提供的,但您可能希望将其替换为您自己的用户界面。
自定义Network Discovery
您可以通过添加自己的界面(通常基于 Unity UI)而不是默认的 NetworkDiscoveryHUD 来完全替换用户界面。您仍然需要 NetworkDiscovery 组件来完成繁重的工作。
有时您想在发现消息中提供更多信息。一些用例可能包括:
- 客户端可以显示服务器是处于 PvP 还是 PvE 模式
- 客户端可以显示服务器有多满。
- 客户端可以向每个服务器显示 ping,因此玩家可以选择最快的服务器
- 客户端可以显示语言
- 客户端可以显示服务器是否受密码保护
为此,我们提供了一个模板,因此从资产菜单中,单击Create > Mirror > Network Discovery.
这将在您的项目中创建一个脚本,其中包含 2 个空消息类和一个自定义 NetworkDiscovery 类,该类继承自 NetworkDiscoveryBase 并包含所有覆盖方法并为您记录。
消息类定义客户端和服务器之间发送的内容。只要您使用 Mirror 可以序列化的数据类型使您的消息保持简单,您就不需要为它们编写自定义序列化程序。
public class DiscoveryRequest : MessageBase
{public string language="en";// 为您希望客户端发送的任何信息添加属性// 在服务器将使用的广播消息中。
}public class DiscoveryResponse : MessageBase
{enum GameMode {PvP, PvE};// 你可能需要URI,以便客户知道如何连接到服务器。public Uri uri;public GameMode GameMode;public int TotalPlayers;public int HostPlayerName;// 为您希望服务器返回的任何信息添加属性// 客户端供他们显示或使用以建立连接。
}
自定义 NetworkDiscovery 类包含用于处理上述消息的覆盖。
您可能需要参考 Components/Discovery 文件夹中的 NetworkDiscovery.cs 脚本来了解如何实现这些。
public class NewNetworkDiscovery: NetworkDiscoveryBase
{#region Serverprotected override void ProcessClientRequest(DiscoveryRequest request, IPEndPoint endpoint){base.ProcessClientRequest(request, endpoint);}protected override DiscoveryResponse ProcessRequest(DiscoveryRequest request, IPEndPoint endpoint) {// TODO: Create your response and return it return new DiscoveryResponse();}#endregion#region Clientprotected override DiscoveryRequest GetRequest(){return new DiscoveryRequest();}protected override void ProcessResponse(DiscoveryResponse response, IPEndPoint endpoint){// TODO: a server replied, do something with the response such as invoking a unityevent}#endregion
}
[Unity Mirror] Network Discovery相关推荐
- [Unity Mirror] Network Manager
英文原文: https://mirror-networking.gitbook.io/docs/components/network-manager 网络管理器是用于管理多人游戏的网络方面的组件. ...
- Unity+Mirror实现虚拟现实下的多人连接
实现虚拟现实环境中的多人连接顾名思义分为两步,首先通过Mirror插件实现3D空间下的多人连接基础功能,其后调整虚拟现实相关内容,最后添加虚拟化身并进行匹配.本篇文章也将从以下三个方面依次完成(使用设 ...
- Unity + Mirror实现原创卡牌游戏局域网联机
资源下载地址 局域网联机插件 Mirror:Mirror | 网络 | Unity Asset Store 本地客户端测试多人游戏(不用打包)插件 : ParrelSync Mirror官方文档:Ge ...
- unity Mirror使用心得一(玩家角色创建,控制,及其攻击其他玩家的血量同步设置)
先分享下个人mirrordemo 的github : https://github.com/IsaWinding/MirrorDemo.git mirror 的官方下载地址: https://asse ...
- unity Mirror使用笔记
由于mirror的概念和API同已经弃用的unet很相似.同时mirror的文档在基础概念比较少,而且全英文.所以可以先从unet的官方文档开始入门.UNet mirror入门 1) 运行环境: 从A ...
- [Unity Mirror] FAQ
如何发送/同步自定义数据类型? Mirror 可以在编译脚本时自动为许多自定义数据类型创建序列化函数. 例如,mirror 会自动为 MyCustomStruct 创建一个函数,以便无需任何额 ...
- [Unity Mirror] 自定义角色生成
英文原文: https://mirror-networking.gitbook.io/docs/guides/gameobjects/custom-character-spawning 许多游戏需 ...
- [Unity Mirror] 作弊与反作弊
简介 早在 2009-2015 年,在从事 Mirror 和 uMMORPG 工作之前,我尝试通过对 MMO 进行逆向工程和出售Bots来谋生来了解 MMO.我将根据我们 Discord 中的问题 ...
- Unity + Mirror NetworkTransform 从客户端到服务器
开发多人同步项目时,物体Transform信息同步分为两种: Player(客户端自主控制,服务器广播,其他客户端刷新) NPC(自身带有AI逻辑,服务器广播其Transform.Animator属性 ...
最新文章
- day4 匿名函数、装饰器、生成器、迭代器、内置函数、 json 与 pickle 模块
- 微信公众号可快速创建“门店小程序” 不用开发
- Python程序设计题解【蓝桥杯官网题库】 DAY9-基础练习
- biztalk中的发送端口产生异常及处理(下)
- 区块链BaaS云服务(13)广州微链GGC全球游戏链(Global Game Chain)
- POJ 2187 凸包+旋转卡壳
- c语言图案问题,C语言绘图问题
- ffmpeg添加到环境变量_如何在Windows 10上下载和安装FFmpeg
- UGUI 与 Spine 的完美结合
- [转]Google发现的十大真理
- 20210308 20210309 :链表类题目合集
- c语言表达式语法问题,C语言表达式的语法图与语法检查
- 数据结构 图的邻接矩阵
- opencv img.shape
- DNS污染,配置DNS
- python 小说爬虫_初次尝试python爬虫,爬取小说网站的小说。
- 【观察】英特尔:视频行业最佳“合伙人”
- 智和网管工业交换机网管方案
- AI面部修复项目:GFP-GAN
- 【学习笔记】[省选联考 2023] 填数游戏
热门文章
- 【组合逻辑电路】如何从真值表中求解逻辑函数?
- 2021年中国官方储备资产规模及分布:外汇储备资产占94.84%[图]
- 真够色!这个AI项目让画师们激动中又透露着瑟瑟发抖!忍不住想尝试
- phpstudy_pro启动mysql后循环停止又重启
- 汶川地震它救过我们的命 十年后我们让全国人民爱上它
- zj-layout组件的布局
- 免费电子书下载网站,不来白嫖一波
- 执行service iptables status时报错
- Redis + Lua 实现 sorted set 集合保证固定数量的数据,并保留新数据剔除旧数据
- 在一家虚拟现实公司工作是什么感受?