Игроки в сетевой игре появляются в качестве клиента или сервера. - PullRequest
0 голосов
/ 11 июля 2019

Я работаю над многопользовательской игрой с использованием UNET.Каждый раз, когда я провожу матч, играя в игру в редакторе, каждый присоединяющийся игрок считается сервером, и игра работает так, как задумано.Если я веду матч, используя встроенную игру (без использования редактора Unity), каждый присоединяющийся игрок считается клиентом, и все они появляются в одной и той же позиции в сети, а также каждый раз, когда мой вражеский исследователь пытается создать врага.заранее, я получаю сообщение об ошибке.

Я действительно не могу понять, что происходит.

Я пробовал следовать другим учебникам в Интернете, но ничего не помогло.Я перечислю код и ошибки ниже.

// Чтобы проверить, является ли игрок клиентом или сервером, я написал этот код в скрипте настройки игрока:

"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 голосов
/ 11 июля 2019

Сводка ваших проблем:

"Попытка отправить команду для объекта без полномочий."

Вероятно, большая часть ваших ошибок связана с вашим источником.Ваш источник не является вашим игроком на сервере, и единственный элемент, обладающий авторитетом в сценах u-net, это серверный игрок.

Таким образом, у вас есть 2 варианта:функция на вашем плеере (которая, кстати, должна быть функцией [Command]!).Я предлагаю вам прочитать мой ответ на: Установленная шкала префаба не отображается правильно на клиенте

2. Переключите полномочия на сцене, где я предлагаю другой ответ для лучшего понимания: Проблема смещения полномочий неигрового объекта

Надеюсь, это поможет!

...