Итак, как следует из названия, у меня проблема, когда команды, отправляемые клиентом, не запускаются.
Основная функциональность, которую я пытаюсь заставить работать, заключается в том, что когда враг находится перед игроком и я нажимаю, этот игрок будет на мгновение оглушен. Отлично работает, если я хост, и обе стороны прекрасно регистрируются.
Если я играю как клиент, я дохожу до момента, когда команда «должна» быть отправлена, но я замечаю, что получаю предупреждение, в котором говорится: «Попытка отправить команду для нелокального игрока». Кроме того, ничего не происходит на обоих концах. Очевидно, я должен делать что-то неправильное на стороне клиента, но понятия не имею, как это сделать.
Код «проблемы».
if (Input.GetButtonDown("Fire1")) {
Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hit = new RaycastHit();
Physics.Raycast(ray, out hit, 20f);
if (hit.transform != null) {
if (hit.rigidbody != null) {
PlayerController controller = hit.rigidbody.GetComponent<PlayerController>();
if (controller != null) {
if (!controller.stunned) {
// Send the stun command to the server
controller.CmdStun();
}
}
}
}
}
Метод вызывает
[Command]
public void CmdStun() {
// Report that the stun was sent
UnityEngine.Debug.Log("Stun Sent");
RpcStun();
}
[ClientRpc]
public void RpcStun() {
// Activate the stun timer.
stunTimer.Start();
// Track the players original color.
normalColor = manager.color;
// Make the players bot look like its shut down.
manager.InitiateColorChange(Color.black);
// Other code will check against this before trying to send another stun command.
stunned = true;
}
Редактировать: По запросу здесь два сценария целиком.
Конфигурация игрока в единстве:
https://gyazo.com/400c5b3a95c1a58f9b6e930b0c3c853b
https://gyazo.com/c17a7317767a00e2150ff34b03a03e8f
https://gyazo.com/322731aefbe69f9567d2b395523b8f2a
Полное предупреждающее сообщение
Попытка отправить команду не локальному игроку. UnityEngine.Networking.NetworkBehaviour:SendCommandInternal(NetworkWriter, Int32, String) PlayerController:CallCmdStun() ObjectInteractor:Update() (в Assets/Scripts/ObjectInteractor.cs:58)