En este momento estás viendo Cómo usar ClientRpc (o ServerRpc) en unity ¿Código de red para GameObject?

 – Unity

Cómo usar ClientRpc (o ServerRpc) en unity ¿Código de red para GameObject? – Unity

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

  1. El Objeto que tiene un Script derivado del NetworkBehaviour (porque estás usando RPC) debe tener un NetworkObject componente conectado a él.
  2. Si estás llamando al RPC de uno No propietario objeto, debe establecer el requireOwnership 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

Deja una respuesta