当前位置: 首页 > news >正文

Unity-Mirror网络框架-从入门到精通之Mirror简介

文章目录

    • 前言
    • 什么是Mirror?
    • Mirror与其他网络框架的比较
      • Mirror vs Photon
      • Mirror vs FishNet
    • 和普通的CS服务器架构区别
    • 创建新项目并配置Mirror
    • 基本网络概念
    • 最后

前言

在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架,专为多人游戏开发设计。它使得开发者能够轻松实现网络连接、数据同步和游戏状态管理。本文将深入介绍Mirror的基本概念、如何与其他网络框架进行比较,以及如何从零开始创建一个使用Mirror的简单网络项目。
在这里插入图片描述

什么是Mirror?

Mirror是一个功能强大的Lite网络框架,旨在替代Unity的UNet网络解决方案。它提供了高效的多玩家架构、简单易用的API,以及良好的社区支持。Mirror特别适合快速开发小型到中型的多人在线游戏(MMO、第一人称射击、角色扮演游戏等),旨在简化网络游戏的开发流程。

MirrorNetworking GitHub

Mirror与其他网络框架的比较

在Unity中,有多种网络框架可供选择,最主要的包括Mirror、Photon和FishNet。以下是它们的比较:

Mirror vs Photon

Photon家族有Pun2,Fusion,Bolt等,虽然都很好用,但是只能在国外使用,而且除了试用,都是收费的。
收费模式:Photon采取按月付费的收费模式,根据连接数和使用的功能收费,而Mirror是完全开源且免费使用,适合预算有限的开发者。
功能特性:Photon提供一些现成的服务,例如房间匹配和实时聊天等,而Mirror在灵活性和可定制性方面更强,能够更好地满足开发者的特殊需求。
可扩展性:Mirror的代码是完全开源并且高度可扩展,开发者可以根据需要自定义核心功能和网络行为。而Photon的功能虽然丰富,但在某些方面可能受到平台的限制。

Mirror vs FishNet

性能:FishNet特别强调高性能支持,适合处理大量玩家并保持低延迟。Mirror在小到中型项目中表现良好,但在极端高并发的情况下可能需进行精细调优。
易用性:Mirror的API设计更加直观,适合新手开发者快速上手,而FishNet虽易用但有一些独特概念,学习曲线略高。
功能特性:FishNet提供了一些先进的网络功能,例如状态同步和组管理,适合复杂游戏的开发。Mirror则专注于提供更简洁且易于理解的功能实现。
社区与支持:Mirror的社区相对较大,文档和资源丰富,而FishNet虽然相对较新,但社区正在快速发展,有不断增加的支持和资料。

和普通的CS服务器架构区别

  1. 架构设计
    普通客户端-服务器架构:
    自定义实现:开发者需要从头开始设计和实现客户端与服务器之间的通信协议,包括数据传输、连接管理、状态同步等。
    服务器责任:服务器通常扮演着权威角色,负责管理游戏状态、逻辑处理和玩家间的通信。开发者需要手动实现所有功能。
    使用网络框架(如Mirror、Photon、FishNet):
    现成的基础设施:这些框架提供了现成的组件和API,使得网络通信、状态同步和房间管理等功能的实现更加简单和高效。
    抽象层次:框架通常会提供更高层次的抽象,让开发者可以专注于游戏逻辑,而不是底层网络实现。

  2. 开发效率
    普通客户端-服务器架构:
    开发周期较长:由于需要从零开始实现通信和管理机制,开发时间和成本较高。
    维护复杂性:项目维护较为困难,需要开发者持续跟踪网络问题和性能瓶颈。
    使用网络框架:
    快速开发:框架提供的工具和功能显著减少了开发时间,让开发者能够更快地构建和迭代游戏。
    更易维护:网络框架通常会随着开发者社区的反馈进行更新和优化,降低了维护难度。

  3. 性能和扩展性
    普通客户端-服务器架构:
    性能取决于实现:游戏性能高度依赖于开发者的实现,可能面临低效的网络协议和数据处理造成的性能瓶颈。
    扩展性问题:扩展功能或处理高并发玩家时,可能需要重新设计架构,增加开发工作量。
    使用网络框架:
    优化和性能提升:框架通常会考虑到性能优化,通过如数据压缩、连接池等技术提高性能,支持多用户并发。
    灵活的扩展性:许多框架具有良好的可扩展性,开发者可以方便地添加新功能或者调整现有功能。

  4. 网络管理
    普通客户端-服务器架构:
    手动管理连接:需要手动处理玩家连接、断开连接、心跳检测等,这可能导致容易出现问题。
    复杂的错误处理:需要自己实现重连机制和错误处理逻辑,增加了开发难度。
    使用网络框架:
    自动管理:框架会负责处理连接的建立和维护,简化开发者的工作。
    内置错误处理:大部分框架内置了错误处理和重连机制,减少了开发者需要关注的细节。

  5. 功能特性
    普通客户端-服务器架构:
    功能实现依赖开发者:所有功能(如房间管理、玩家同步、聊天功能)都需要由开发者在C/S双端自行实现,工作量较大。
    使用网络框架:
    丰富的功能:网络框架通常提供了现成的功能,如房间创建与管理、玩家状态同步、实时通信等,可以直接调用,降低了开发门槛。

