Синхронизация работоспособности без сервера Unet для игроков - PullRequest
0 голосов
/ 07 мая 2018

У меня есть вражеские объекты, созданные сервером. Когда они получают удар, вызывается функция для нанесения урона. Я не могу переместить или переименовать эту функцию, так как она является частью пакета ресурсов Unity, в котором много взаимосвязанных частей. Я не могу нанести урон от атакующего по той же причине.

Теперь у меня есть то, что я беру локального игрока, использую его для отправки сообщения на сервер ([Command]), и сервер наносит урон врагу на всех клиентах.

Это кажется плохим способом сделать это. Есть ли способ, кроме [Command], отправить сообщение на сервер для выполнения функции?

Примечание: я не могу вызвать [Команду] напрямую от врага, поскольку это не объект авторизации игрока. Вот соответствующий код:

Enemy:

[ClientRpc]
public void RpcTakeDamage(vDamage damage)
{
    base.TakeDamage(damage);
}

override public void TakeDamage(vDamage damage)
{
    if (!isServer)
    {
        vThirdPersonController.instance.GetComponent<NetworkLocalPlayer>().CmdTakeDamage(damage, gameObject.name);
        return;
    }
    RpcTakeDamage(damage);
}

На объекте игрока:

[Command]
public void CmdTakeDamage(vDamage damage, string ai)
{
    GameObject.Find(ai).GetComponent<v_AIController>().TakeDamage(damage);
}

public void damageNetworkEnemy(vDamage damage, GameObject ai)
{
    CmdTakeDamage(damage, ai.name);
}

Мой вопрос: есть ли лучший способ сделать это без поиска и прохождения объекта игрока? Способ отправить сообщение серверу без использования [Command]?

1 Ответ

0 голосов
/ 09 мая 2018

Команды - единственный способ для клиента связаться с сервером. Однако вы могли бы передать инстансид сети этого врага, который был бы намного лучшим способом ссылки на объект. Gameobject.find очень медленный и его всегда следует избегать. Еще одним улучшением было бы дать противнику ссылку на своего местного игрока после появления, чтобы ему не приходилось искать его каждый раз, когда он получает удар. Надеюсь, это немного поможет.

...