欢迎光临散文网 会员登陆 & 注册

5.Unity-Mirror网络框架基础

2022-08-31 02:30 作者:机智的小草yns  | 我要投稿

简介:

Mirror是一个开源Unity网络框架,可用于快速开发联机项目。

Mirror项目地址::https://github.com/vis2k/Mirror

文档:https://mirror-networking.gitbook.io/docs/


官方提供了很多demo ,先从Tanks的demo入门。

打开项目的Tanks文件夹中的Scene,打包即可测试联机

Tanks

1.NetworkManager 

NetworkManager作为项目网络连接的核心。

NetworkManager的Inspector面版有两个比较核心的配置:

一是PlayerPrefab,当玩家连接成功时,生成的玩家对象。

二是OnlineScene,联网时的网络场景。


使用NetworkManager启动:

NetworkManager.StartClient(); //启动客户端

NetworkManager.StartHost(); //启动服务器

NetworkManagerStartHostClient(); //启动服务器&客户端


2.NetworkBehaviour介绍

NetworkBehaviour 作为网络对象的基本类 ,继承NetworkBehaviour的类可以接收和发送网络命令。

基本生命周期 :

OnStartServer()  //服务器端玩家启动时

OnStartLocalPlayer() //本地客户端启动时执行

OnStartClient() //客户端启动时执行

OnStopClient() //结束 或 断开连接时执行


3.NetworkBehaviour对象的网络交互方式

NetworkBehaviour中有两个主要使用的特性

[Command] :Client->Server , 标记在客户端通知服务端的方法。

[ClientRpc]:Server->Client (多个), 标记在服务端向客户端们转发的方法。


以Tanks中坦克开火例子


[Command]
void CmdFire()
 {

    //1. 在服务端中生成子弹

    GameObject projectile = Instantiate(projectilePrefab, position, transform.rotation);

    //2. 将生成的子弹 广播给玩家(玩家:指发射子弹的坦克)

    NetworkServer.Spawn(projectile);

    //3.将播放动画 广播给玩家

    RpcOnFire();
}

[ClientRpc]
void RpcOnFire()
{
    animator.SetTrigger("Shoot");
}


4.[Sycn] 值同步

类似于血量,攻击力之类是数值需要同步给多端时,可以使用[sync]标记在字段上。

当字段被sync]标记时, 相当于该字段被放于服务器上,服务器将会不断地把数值发送给客户端,达到值同步。

更改血量示例代码

[sync]

int Hp;

[Command]
void OnChangeHp(int change)

{

    Hp+=change

}

此外还可以利用hook做值变化监听,如

[SyncVar(hook =nameof(OnValueChange))]

int Hp;

void OnValueChange(int oldHp ,int newHp)

{

    Debug.Log($"血量变化{oldHp}->{newHp}");

}

5.一些常用的方法

通过netId查找对象

        NetworkIdentity.spawned[netId]

获取本地玩家

        NetworkClient.localPlayer

注册已生成对象到服务端

         NetworkServer.Spawn(player);

切换场景

        NetworkManager.singleton.ServerChangeScene("OtherScene");

授予Authority权限
        NetworkIdentity id = target.GetComponent<NetworkIdentity>();

        id.AssignClientAuthority(NetworkClient.localPlayer.connectionToClient);

    

6.其他

为了方便联机测试,可以使用

Unity多开插件:https://github.com/VeriorPies/ParrelSync/

个人联机Demo试玩: https://share.weiyun.com/19CVbJoU


5.Unity-Mirror网络框架基础的评论 (共 条)

分享到微博请遵守国家法律