Return to Video

Events - Unity Official Tutorials

  • 0:00 - 0:02
    Los Events (eventos) son unos delegates especializados
  • 0:02 - 0:04
    que son útiles para cuando usted quiere alertar
  • 0:04 - 0:06
    a otras clases que algo sucedió.
  • 0:06 - 0:08
    En práctica usted verá que los eventos
  • 0:08 - 0:12
    funcionan muy similar a los public multicast delegates.
  • 0:13 - 0:15
    Para más información acerca de delegates
  • 0:15 - 0:17
    ver la lección de delegates en el enlace abajo.
  • 0:19 - 0:22
    Un evento se puede pensar como un sistema de broadcast (difusión).
  • 0:22 - 0:24
    Cualquier clase que esté interesada en un evento
  • 0:24 - 0:26
    puede subscribir métodos a este.
  • 0:27 - 0:29
    Cuando esa situación específica ocurra,
  • 0:29 - 0:32
    como un click de un botón, o un power-up o una herida al jugador
  • 0:32 - 0:34
    nosotros invocamos nuestro evento y este de vuelta
  • 0:34 - 0:37
    llama los métodos de las clases suscritas.
  • 0:38 - 0:40
    Aquí nosotros tenemos una escena con 2 orbs.
  • 0:41 - 0:44
    Un orb tiene un script llamado TeleportScript
  • 0:44 - 0:47
    mientras que el otro tiene un script llamado TurnColorScript.
  • 0:47 - 0:51
    Adjuntado a nuestra cámara está el EventManagerScript.
  • 0:51 - 0:54
    Un evento se puede hacer para cualquier situación.
  • 0:54 - 0:57
    Pero en este ejemplo nosotros queremos invocar un evento
  • 0:57 - 0:59
    cuando el jugador haga click en un botón
  • 0:59 - 1:01
    que estamos dibujando a la pantalla.
  • 1:02 - 1:04
    En nuestro administrador de eventos (event manager) nosotros podemos ver
  • 1:04 - 1:06
    que hemos creado un tipo de delegate
  • 1:06 - 1:08
    que llamaremos ClickAction.
  • 1:09 - 1:12
    Podemos ver que cualquier método que desea estar subscrito
  • 1:12 - 1:16
    no debe tomar parámetros ni tener un tipo de retorno de void.
  • 1:17 - 1:20
    Luego nosotros creamos nuestra variable de evento.
  • 1:20 - 1:23
    Nosotros hacemos esto con la palabra clave Event.
  • 1:24 - 1:26
    Tenga en cuenta que esta variable también es estática
  • 1:26 - 1:28
    por la que podemos utilizar afuera de la clase
  • 1:28 - 1:31
    sin instanciar un objeto de esta clase.
  • 1:33 - 1:36
    Nuestra variable evento, que llamamos OnClicked
  • 1:36 - 1:39
    es el tipo de delegate que hemos creado arriba.
  • 1:40 - 1:43
    La única cosa es que la clase es responsable de
  • 1:43 - 1:45
    llamar el evento cuando la situación
  • 1:45 - 1:47
    apropiada suceda.
  • 1:47 - 1:49
    Como hemos mencionado antes,
  • 1:49 - 1:51
    nosotros llamaremos esto incluso cuando el jugador
  • 1:51 - 1:52
    haga click en un botón.
  • 1:52 - 1:56
    Por lo tanto, este script tiene un método OnGUI
  • 1:57 - 1:59
    Dentro del método OnGUI
  • 1:59 - 2:01
    nosotros hemos creado un botón en nuestra pantalla.
  • 2:01 - 2:03
    Cuando el jugador le hace click al botón
  • 2:03 - 2:06
    nosotros utilizamos una variable de evento como si fuera una función.
  • 2:07 - 2:09
    Esto en efecto invoca nuestro evento.
  • 2:11 - 2:13
    Por favor tenga en cuenta que como cualquier otro delegate
  • 2:13 - 2:15
    este causa un error si invocamos un evento
  • 2:15 - 2:17
    sin que tenga suscriptores.
  • 2:17 - 2:19
    Por lo tanto, siempre tenemos que asegurarnos
  • 2:19 - 2:21
    que el evento no sea igual a null
  • 2:21 - 2:23
    antes de invocarlo.
  • 2:24 - 2:26
    Si usted se acuerda de los 2 orbs en nuestra
  • 2:26 - 2:29
    escena, estos tienen 2 scripts diferentes adjuntos.
  • 2:29 - 2:31
    Estos 2 scripts van a funcionar como suscriptores
  • 2:31 - 2:33
    a este evento.
  • 2:33 - 2:35
    Miremos esto ahora.
  • 2:37 - 2:39
    En el TeleportScript nosotros hemos
  • 2:39 - 2:41
    creado un método llamado Teleport.
  • 2:41 - 2:43
    Este es el método al cual estaremos subscribiendo
  • 2:43 - 2:46
    al evento que hemos creado en el administrador de eventos (event manager).
  • 2:47 - 2:50
    Usted se dará cuenta que el método Teleport toma ningún parámetro
  • 2:50 - 2:52
    y tiene un tipo de retorno void,
  • 2:52 - 2:54
    como nuestro delegate.
  • 2:54 - 2:56
    El método Teleport es responsable del
  • 2:56 - 2:59
    posicionamiento del objeto de manera aleatoria a lo largo del eje Y.
  • 3:00 - 3:02
    Cerca de la parte superior de nuestro script
  • 3:02 - 3:05
    nosotros tenemos un método llamado OnEnable.
  • 3:05 - 3:07
    Este es un método integrado que será llamado
  • 3:07 - 3:09
    cuando el objeto que tiene este script
  • 3:09 - 3:12
    adjuntado es creado o habilitado en una escena.
  • 3:13 - 3:15
    Nosotros utilizaremos este método para subscribir nuestro
  • 3:15 - 3:18
    método Telport al evento OnClicked
  • 3:18 - 3:21
    del EventScript.
  • 3:21 - 3:23
    Podemos ver que subscribimos un método
  • 3:23 - 3:25
    a un evento utilizando el operador +=.
  • 3:26 - 3:29
    Al subscribir un método a un evento
  • 3:29 - 3:31
    nos estamos asegurando que cuando ese evento ocurra
  • 3:31 - 3:33
    nuestro método será llamado.
  • 3:34 - 3:38
    Luego nosotros tenemos un método OnDisable.
  • 3:38 - 3:40
    Opuesto al método OnEnable,
  • 3:40 - 3:42
    el método OnDisable es llamado cuando
  • 3:42 - 3:45
    un objeto es desactivado o destruido en una escena.
  • 3:46 - 3:48
    Dentro del método OnDisabled
  • 3:48 - 3:51
    nosotros estamos anulando la suscripción de nuestro método al evento.
  • 3:51 - 3:53
    Nosotros subscribimos un método de un evento
  • 3:53 - 3:56
    utilizando el operador -=.
  • 3:57 - 3:59
    Esto nos va asegurar que nuestro método no se
  • 3:59 - 4:01
    llame más cuando un evento ocurra.
  • 4:02 - 4:04
    Este paso es bastante importante
  • 4:04 - 4:06
    y el fallo de hacer esto puede llevar a pérdidas
  • 4:06 - 4:08
    de memoria y errores en nuestro juego.
  • 4:09 - 4:11
    Una buena regla es que cuando usted suscriba
  • 4:11 - 4:13
    un método a un evento usted debe
  • 4:13 - 4:16
    también cancelar una suscripción correspondientes.
  • 4:17 - 4:19
    Nuestro TurnColorScript
  • 4:19 - 4:22
    está estructurado muy similar a nuestro TeleportScript.
  • 4:23 - 4:26
    En este caso nosotros tenemos un método llamado TurnColor
  • 4:26 - 4:28
    que no toma parámetros y tiene un tipo
  • 4:28 - 4:30
    de retorno void.
  • 4:30 - 4:32
    El método TurnColor
  • 4:32 - 4:35
    vuelve el material del objeto en un color aleatorio.
  • 4:36 - 4:38
    Nuevamente, nosotros tenemos los métodos OnEnable
  • 4:38 - 4:40
    y OnDisable.
  • 4:41 - 4:43
    Esta vez, estos están suscribiendo
  • 4:43 - 4:45
    y anulando la suscripción de nuestro método TurnColor
  • 4:45 - 4:47
    del evento.
  • 4:48 - 4:50
    Vale la pena tener en cuenta en otro momento
  • 4:50 - 4:52
    que anulando la suscripción de nuestro método de un evento
  • 4:52 - 4:54
    es fundamental para utilizar eventos adecuadamente
  • 4:54 - 4:56
    y prevenir errores en nuestro código.
  • 4:57 - 5:00
    De vuelta en Unity nosotros podemos correr nuestra escena.
  • 5:00 - 5:02
    La primera cosa para tener en cuenta es el botón
  • 5:02 - 5:04
    que aparece cerca de la parte superior.
  • 5:04 - 5:06
    Cuando se haga click a este botón, se a invocará nuestro evento
  • 5:06 - 5:09
    y llamará los métodos Teleport y TurnColor.
  • 5:09 - 5:11
    Nosotros podemos hacer click en el botón múltiples veces
  • 5:11 - 5:15
    y cada vez los métodos suscriptores serán llamados.
  • 5:16 - 5:18
    Como podemos ver, nuestro administrador de eventos (event manager)
  • 5:18 - 5:20
    solamente necesita preocuparse acerca del evento en sí
  • 5:20 - 5:23
    y los factores desencadenantes al evento.
  • 5:23 - 5:25
    No necesitaba saber acerca del TeleportScript,
  • 5:25 - 5:27
    o el TurnColorScript.
  • 5:27 - 5:31
    Del mismo modo, el TeleportScript y TurnColorScript
  • 5:31 - 5:33
    no necesitaba saber acerca del otro.
  • 5:34 - 5:36
    De esta manera nosotros somos capaces de crear
  • 5:36 - 5:39
    un sistema de broadcast (difusión) muy robusto y flexible.
  • 5:40 - 5:42
    Usted se podría estar preguntando por qué utilizamos una variable
  • 5:42 - 5:45
    estática de evento en vez de una variable pública delegate
  • 5:45 - 5:47
    en nuestro administrador de eventos (event manager)?
  • 5:47 - 5:50
    La verdad es que usted puede lograr la misma
  • 5:50 - 5:53
    funcionalidad de eventos con variables públicas de delegates.
  • 5:54 - 5:57
    De hecho, como hemos mencionado al principio de esta lección,
  • 5:57 - 6:00
    los eventos son simplemente delegates especializados.
  • 6:00 - 6:02
    La razón por la cual nosotros utilizamos eventos sobre
  • 6:02 - 6:05
    variables públicas delegate para situaciones como esta
  • 6:05 - 6:07
    es que los eventos tienen una seguridad inherente
  • 6:07 - 6:09
    dónde las variables delegate no tienen.
  • 6:09 - 6:11
    Con eventos las otras clases
  • 6:11 - 6:14
    solamente se pueden suscribir y des-suscribir.
  • 6:14 - 6:18
    Si nosotros fuéramos a utilizar una variable pública delegate más bien
  • 6:18 - 6:20
    otras clases podrían invocar o
  • 6:20 - 6:22
    anular nuestra variable delegate para hacer
  • 6:22 - 6:24
    todo tipo de cosas nefastas.
  • 6:24 - 6:27
    En términos generales, si usted quiere crear un sistema de
  • 6:27 - 6:31
    métodos dinámicos que involucra más de 1 clase,
  • 6:31 - 6:34
    utilice variables de tipo evento más bien de variables delegate.
Title:
Events - Unity Official Tutorials
Description:

more » « less
Video Language:
English
Duration:
06:37

Spanish subtitles

Revisions