Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 58,34€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales
Sign in to follow this  
naxo

Evento Compartido por varios GameObjects

Recommended Posts

Hola!, intento aprender y ver como aplicar eventos en unity,

y tengo un caso particular que quizas no estoy entendiendo bien:

en pantalla hay 4 objetos, cada uno con el tipico script para poder moverlo por pantalla (Drag.cs), es decir el mismo script para los 4, todo normal.

Cuando esos objetos se mueven, dependiendo de cual se mueva, sucede otra cosa, bien, hasta ahora lo habia hecho cambiando una variable _nombre , que se comprobaba a traves de un IF, dentro de un Update(), pero quiero hacerlo mejor usando eventos.

 

De modo que se me a ocurrido que como los eventos pueden mandar argumentos, crear un evento unico ( onCornerMove ), que manda una variable string (this.name), tal como se ve en la imagen, de modo que ( yo suponia ) que cada objeto dispararia el evento con su propio nombre como argumento,

pero no es asi, solo lo manda uno y el resto da NullReference (es como si solo registrase el evento uno de ellos, quizas el ultimo en aparecer en memoria o algo asi ), 

supongo que estoy entendiendo mal los eventos y que deberia haber un evento distinto para cada objeto? en cuyo caso habria 4 versiones del script Drag.cs...

gracias!!

 

 

Captura.JPG

Share this post


Link to post
Share on other sites

Primero, no compruebas que al evento esté suscrito otro objecto o no. Eso significa que el evento se lanza sin nadie suscrito a él, dando el null. Comprueba si OnCornerMove es null o no (suscrito) antes de lanzarlo.

Dos, el controller solamente busca un objeto de tipo Drag, si tienes 4, tienes que suscribirte a los 4 para que cada uno te lance el evento de manera independiente.

Share this post


Link to post
Share on other sites
12 hours ago, iRobb said:

Primero, no compruebas que al evento esté suscrito otro objecto o no. Eso significa que el evento se lanza sin nadie suscrito a él, dando el null. Comprueba si OnCornerMove es null o no (suscrito) antes de lanzarlo.

Dos, el controller solamente busca un objeto de tipo Drag, si tienes 4, tienes que suscribirte a los 4 para que cada uno te lance el evento de manera independiente.

Gracias iRobb,

osea que un evento ha de tener subscriptores antes de ser....creado? inicializado?  <-- EDITO, vale, te refieres a cuando se ejecuta el evento, en este caso dentro de la funcion onMouseDown, ok

y a la segunda cuestion, si, tengo 4 objetos compartiendo un mismo script, supongo que a efectos de memoria hay 4 instancias del script drag.cs verdad?

entonces como se podria hacer para que un mismo evento ( el tipico ejemplo de los enemigos que comparten el script "recibir daño" por ejemplo ), envie parametros distintos? (enemigo1, enemigo2....) 

que para este caso mio seria exactamente lo mismo

gracias tios!

Edited by naxo

Share this post


Link to post
Share on other sites

Cuando se ejecute tiene que existir como mínimo un suscriptor. No se inicializa ni se crea.

Ya estás enviando parámetros distintos. Envías this.name por ejemplo, que será distinto en cada objeto (a menos que les hayas puesto el mismo nombre, aunque a nivel de instancia será distinto). Deberías mirarte el tema de eventos y delegados en C#, ya que es mucho más potente y ordenado. Al principio es complicado de entender aunque cuando lo consigas te darás cuenta de la potencia que tiene.

Un vídeo de ejemplo. Hay muchos:

 

 

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...