英文原文:

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 组件。


快速入门

要使用网络发现,请执行以下步骤:

  1. 如果您还没有这样做,请使用 NetworkManager 创建一个游戏对象
  2. 不要添加 NetworkManagerHUD。 Discovery 具有不同的 UI 组件。
  3. 将 NetworkDiscoveryHUD 组件添加到 NetworkManager 游戏对象。NetworkDiscovery 组件将自动添加并连接到您的 HUD。
  4. 如果您还没有这样做,请将Player添加到 NetworkManager。
  5. 构建并运行独立版本
  6. 点击启动Host
  7. 在编辑器中启动播放模式,然后单击 Find Servers
  8. 编辑器应该找到独立版本并显示一个按钮
  9. 单击按钮以连接到它。

  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相关推荐

  1. [Unity Mirror] Network Manager

    英文原文: https://mirror-networking.gitbook.io/docs/components/network-manager   网络管理器是用于管理多人游戏的网络方面的组件. ...

  2. Unity+Mirror实现虚拟现实下的多人连接

    实现虚拟现实环境中的多人连接顾名思义分为两步,首先通过Mirror插件实现3D空间下的多人连接基础功能,其后调整虚拟现实相关内容,最后添加虚拟化身并进行匹配.本篇文章也将从以下三个方面依次完成(使用设 ...

  3. Unity + Mirror实现原创卡牌游戏局域网联机

    资源下载地址 局域网联机插件 Mirror:Mirror | 网络 | Unity Asset Store 本地客户端测试多人游戏(不用打包)插件 : ParrelSync Mirror官方文档:Ge ...

  4. unity Mirror使用心得一(玩家角色创建,控制,及其攻击其他玩家的血量同步设置)

    先分享下个人mirrordemo 的github : https://github.com/IsaWinding/MirrorDemo.git mirror 的官方下载地址: https://asse ...

  5. unity Mirror使用笔记

    由于mirror的概念和API同已经弃用的unet很相似.同时mirror的文档在基础概念比较少,而且全英文.所以可以先从unet的官方文档开始入门.UNet mirror入门 1) 运行环境: 从A ...

  6. [Unity Mirror] FAQ

    如何发送/同步自定义数据类型?   Mirror 可以在编译脚本时自动为许多自定义数据类型创建序列化函数.   例如,mirror 会自动为 MyCustomStruct 创建一个函数,以便无需任何额 ...

  7. [Unity Mirror] 自定义角色生成

    英文原文: https://mirror-networking.gitbook.io/docs/guides/gameobjects/custom-character-spawning   许多游戏需 ...

  8. [Unity Mirror] 作弊与反作弊

    简介   早在 2009-2015 年,在从事 Mirror 和 uMMORPG 工作之前,我尝试通过对 MMO 进行逆向工程和出售Bots来谋生来了解 MMO.我将根据我们 Discord 中的问题 ...

  9. Unity + Mirror NetworkTransform 从客户端到服务器

    开发多人同步项目时,物体Transform信息同步分为两种: Player(客户端自主控制,服务器广播,其他客户端刷新) NPC(自身带有AI逻辑,服务器广播其Transform.Animator属性 ...

最新文章

  1. day4 匿名函数、装饰器、生成器、迭代器、内置函数、 json 与 pickle 模块
  2. 微信公众号可快速创建“门店小程序” 不用开发
  3. Python程序设计题解【蓝桥杯官网题库】 DAY9-基础练习
  4. biztalk中的发送端口产生异常及处理(下)
  5. 区块链BaaS云服务(13)广州微链GGC全球游戏链(Global Game Chain)
  6. POJ 2187 凸包+旋转卡壳
  7. c语言图案问题,C语言绘图问题
  8. ffmpeg添加到环境变量_如何在Windows 10上下载和安装FFmpeg
  9. UGUI 与 Spine 的完美结合
  10. [转]Google发现的十大真理
  11. 20210308 20210309 :链表类题目合集
  12. c语言表达式语法问题,C语言表达式的语法图与语法检查
  13. 数据结构 图的邻接矩阵
  14. opencv img.shape
  15. DNS污染,配置DNS
  16. python 小说爬虫_初次尝试python爬虫,爬取小说网站的小说。
  17. 【观察】英特尔:视频行业最佳“合伙人”
  18. 智和网管工业交换机网管方案
  19. AI面部修复项目:GFP-GAN
  20. 【学习笔记】[省选联考 2023] 填数游戏

热门文章

  1. 【组合逻辑电路】如何从真值表中求解逻辑函数?
  2. 2021年中国官方储备资产规模及分布:外汇储备资产占94.84%[图]
  3. 真够色!这个AI项目让画师们激动中又透露着瑟瑟发抖!忍不住想尝试
  4. phpstudy_pro启动mysql后循环停止又重启
  5. 汶川地震它救过我们的命 十年后我们让全国人民爱上它
  6. zj-layout组件的布局
  7. 免费电子书下载网站,不来白嫖一波
  8. 执行service iptables status时报错
  9. Redis + Lua 实现 sorted set 集合保证固定数量的数据,并保留新数据剔除旧数据
  10. 在一家虚拟现实公司工作是什么感受?