网络游戏中的玩家都作为客户端或服务器生成

时间:2019-07-11 10:45:05

标签: c# unity3d networking unity3d-unet

我正在使用UNET进行多人游戏。每次我通过在编辑器中玩游戏进行比赛时,每个加入的玩家都被视为服务器,游戏将按预期进行。如果我通过使用内置游戏(而不是Unity编辑器)主持比赛,则每个加入的玩家都被视为客户端,他们都在相同的网络产生位置产生,并且每次我的敌人产生者尝试实例化敌人时预制,我收到一条错误消息。

我真的不明白发生了什么事。

我尝试了在线其他教程,但没有帮助。 我将在下面列出代码和错误。

//要检查玩家是客户端还是服务器,我在// player设置脚本中编写了以下代码:

"if (isServer)
  Debug.Log("server");
 else
 Debug.Log("Client");"

///此代码用于播放器脚本中,当被//敌人的子弹击中时被损坏

private void OnTriggerEnter2D(Collider2D hitInfo)
    {
        if (hitInfo.tag == "Enemy" || hitInfo.tag == "EnemyBullet")
        {
            RpcTakeDamage(10, "hit by enemy");
        }
    }

[ClientRpc]
    public void RpcTakeDamage(int _amount, string _sourceID)
    {
        if (!isHit)
        {
            StartCoroutine("HurtColor");
            currentHealth -= _amount;

    Debug.Log(transform.name + " now has " + currentHealth + " health ");

            if (currentHealth <= 0)
            {
                Die(_sourceID);
            }
        }

    }

/// Die函数到目前为止只是破坏了玩家的游戏对象

///当我加入由内置游戏托管的游戏时出现这些错误

"Network configuration mismatch detected. The number of networked scripts on the client does not match the number of networked scripts on the server. This could be caused by lazy loading of scripts on the client. This warning can be disabled by the checkbox in NetworkManager Script CRC Check."

"CRC Local Dump PlayerSetup : 0"

"Trying to send command for object without authority."

///当游戏由内置游戏托管并且每位玩家都被视为客户端时,每当我的敌人生成器尝试生成敌人时,就会发生这种情况 //敌人的预制件仍会生成并按预期移动

"SpawnObject for EnemyUpRight(Clone) (UnityEngine.GameObject), NetworkServer is not active. Cannot spawn objects without an active server." 

///当敌人的子弹击中玩家时,错误不会显示,而是显示错误

"RPC Function RpcTakeDamage called on client."

1 个答案:

答案 0 :(得分:0)

您的问题的摘要是

  

“尝试未经授权就发送对象的命令。”

最大的错误可能来自您的生成器。您的生成器不是服务器播放器,在u-net场景上唯一具有权限的元素是服务器播放器。

因此,您有2个选择:

  1. 尝试将生成功能放在播放器上(顺便说一下,它应该是[Command]功能!)。建议您阅读有关以下内容的答案:Instantiated prefab scale is not displayed correctly on client

2。切换现场权限,在此我提出了另一个更好理解的答案:Problem in authority shifting of non-player object

希望有帮助!