英文原文:

https://mirror-networking.gitbook.io/docs/components/network-manager

  网络管理器是用于管理多人游戏的网络方面的组件。

网络管理器功能包括:

  • 游戏状态管理
  • Spaw管理
  • 场景管理
  • 调试信息
  • 定制化

网络管理器入门

  网络管理器是多人游戏的核心控制组件。首先,在您的起始场景中创建一个空的游戏对象,然后添加网络管理器组件。新添加的网络管理器组件如下所示:

&esmp; 编辑器中网络管理器的 Inspector 允许您配置和控制与网络相关的许多事情。

&esmp; 注意:每个场景中只能有一个活动的网络管理器,因为它是单例的。不要将 Network Manager 组件放置在联网的游戏对象(具有 Network Identity 组件的游戏对象)上,因为 Mirror 在场景加载时会禁用这些。

&esmp; 如果您已经熟悉多人游戏开发,您可能会发现网络管理器组件完全使用 API 实现很有用,因此您也可以通过脚本获得它所做的一切。对于高级用户,如果您发现需要扩展 Network Manager 组件的功能,您可以使用脚本从 Network Manager 派生您自己的类,并通过覆盖它提供的任何虚函数挂钩来自定义其行为。然而,网络管理器组件将许多有用的功能封装到一个地方,并使创建、运行和调试多人游戏尽可能简单。


传输

  Mirror 使用一个单独的组件(派生自 Transport 类)通过网络进行连接。默认情况下,它是 Telepathy Transport。这种将传输分离成自己的组件的设计选择允许游戏开发人员选择最适合他们游戏需求的传输。更改传输就像换出网络管理器对象上的组件并将其分配给传输字段一样简单。

  传输可用于 TCP、UDP、WebGL 和 Steam。此外,还有一个 Multiplex 传输允许在服务器上同时使用两个传输,例如Telepathy 和 WebSockets,使桌面和浏览器播放器可以在同一台服务器上无缝地一起玩。有关详细信息,请参阅传输。


游戏状态管理

  网络多人游戏可以以三种模式运行 - 作为客户端、作为专用服务器或作为同时作为客户端和服务器的主机。

  如果您使用的是Network Manager HUD,它会根据玩家单击的按钮自动告诉网络管理器以哪种模式启动。如果您正在编写自己的 UI 以允许玩家开始游戏,则需要从您自己的代码中调用它们。这些方法是:

  • NetworkManager.StartClient
  • NetworkManager.StartServer
  • NetworkManager.StartHost


  无论游戏以哪种模式开始(客户端、服务器或主机),都会使用网络地址和传输端口属性。

  • 在客户端模式下,游戏会尝试连接到指定的地址和端口。完全限定域名fully-qualified domain name (FQDN) 也可用于网络地址,例如“game.example.com”。
  • 在服务器或主机模式下,游戏侦听指定端口上的传入连接,但不绑定到任何特定 IP 地址(它侦听所有可用的)。

Spawn Management

  使用网络管理器管理来自 Prefab 的网络游戏对象的生成(网络实例化)。


  大多数游戏都有一个代表玩家的 Prefab,因此网络管理器有一个 Player Prefab 插槽。您应该将此插槽分配给您的Player预制件。当您设置了玩家预制件时,会自动从该预制件中为游戏中的每个用户生成一个玩家游戏对象。这适用于托管服务器上的本地player和远程客户端上的远程player。在将其分配给此字段之前,您必须将Network Identity组件附加到 Player Prefab。

  一旦分配了 Player Prefab,您就可以作为主机启动游戏并查看玩家游戏对象的生成。停止游戏会销毁玩家游戏对象。如果您构建并运行游戏的另一个副本并将其作为客户端连接到 localhost,则网络管理器会显示另一个玩家游戏对象。当您停止该客户端时,它会销毁该玩家的游戏对象。

  除了 Player Prefab 之外,您还必须注册其他要在玩游戏期间使用 Network Manager 动态生成的 prefab。

  您可以将预制件添加到标记为 Registered Spawnable Prefabs 的检查器中显示的列表中。您还可以使用 ClientScene.RegisterPrefab 方法通过代码注册预制件。

  如果您有一个通过 Don’t Destroy On Load (DDOL) 在场景中持续存在的网络管理器,则需要将所有可能在任何场景中生成的预制件注册到它。如果您在每个场景中都有单独的网络管理器,则只需注册与该场景相关的预制件。


Start Positions

  默认情况下,网络管理器将在其定义的transform位置和旋转处生成 Player Prefab,但是 Player Spawn Method 属性允许您控制如何选择起始位置以及 Network Start Position 组件。

  • 选择随机以随机选择的 startPosition 选项生成玩家。
  • 选择 Round Robin 以循环通过设置列表中的 startPosition 选项。

  如果随机或循环模式不适合您的游戏,您可以使用代码自定义开始位置的选择方式。您可以通过列表 NetworkManager.startPositions 访问可用的网络起始位置组件,并且您可以使用网络管理器上的辅助方法 GetStartPosition,该方法可用于 OnServerAddPlayer 的实现中来查找起始位置。


