Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Ayuda con UNET en Unity

Iniciado por edef_opk, Abril 19, 2016, 05:41:44 AM

Tema anterior - Siguiente tema
Abril 19, 2016, 05:41:44 AM Ultima modificación: Junio 13, 2016, 02:06:11 AM por pioj
Muy buenas gente, tengo una consulta para aquellos que hayan trabajado o hayan usado por curiosidad el UNET de Unity para hacer juegos online.
 
Mi consulta, es la siguiente: ¿Cómo puedo enviar un comando desde un cliente ajeno al servidor?
 
 
 
Me explico mejor, tengo un Player, que es el cliente. El cliente se llama Player y el script es Movement. Este tiene un collider que al tocar un objeto llama al comando que está en el servidor, pero no se como hacerlo. El servidor tiene un script que se llama Instancie, y esta en un objeto con el nombre de Instanciador.
 
Este cliente tiene que mandar un comando a un Script que está en el servidor.  El objeto Instancie, tiene la identidad de servidor, por lo que al entrar como cliente este objeto se deshabilita. Si pongo la identidad como local player, me dice "Trying to send command for object without authority" y no funciona el comando Spawn que tengo en el server.
 
 
 
No se si me explico o los he mareado. Resumiendo: Tengo un player A que es el cliente, y quiero que este active el script de un objeto B que se activa con el servidor. ¿Como puedo hacerlo?
 
El script funciona bien si uso el comando desde el Player que es el servidor, si lo uso desde el Player Cliente me dice: "Trying to send command for object without authority" 
 
 
 
Gracias de Antemano.
 
 
 
 



Abril 20, 2016, 02:27:38 AM #3 Ultima modificación: Abril 20, 2016, 02:29:22 AM por edef_opk
[quote author=pioj" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35681" data-ipsquote-contentcommentid="129876">Viene explicado en la documentación oficial: http://docs.unity3d.com/Manual/UNetMessages.html">http://docs.unity3d.com/Manual/UNetMessages.htmlhttp://answers.unity3d.com/questions/1016797/how-to-give-a-client-authority-over-an-object-in-u.html date=1461057461]http://answers.unity3d.com/questions/1016797/how-to-give-a-client-authority-over-an-object-in-u.html[/quote]Si leí la documentación o lo que poco que pude entender. Pero no encuentro lo que busco. El problema es que el GameObject en el que está el script se desactiva por ser sólo del servidor y ya no puedo acceder al Script. Si hay algo que entendes mejor de la documentación que yo, te agradecería si me explicas porque yo sigo sin entender.Es un cliente el que tiene que mandar un comando que está en el servidor, y la documentación explicar como mandar un comando del servidor al cliente.

Deberías entender que los comandos se ejecutan en el servidor, entonces cuando necesites información de un componente que se encuentra en (solo servidor) osea que los clientes tienen ese GameObject desactivado deberías de pedirlo por comando, el truco esta en enviar una referencia del cliente EJ.InformacionDelJuego <- Componente del Servidor (IJ)ClienteControl <- Componente de los Clientes (CC)Entonces para poder pedir desde CC a IJ la información deberías hacerlo por comandos, la solución.Creas un Comando que pida un ID de la estructura uint.
private void Cmd_GetInfoGame(uint IDClient)
{
    // *** ESTO SE EJECUTA EN EL SERVIDOR *** //
    //*** Buscas la informacion necesaria del componente IJ ***//
    // **Luego a travez del IDClient haces una busqueda de todos los compoentes
    Tipo CC y seleccionas el que tenga el mismo ID que el del parametro IDClient,
    de esta manera obtendras el Cliente que pidio la informacion al servidor
    Luego mediante una funcion le envias la informacion al cliente. *//
}
¿Se entiende?, de no ser así, te podría ayudar un poco mas.

[quote author=francoe1" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35681" data-ipsquote-contentcommentid="129927">Deberías entender que los comandos se ejecutan en el servidor, entonces cuando necesites información de un componente que se encuentra en (solo servidor) osea que los clientes tienen ese GameObject desactivado deberías de pedirlo por comando, el truco esta en enviar una referencia del cliente EJ.InformacionDelJuego <- Componente del Servidor (IJ)ClienteControl <- Componente de los Clientes (CC)Entonces para poder pedir desde CC a IJ la información deberías hacerlo por comandos, la solución.Creas un Comando que pida un ID de la estructura uint.
private void Cmd_GetInfoGame(uint IDClient){
    // *** ESTO SE EJECUTA EN EL SERVIDOR *** //
    //*** Buscas la informacion necesaria del componente IJ ***//
    // **Luego a travez del IDClient haces una busqueda de todos los compoentes
    Tipo CC y seleccionas el que tenga el mismo ID que el del parametro IDClient,
    de esta manera obtendras el Cliente que pidio la informacion al servidor
    Luego mediante una funcion le envias la informacion al cliente. *//
}
¿Se entiende?, de no ser así, te podría ayudar un poco mas.[/quote]Quedé mas mareado de lo que estaba.Creo que no tendría que haber intentado hacer un juego online. Si me podes explicar como si tuviese 5 años te lo agradecería. Ese comando lo agrego en el servidor, pero como accedo desde el cliente? Estoy haciendo un juego donde al chocar con una esfera, esta desaparece para spawnear otra. El problema es que hice un Pooling de objetos y necesito que al colisionar con una de estas bolas, el cliente le diga al servidor que haga un pooling de otra esfera. Por eso necesito acceder a un comando que se encuentra en otro script de otro gameobject.

Etiquetas: