У меня есть вражеские объекты, созданные сервером. Когда они получают удар, вызывается функция для нанесения урона. Я не могу переместить или переименовать эту функцию, так как она является частью пакета ресурсов 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]?