Unity Mirror联网游戏开发(2) 网络游戏对象

842 阅读2分钟

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

网络游戏对象概述

网络游戏中,场景中的游戏对象分为两种。一种是在游戏期间不移动也不改变的游戏对象,比如障碍物,场景装饰物,建筑等等,或者虽然会移动或改变,但是和游戏玩法无关,比如随风摆动的树,天上飘动的云。这种对象称为非网络游戏对象。而另一类对象则需要在各个客户端之间同步它们的状态比如移动和改变动画,显然这类对象需要通过网络同步属性,因此称为网络游戏对象。Mirro的网络系统会管理和同步网络游戏对象,从而让各个客户端得到它们一致的状态,比如看到它们相同的移动,播放特定的动画,响应特定事件等等。当然虽然网络游戏对象的状态是共享的,各个客户端可以从它们自己的视角观察。

NetworkIdentity组件: Mirror中定义网络游戏对象

Mirror中的网络游戏对象,需要添加NetworkIdentity组件,这个组件是实现网络游戏对象同步的必要组件。该组件作为网络同步的基础,Mirror的Network Manager依靠这个组件去同步网络游戏对象的创建和销毁。可是仅仅靠NetworkIdentity组件,并不能同步对象的状态,因为这个组件并没有指定对象的哪些属性需要同步。

网络游戏对象的同步

同步什么?

网络游戏对象的同步,首先我们要知道需要同步哪些状态,这取决于游戏类型以及每个游戏对象的目的。比如游戏中的敌人,在一个动作游戏中,我们需要同步它们的位置,当前的动画,它们的血量等等;而同样是敌人,在一个战旗游戏中,我们可能需要同步的是它们需要执行的指令,它们的血量等信息,以及在棋盘中的位置,但动画可能并不需要同步,因为战旗游戏中会根据要执行的指令去播放相应的动画。总之,需要同步什么完全看游戏的玩法逻辑的需要。

Mirror提供的同步

  • 网络游戏对象的创建和销毁由NetworkManager负责
  • Network Transform组件可以同步对象的位置和旋转。
  • Network Animator组件可以同步游戏对象的动画。
  • 其他属性的同步,可以使用脚本实现。