Unity3D, почему мой клиент не может вызвать метод cmd? - PullRequest
0 голосов
/ 13 января 2019

Моя проблема: у меня есть игрок, который включает в себя объект оружия, а мой объект оружия включает в себя следующий скрипт:

private void FixedUpdate()
{
    AutomaticFirearmShoot();
}


public void AutomaticFirearmShoot()
{
    if (Input.GetButton("Fire1") && Time.time > _nextFire)
    {
        _nextFire = Time.time + _fireRate;      
        _player.GetComponent<NetworkShootManager>().CmdShoot();

    }

}

Мой корневой проигрыватель также включает этот скрипт:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class NetworkShootManager : NetworkBehaviour
{
private void Update()
{
    if (!isLocalPlayer)
    {
        return;
    }
}

[Command]
public void CmdShoot()
{

   Debug.Log("shooting");

}


}

Поэтому, когда я собираю игру, только хост-игрок может вызывать метод CmdShoot.

Кроме того, у моего плеера есть компонент идентификации сети.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

UNet использует Удаленные действия для выполнения вызовов на сервере и на клиентах. В вашем случае вы используете [Command], который выполняет вызов на сервере. Вам придется использовать. [ClientRpc] звонить по клиентам. но помните, клиент не может звонить другим клиентам без прохождения через сервер. Так что вам придется использовать метод [Command], который затем вызывает [ClientRpc].

Кроме того, компонент сетевого менеджера Unitys позволяет хосту становиться как клиентом, так и сервером, поэтому хост сможет видеть все вызовы сервера и тому подобное, в то время как другие клиенты не будут.

0 голосов
/ 13 января 2019

Вы должны быть готовы сделать это, используя Networking.NetworkBehaviour.isServer (это устарело).

Реализация может выглядеть примерно так:

[Command]
public void CmdShoot()
{

   if(!isServer)
       return; // If this is not being executed by the hoster then exit the method call.

   Debug.Log("shooting");

}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...