场景管理

  大多数游戏都有不止一个场景。至少,除了实际玩游戏的场景之外,通常还有一个title scene 或开始 menu scene。网络管理器旨在以适用于多人游戏的方式自动管理场景状态和场景转换。

  Network Manager 检查器上有两个用于场景的插槽:离线场景和在线场景。将场景资源拖入这些插槽可激活联网场景管理。

  启动服务器或主机时,将加载在线场景。这便成为当前的网络场景。指示连接到该服务器的任何客户端也加载该场景。此场景的名称存储在 networkSceneName 属性中。

  当网络停止时,通过停止服务器或主机或客户端断开连接,加载离线场景。这允许游戏在与多人游戏断开连接时自动返回菜单场景。

  您还可以通过调用 ServerChangeScene 在游戏处于活动状态时更改场景。这使得所有当前连接的客户端也会更改场景,并更新 networkSceneName 以便新客户端也加载新场景。

  当网络场景管理处于活动状态时,任何对游戏状态管理函数(如 StartHost 或 StopClient)的调用都可能导致场景更改。这适用于运行时控制 UI。通过设置场景并调用这些方法,您可以控制多人游戏的流程。

请注意,场景更改会导致前一个场景中的所有游戏对象被销毁。

  您通常应该确保网络管理器在场景之间持续存在,否则网络连接会在场景更改时中断。为此,请确保在检查器中选中 Don’t Destroy On Load 复选框。但是,也可以在每个场景中使用不同的设置单独的网络管理器,如果您希望控制增量预制件加载或不同的场景转换,这可能会有所帮助。


Customization

  NetworkManager 类上有一些虚函数,您可以通过创建自己的继承自 NetworkManager 的派生类来自定义这些虚函数。在实现这些功能时,请务必注意默认实现提供的功能。例如,在 OnServerAddPlayer 中,必须调用函数 NetworkServer.AddPlayer 来激活玩家游戏对象以进行连接。

  为了使这更容易,我们制作了一组脚本模板,其中包含为您删除的所有覆盖。

[Unity Mirror] Network Manager相关推荐

  1. [Unity Mirror] Network Discovery

    英文原文: https://mirror-networking.gitbook.io/docs/components/network-discovery   假设你在一个朋友旁边.他以主持人模式开始游 ...

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

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

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

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

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

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

  5. Network Manager碰到的问题

    为什么80%的码农都做不了架构师?>>>    1.在Fedora 6上测试wifi驱动的时候发现,通过命令行的方式可以很快将sta连接到ap上,可是用Network Manager ...

  6. 修改Linux root用户名 后提示network manager启动失败修复

    vim /etc/passwd 按i键进入编辑状态 修改第1行第1个root为新的用户名 按esc键退出编辑状态,并输入:x保存并退出 vim /etc/shadow 按i键进入编辑状态 修改第1行第 ...

  7. unity EZ Replay Manager 1.53

    unity EZ Replay Manager 1.53 数据回放插件 经本人整理unity 2018 可以使用 有需要的同学可以来下载 下载地址

  8. Unity使用Package Manager管理自定义插件

    文章目录 前言 一.自定义插件流程 二.嵌入式程序包 1.简介 2.如何在unity中嵌入程序包 总结 前言 本文介绍Unity如何使用的Package Manager去构建自定义插件,主要介绍在开发 ...

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

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

最新文章

  1. 汇编 Irvine32链接库中一些过程函数的使用说明
  2. js中用tagname和id获取元素的3种方法
  3. Linux记录-CPU指标介绍
  4. 【leetcode】521. Longest Uncommon Subsequence I
  5. 探索SwitchYard 2.0.0.Alpha2快速入门
  6. iOS开发——高级篇——二维码的生产和读取
  7. 流媒体通信协议HLS与DASH的对比
  8. js图片前端压缩多图上传(旋转其实已经好了只是手机端有问题要先压缩再旋转)...
  9. android支付 form表单,支付宝小程序表单组件 表单·Form
  10. 深度学习与自然语言处理 主要概念一览
  11. FFmpeg总结(八)windows下用ffmpeg获取视频缩略图
  12. 阿里云郑晓:浅谈GPU虚拟化技术(第四章)
  13. 近世代数课后习题作业 1
  14. 2021-2027全球与中国11-氨基十一烷市场深度研究分析报告
  15. day04-硅谷课堂-前端基础知识(二)
  16. 终端/SSH/Telnet ConnectBot v1.7.1中文版
  17. Java分离中文姓名姓氏和名字
  18. win7下安装anaconda3
  19. 互转(经纬度、地心坐标、东北天坐标)
  20. 计算机科学报数学竞赛,(word)首届全校数学竞赛.doc

热门文章

  1. CentOS 7搭建Web服务器
  2. 渲染管线流程描述精简
  3. 终于完工!Linux学习路线最终版
  4. 环境变量及程序地址空间
  5. Python预测之美 数据分析与算法实战(二)
  6. 堂堂加上市背后:企业扎堆的敏捷化,并不是一条万能路
  7. imgaug增强边界框
  8. U盘文件或目录损坏且无法读取怎么修复
  9. 在58同城,白菜价能买到二手车吗?
  10. python 多线程多进程logging系统写入同一日志文件处理方法