首页 > 解决方案 > 在构建游戏上托管比赛时,Unity UNET 网络服务器未激活

问题描述

我正在使用 Unet 在 Unity 上开发多人游戏,当我通过在 Unity 编辑器上玩游戏来举办比赛时,一切都按预期进行,但是当我在构建的游戏上举办比赛时(通过单击“构建和运行游戏”运行”),网络功能不起作用。我不能很好地理解正在发生的事情,但我想我明白网络服务器在某种程度上处于非活动状态。这很奇怪,因为正如我之前所说,当我通过在 Unity 编辑器中玩游戏来主持比赛时,网络服务器会工作。

//这个函数产生一个敌人预制件

void Spawn()
   {
        GameObject enemy = Instantiate(enemyPrefab, spawnPoint.position, 
        spawnPoint.rotation);
        NetworkServer.Spawn(enemy);
    }

/* 这个函数在玩家脚本中,当敌人或敌人的子弹碰到玩家时,玩家会受到伤害 */

private void OnTriggerEnter2D(Collider2D hitInfo)
    {
        //Enemy enemy = hitInfo.GetComponent<Enemy>();
        if (hitInfo.tag == "Enemy" || hitInfo.tag == "EnemyBullet")
        {
            RpcTakeDamage(10, "hit by enemy");
        }
        //Instantiate(impactEffect, transform.position, transform.rotation);
    }

[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);
            }
        }

    }

/* 这个函数在子弹行为脚本中,当子弹碰到敌人时,敌人被摧毁。*/

private void OnTriggerEnter2D(Collider2D hitInfo)
    {
        playerMovement player = hitInfo.GetComponent<playerMovement>();

        if (hitInfo.tag == "Enemy")
        {
            player = FindObjectOfType<playerMovement>();
            player.bombPower = player.bombPower + UnityEngine.Random.Range(0.1f, 0.5f);

            if(hitInfo.tag == "Enemy")
            {
                //Enemy enemy = FindObjectOfType<Enemy>();
                //enemy.currentHealth -= damage;
                player.CmdEnemyShot(hitInfo.transform.name, this.transform.name); //change this.transform.name with the player's name
            }
        Destroy(gameObject);
    }

以下是一些错误消息:

/* 当一个玩家加入比赛时,我得到这个警告,我不明白什么命令不能发送,可能来自 NetworkBehaviour 类 */

"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." 

/* 当敌人的子弹击中 plyer 时,会出现此错误并且玩家无法受到伤害。*/

"RPC Function RpcTakeDamage called on client."

//这个警告也会出现

"Did not find target for sync message for 9"

//当一个敌人被击中时,敌人没有死,这个错误就会出现

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

如果您需要我的项目来理解,这里是链接。 代码可能有点混乱。

标签: c#unity3dunity3d-unet

解决方案


推荐阅读