Estoy tratando de hacer un sistema inteligente de objetos utilizables.
Cuando el jugador se acerque a uno de los elementos utilizables, podrá presionar un botón y usar este elemento específico. todo funciona excepto la ejecución del comando use;
using UnityEngine; using Mirror; public class Usable : NetworkBehaviour { public void Use(GameObject[] allUsables, Player CurrentClient, GameObject[] vents = null) { if (CurrentClient.isLocalPlayer) { //this.GetComponent<NetworkIdentity>().AssignClientAuthority(CurrentClient.GetComponent<NetworkIdentity>().connectionToClient); switch (this.name) { case string name when name.Contains("EmergencyButton"): Debug.Log("Reached Log Point"); CmdEmergencyButton(); break; default: Debug.LogError("Not possible!"); break; } //this.GetComponent<NetworkIdentity>().RemoveClientAuthority(); } } [Command] private void CmdEmergencyButton() { RpcEmergency(); } [ClientRpc] private void RpcEmergency() { //Activates emergency button effect GameObject.Find("EmergencyButton").transform.GetChild(0).gameObject.SetActive(true); } }Y llamando a la función de uso así:
[Client] void ActivateUse() { if(isLocalPlayer) { Debug.Log("Client using"); //currUsables has all the nearby usable objects GameObject currentToUse = GameObject.Find(currUsables[0].name); //Using that object. currentToUse.GetComponent<Usable>().Use(allUsables, this, allVents); } } Desde el objeto del jugador.
Al llamar a CmdEmergencyButton() no sucede nada excepto esta advertencia en la consola;
Haga clic para ver la advertencia
Trying to send command for object without authority. Usable.CmdEmergencyButton UnityEngine.Logger:Log(LogType, Object) He intentado dar autoridad al cliente para usar el comando de este objeto (función de comentarios en uso) pero aún nada.
¿Alguna idea de por qué no funciona?