创建新项目并配置Mirror

下面是如何创建一个新的Unity项目并配置Mirror的步骤:

下载并安装Unity:确保你已经安装了最新版本的Unity。

创建新项目:

打开Unity Hub,点击“新建项目”。
选择适合你项目的模板(例如2D或3D),输入项目名称并点击“创建”。
下载并导入Mirror网络库:
在这里插入图片描述
在Hierarchy面板中,右键点击空白处,选择“Create Empty”创建一个空对象,并命名为“NetworkManager”。
在Inspector面板中,点击“Add Component”,添加“NetworkManager”和“NetworkManagerHUD”组件。这样,你就可以使用Mirror提供的基本网络功能。
在这里插入图片描述

实现简单的客户端-服务器结构
要实现一个简单的客户端-服务器结构,可以按照以下步骤进行配置:

添加玩家预制体:

创建一个简单的玩家角色模型,并在其上添加“NetworkIdentity”组件,以确保网络同步。
创建一个用于玩家控制的脚本Player,并继承自Mirror的“NetworkBehaviour”,你可以在其中定义玩家的控制逻辑。

在这里插入图片描述

修改NetworkManager:
在NetworkManager组件中,将玩家预制体拖入“Player Prefab”字段。
在这里插入图片描述

在“NetworkManagerHUD”中,你将能够看到开始服务器和连接客户端的按钮。
运行程序:
在这里插入图片描述
点击“Start Server”以启动一个纯服务器。
点击“Start Host”以启动 服务器 加 客户端。
点击“Start Client” 是启动一个客户端,连接到一个已有 服务器。

如果都设置完毕,你就可以看到自己的Payer在场景中了

基本网络概念

在使用Mirror进行多人游戏开发时,理解基本网络概念是至关重要的。以下是一些核心概念:

  • 网络对象(Network Objects):在Mirror中,任何需要在网络中同步的对象都应该是网络对象。它通过“NetworkIdentity”组件进行标识。

  • 命令(Commands):命令是从客户端发送到服务器的函数调用。通过在脚本中使用[Command]属性,你可以定义客户端请求服务器执行特定操作。

  • 远程过程调用(RPC):RPC是从服务器调用客户端的方法,这可以通过[ClientRpc]属性实现。它允许服务器向所有连接的客户端发送信息。

  • 同步变量:使用[SyncVar]属性,你可以在客户端和服务器之间同步变量的状态。一旦在服务器上更改,所有连接的客户端都会收到更新。

  • 网络管理器(NetworkManager):这是管理与网络相关的所有活动的核心组件,例如启动和停止服务器、处理玩家连接及断开。

最后

通过掌握这些基本概念,你将能够更高效地使用Mirror进行多人游戏的开发。

以上就是对Mirror网络框架的简单介绍与使用指南,希望这篇博客可以帮助到你在Unity中实现多人游戏的开发。如果你有任何问题或建议,欢迎在评论区留言!


http://www.mrgr.cn/news/82092.html

相关文章:

  • 【Vim Masterclass 笔记01】Section 1:Course Overview + Section 2:Vim Quickstart
  • 25年1月更新。Windows 上搭建 Python 开发环境:PyCharm 安装全攻略(文中有安装包不用官网下载)
  • Spring MVC 的@GetMapping和@PostMapping和@PutMapping
  • 大带宽服务器和普通服务器相比较的优势
  • 浅谈Beam Search
  • JUnit注解,枚举
  • Linux(13)——网络概述
  • NLP模型工程化部署
  • Mybatis 为什么不需要给Mapper接口写实现类,为什么要使用代理而不是硬编码?
  • 数据库的概念和操作
  • day22-YUM与开源项目(Web运维)
  • 我的JAVA-Web进阶--Mybatis
  • ES elasticsearch-8.17.0-windows-x86_64使用
  • vue3学习笔记(11)-组件通信
  • 【阅读笔记】《基于区间梯度的联合双边滤波图像纹理去除方法》
  • STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
  • 深度学习blog-Transformer-注意力机制和编码器解码器
  • UE5材质节点BumpOffset
  • GDPU Vue前端框架开发 跨年大礼包
  • Linux(Centos 7.6)基础命令/常用命令说明
  • Linux系统
  • Log4j2的Policies详解、SizeBasedTriggeringPolicy、TimeBasedTriggeringPolicy
  • matlab-数字滤波器设计与实战
  • ESP-IDF学习记录(4) ESP-IDF examples目录
  • 【SQLi_Labs】Basic Challenges
  • 某网站手势验证码识别深入浅出(全流程)