Unity UNet Lobby 的一些测试信息

Unity UNet Lobby 的一些测试信息

测试简介

测试Unity Unet相关的一些机制。包括客户端身份判断,同步变量,Cmd函数,Rpc函数和Lobby连接断开机制

测试前提

1.LobbyController脚本在LobbyPlayer预设体上,继承了NetworkBehaviour。该预设体在客户端加入大厅后自动创建。(有几个玩家创建几个)。并且该预设体的NetworkIdentity权限设置为LocalPlayerAuthority。
2.大厅和游戏场景都只会有两个玩家。一个作为主机(服务端+客户端),一个作为客户端。
3.还有一些辅助测试脚本,此处略。
4.这里的所有测试Cmd,Rpc都没有加权限限制。

开始测试

测试1:(测试客户端身份判断)

在LobbyController脚本上分别判断isServer,isClient
因为有两个角色,所有会有两个LobbyPlayer,一个是LocalPlayer,一个是RemotePlayer

客户端身份判断 测试如下表:

判断的内容主机方客户端方
isServerLocal : √
Remote : √
Local : ×
Remote : ×
isClientLocal : √
Remote : √
Local : √
Remote : √

测试2:(测试修改了同步变量的情况)

LobbyController脚本中有一个 [SyncVar] 同步变量:[SyncVar] int value = 50;
主机和客户端都可以更改该同步变量的值(值+1)。
⑴.没有Cmd请求服务器同步,单纯各自操作同步变量。
⑵.有Cmd请求服务器同步:修改值通过Cmd请求服务器改变同步变量。

测试如下表:

测试的内容主机方客户端方
启动后的值Local : 初始化设置的值50
Remote : 初始化设置的值50
⑴.如果主机的值未变:
Local : 初始化设置的值50
Remote : 初始化设置的值50
⑵.如果主机的值变了:
Local : 初始化设置的值50
Remote : 主机变了的值51
如果通过主机修改值Local : 值变成了51
Remote : 值变成了51
Local : 值变成了51
Remote : 值变成了51
如果通过客户端修改值Local : 值不变50
Remote : 值不变50
Local : 值变成了51
Remote : 值变成了51
如果通过客户端修改值
(通过Cmd请求服务端修改同步变量)
Local : 值不变50
Remote : 值变成了51
Local : 值变成了51
Remote : 值变成了51

测试3:(测试调用了Cmd函数后的执行情况)

LobbyController脚本中有一个 [SyncVar] 同步变量:[SyncVar] int value = 50;
主机和客户端都可以更改该同步变量的值(值+1)。
都是通过Cmd函数请求服务器改变同步变量。
    [Command]
    void CmdValue(){
        value++;
    }

测试如下表:

测试的内容主机方客户端方
主机调用Cmd函数Local : 执行Cmd 值变成了51
Remote : 执行Cmd 值变成了51
Local : 没执行Cmd 值变成了51
Remote : 没执行Cmd 值变成了51
客户端调用Cmd函数Local : 没执行Cmd 值没变50
Remote : 执行Cmd 值变成了51
Local : 没执行Cmd 值变成了51
Remote : 没执行Cmd 值变成了51

测试4:(测试调用了Rpc函数后的执行情况)

LobbyController脚本中有一个 [SyncVar] 同步变量:[SyncVar] int value = 50;
主机和客户端都可以更改该同步变量的值(值+1)。
都是通过Rpc函数改变同步变量。
    [ClientRpc]
    void RpcValue(){
        value++;
    }

测试如下表:

测试的内容主机方客户端方
主机调用Rpc函数Local : 执行Rpc 值变成了51
Remote : 执行Rpc 值变成了51
Local : 执行Rpc 值变成了51
Remote : 执行Rpc 值变成了51
客户端调用Rpc函数Local : 没执行Rpc 值没变50
Remote : 没执行Rpc 值没变50
报错:RPC Function xxxx called on client
Local : 没执行Rpc 值变成了51
Remote : 没执行Rpc 值变成了51

测试5:(测试调用了Cmd函数后,Cmd函数再调用Rpc函数的执行情况)

LobbyController脚本中有一个 [SyncVar] 同步变量:[SyncVar] int value = 50;
主机和客户端都可以更改该同步变量的值(值+1)。
都是通过Cmd函数调用Rpc函数,来改变同步变量。
    [Command]
    void CmdValue(){
        RpcValue();
    }
    [ClientRpc]
    void RpcValue(){
        value++;
    }

测试如下表:

测试的内容主机方客户端方
主机调用Rpc函数Local : 执行Cmd 执行Rpc 值变成了51
Remote : 执行Cmd 执行Rpc 值变成了51
Local : 执行Rpc 没执行Cmd 值变成了51
Remote : 执行Rpc 没执行Cmd 值变成了51
客户端调用Rpc函数Local : 没执行Cmd 没执行Rpc 值没变50
Remote : 执行Cmd 执行Rpc 值变成了51
Local : 执行Rpc 没执行Cmd 值变成了51
Remote : 没执行Cmd 没执行Rpc 值变成了51

测试6:(测试主机和客户端连接断开的情况)

主机和客户端目前已经在局域游戏中
主机和客户端都可以从游戏场景返回大厅或退出
myLobbyManager 为 NetworkLobbyManager的实例
    // 返回大厅
    public void OnClickBack(){
        myLobbyManager.SendReturnToLobby ();
    }
    // 退出
    public void OnClickCancel(){
        if (isServer) {
            myLobbyManager.StopHost ();
        } else {
            myLobbyManager.StopClient ();
        }
    }

测试如下表:

测试的内容主机方客户端方
主机点击返回(客户端还在游戏中)主机返回了大厅,准备状态为false客户端跟随主机返回大厅,准备状态为false
客户端点击返回(主机还在游戏中)主机跟随客户端返回了大厅,准备状态为false客户端返回了大厅,准备状态为false
主机点击退出(客户端还在游戏中)主机返回大厅,从连接中断开客户端跟随主机返回大厅,从连接中断开
客户端点击退出(主机还在游戏中)主机不影响客户端返回大厅,从连接断开。如果主机还在游戏,则无法再加入主机。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值