Unity Mirror联网游戏开发(1) 基本概念

1,952 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

Mirror介绍

Mirror是Unity的一个联网游戏插件,它的出现是由于Unity放弃了UNet,Mirror的开发者最开始是为了兼容UNet,后来发展成独立的Mirror项目。网络代码库可以分为Lowe Level API, Middle Level API和High Level API。而Mirror主要是提供High Level API接口。即提供一系列的网络组件,以及同步变量,Command, RPC等功能。使用Mirror开发时,服务端和客户端逻辑是写在一个工程里面的,只是通过不同的组件以及标志进行区分,哪些对象属于server,哪些操作是server执行,哪些是client执行。这种做法对于使用一个客户端作为主机的游戏特别友好,因为不需要写专门的服务器项目了。当然,Mirror也支持写独立服务器。总之,Mirror属于高层网络库,隐藏了网络通讯同步的细节,方便我们开发联网游戏。

基本概念

Server,Host和Client

众所周知,网络游戏需要有服务器和客户端,而一般支持局域网对战的游戏,还有主机Host的概念。Host是指其中一个客户端同时作为Server,这个客户端被称为Local Client,而其他的客户端是远程连接的,被称为Remote Client,如下图所示:

image.png 在Host进程中即包含server又包含local client,local client和server之间通讯是通过直接的函数调用以及消息队列实现的,因为它们属于同一个游戏实例,即同一个进程。并且local client和server还共享了scene。而remote client和server之间通讯是通过网络连接,Mirror自动处理了底层的网络通讯,使用KCP等协议。

Spawn系统

Mirror中使用Spwan系统在服务器上生成对象。而spawn操作会触发各个客户端创建游戏对象。spawn系统管理游戏对象的生命周期,并且负责同步对象的状态。

Player

Player是对网络游戏中各个客户端所控制的玩家角色的抽象,其中当前客户端上自己控制的对象称为Local player。玩家只能控制local player。

Network Authority

Authority即授权,表示游戏对象是由server控制还是client控制。默认状态下,所有的game objects都是由server控制的,而玩家控制的game object只是一种特殊情况,此时称为本地授权(local authority),比如玩家使用手柄控制自己的角色行动,则自己的角色这个game object就是本地授权的。

Mirror中的基本组件概览

Network Manager

Network Manager组件管理整个游戏的网络逻辑,功能包括:

  • 游戏状态管理
  • Spawn管理
  • 场景管理
  • 调试
  • 自定义功能

Network Identity

该组件用于标识一个网络游戏对象,赋予这个对象一个唯一的ID。

Network Behaviour

这是Mirror中最常用的组件,具有该组件的物体可以向服务器发送命令,执行RPC,以及使用同步变量(SyncVars)。

Network Transform

该组件用于同步game object的位置,旋转和缩放。使用这个组件可以轻松实现位置同步,并且支持平滑过渡以应对延迟和丢包。