Cómo usar ClientRpc (o ServerRpc) en unity ¿Código de red para GameObject?
– UnityAssets3Free
buenas , soy jorge y hoy os traigo
esta pregunta
Tengo problemas para entender cómo usar estos Rpc correctamente. A veces funcionan, a veces no. Ejemplo: tengo este objeto de juego que está en la escena (no instanciado en la conexión), llamado «Libro», tiene un script («SpellManager») por lo que cuando ambos jugadores se conectan, ambos tienen este objeto en su escena. Ahora, en este script de SpellManager, quiero que mi host/servidor cambie una variable de hechizo que colisiona. Digamos que tengo una variable «string newSpell», ¿cómo cambio esa variable en el lado del servidor y luego envío la información a los clientes? Intenté algo como esto (simplificado):
private string newSpell;
private void OnTriggerEnter(Collider other)
if (NetworkManager.Singleton.IsServer)
newSpell = "Earth";
testClientRpc(Time.frameCount, newSpell);
else
print("OnClient ");
[ClientRpc]
public void testClientRpc(int somenumber, string _newSpell)
newSpell = _newSpell;
Pero esto arroja un error en el servidor: NullReferenceException: Object reference not set to an instance of an object Unity.Netcode.NetworkBehaviour.get_NetworkManager () (at Library/PackageCache/[email protected]/Runtime/Core/NetworkBehaviour.cs:219)
y viene de _newSpell
variable que aparentemente es nula? Incluso intenté codificar newspell=»Earth» en ClientRpc, el mismo error. Un ejemplo/video sería muy apreciado, no pude encontrar nada similar
1 respuesta 1
- El Objeto que tiene un Script derivado del
NetworkBehaviour
(porque estás usandoRPC
) debe tener unNetworkObject
componente conectado a él. - Si estás llamando al
RPC
de uno No propietario objeto, debe establecer elrequireOwnership
opción a falso en las opciones de atributo, es decir[ServerRpc(requireOwnership = false)]
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
sin mas,hasta la proxima