Sei sulla pagina 1di 12

UNITY ENGINE

Orden de Ejecución de Funciones de Evento

En el scripting de Unity, hay un número de funciones de evento que no son ejecutadas


en el orden predeterminado como un script ejecuta. Este orden de ejecución es descrito
abajo:

Editor

 Reset: El reset es llamado para inicializar las propiedades de script cuando es por
primera vez adjuntado al objeto y también cuando el comando Reset es utilizado.

First Scene Load (Cuando carga la primera escena)

Estas funciones son llamadas cuando la escena comienza (una para cada objeto en la
escena).

 Awake: Esta función siempre se llama antes de cualquier función Start y también justo
después de que un prefab es instanciado. (Si un GameObject está inactivo durante el
comienzo, Awake no es llamado hasta que se vuelva activo)
 OnEnable: (solamente es llamado si el Objeto está activo): Esta función es llamada
justo después de que el objeto es activado. Esto sucede cuando una instancia de
MonoBehaviour es creada, tal como cuando un nivel es cargado o un GameObject con
un componente script es instanciado.
 OnLevelWasLoaded: Esta función es ejecutada para informarle al juego que un nuevo
nivel ha sido cargado.

Tenga en cuenta que para todos los objetos agregados a la escena, las funciones Awake
y OnEnable para todos los scripts serán llamados antes de que Start, Update, etc sean
llamados en cualquiera de ellos. Naturalmente, esto no se puede lograr cuando un objeto
es instanciado durante el gameplay.

Antes de la actualización del primer frame

 Start: Start es llamado antes de la primera actualización de frame solo si la instancia


del script está activada.

Para objetos agregados a la escena, la función Start será llamada en todos los scripts
antes que Update , etc sean llamadas para cualquier de ellos. Naturalmente, esto no
puede suceder cuando un objeto es instanciado durante gameplay.

Entre frames

 OnApplicationPause: Esto es llamado al final del frame dónde la pausa es detectada,


efectivamente entre actualizaciones de frame normales. Un frame extra será
despachado después de que OnApplicationPause sea llamado para permitirle al juego
mostrarle gráficas que indican el estado pausado.
Update Order (Orden de Actualización)

Cuando usted hace seguimiento de la lógica de juego y las interacciones, animaciones,


posiciones de cámara, etc., hay unos eventos diferentes que usted puede utilizar. El
patrón común es realizar la mayoría de tareas dentro de la función Update , pero
también hay otras funciones que usted puede utilizar.

 FixedUpdate: FixedUpdate a veces es más llamada que Update. Puede ser


llamada varias veces por frame, si la velocidad de frame es baja y puede no ser
llamada entre frames en absoluto si la velocidad de frame es alta. Todos los
cálculos de física y actualizaciones ocurren inmediatamente después de
FixedUpdate. Cuando aplique cálculos de movimiento dentro de FixedUpdate,
usted no necesita multiplicar sus valores por Time.deltaTime. Esto se debe a
que FixedUpdate en un temporizador fiable, independiente de la velocidad de
frames.
 Update: Update se llama una vez por frame. Es la función principal para las
actualizaciones de frames.
 LateUpdate: LateUpdate es llamada una vez por frame, después de que
Update haya finalizado. Cualquier cálculo que sea realizado en Update será
completado cuando LateUpdate comience. Un uso común para LateUpdate
sería una cámara de tercera persona que sigue. Si usted hace que su personaje se
mueva y gire, Update, usted puede realizar todos los cálculos de movimientos
de cámara y rotación en LateUpdate. Esto asegurara que el personaje haya sido
movido completamente antes de que la cámara haga un seguimiento a su
posición.

Rendering (Renderización)

 OnPreCull: Llamado antes de que la cámara corte (culls) la escena . Culling determina
qué objetos son visibles a la cámara. OnPreCull es llamado justo antes de que el culling
tome lugar.
 OnBecameVisible/OnBecameInvisible: Llamado cuando un objeto se vuelve
visible/invisible a cualquier cámara.
 OnWillRenderObject: Se llama una vez por cada cámara si el objeto es visible.
 OnPreRender: Llamado antes de que la cámara comience a renderizar la escena.
 OnRenderObject: Llamado después de que toda la renderización regular de la escena
es hecha. Usted puede utilizar la clase GL o Graphics.DrawMeshNow para dibujar una
geometría personalizada en este punto.
 OnPostRender: Llamado después de que una cámara finalice de renderizar la escena.
 OnRenderImage: Llamado después de que la renderización de escena esté completa
para permitirle un post-procesamiento de la imagen de la pantalla, ver ImageEffects.
 OnGUI: Llamado múltiples veces por frame en respuesta a los eventos GUI. El Layout y
los eventos de Repaint son procesado primero, seguidos por un evento de Layout y de
teclado/mouse para cada evento de input.
 OnDrawGizmos Utilizado para dibujar Gizmos en la vista de escena por propósitos de
visualización.
Coroutines (Corrutinas)

Actualizaciones normales de Coroutines (corrutinas) son ejecutadas después del return


que hace la función Update. Una coroutine es una función que puede suspender su
ejecución (yield) hasta que la YieldInstruction finalice. Diferentes usos de Coroutines:

 yield La coroutine va a continuar después de que todas las funciones Update hayan
sido llamadas en el siguiente frame.
 yield WaitForSeconds Continúa después de un retraso de un tiempo específico,
después de que todas las funciones Update hayan sido llamadas para el frame
 yield WaitForFixedUpdate Continua después de que todos los FixedUpdate hayan sido
llamadas en todos los scripts.
 yield WWW Continúa después de que una descarga WWW haya sido completada
 yield StartCoroutine Encadenada la coroutine, y va a esperar para que la coroutine
MyFunc haya sido completado primero.

Cuando el Objeto es Destruido

 OnDestroy: Esta función es llamada después de que todas las actualizaciones de frame
para el último frame de la existencia del objeto (el objeto puede ser destruido en
respuesta a Object.Destroy o al cerrarse la escena).

Cuando Salga

Estas funciones son llamadas en todos los objetos activos en su escena:

 OnApplicationQuit: Esta función es llamada en todos los game objects antes de que se
salga de la aplicación. En el editor es llamada cuando el usuario para el modo de
reproducción. En el web player (Reproductor web) es llamada cuando la vista de web
es cerrada.
 OnDisable: Esta función es llamada cuando el comportamiento se vuelve inactivo o
deshabilitado.

Diagrama de Flujo del Ciclo de Vida de Script

El siguiente diagrama resume el orden y repetición de funciones de evento durante la


vida de script.
Tipos de Datos, Campos, Variables, Propiedades o
Parametros
De Valores:

o Int
o String
o Float
o Bool
o Double
o Char
o Struct (compuestos)
 Vector 2
 Vector 3
 Vector 4
 Cuaternions
 Color
 Array
 List
 Diccionarios

De Referencias:

 Clases
o GameObjec
o Componenent
o Etc.

Ejemplo de Composición de Estructuras, Clases y Herencia en


Unity
Nota:

 En unity cada scritpt es una clase (y a la vez un objeto y componente).


 Las propiedades de referencia (ejemplo: transform, rigidbody, camera,
amimation, audio, collider se refieren al componente asociado a ese gameobject
y dichas referencias deben ser asignadas antes de acceder a ellas, de lo contario
dara error debido a que el direccionamiento no existe.
 Por tanto, las variables de valor se asignan directamente.

GameObject, Componentes y Prefabs


 GameObject:
o Es una instancia de la clase del mismo nombre.
o Un GameObject es un contenedor para muchos Components distintos
o El GameObject es el tipo de objeto más importante en Unity. Es bien
importante entender qué es un GameObject, y cómo puede ser usado.
o Herede de la clase objetos.
o Es cualquier elemento que compone la escena o está presente en ella, por tanto
es la clase base para todas las entidades de la escena.
o Esta conformados de un numero de componentes (por lo menos uno el cual es
el transform, ya que es necesario que se pueda ubicar en escena).
Los GameObjects son objetos fundamentales en Unity que representan personajes, props, y el
escenario. Estos no logran nada por sí mismos pero funcionan como contenedoras para
Components, que implementan la verdadera funcionalidad.

Un GameObject siempre tiene el componente Transform adjunto (para representar la


posición y orientación) y no es posible quitar esto. Los otros componentes que le dan al
objeto su funcionalidad pueden ser agregados del menú Component del editor o desde
un script. También hay muchos objetos útiles pre-construidos (figuras primitivas,
cámaras, etc)

Por ejemplo, un objeto Light es creado al adjuntar un componente Light a un GameObject.

 Component (contenedores):
o
o Los Componentes son las tuercas y tornillos de los objetos y comportamientos
de un juego. Son las piezas funcionales de cada GameObject.
o Son los elementos que le agregan funcionalidad a los GameObject.
o Los componentes pueden ser agregados al GameObject.
o El Transform Component es crítico para todos los GameObjects, entonces cada
GameObject tiene uno.
o Un GameObject puede tener otros Components.
o Cada GameObject también contiene un Transform Component.
o Estos pueden guardar las diferentes piezas que son requeridas para hacer un
personaje, una luz, un árbol, un sonido, o lo que sea que usted quisiera
construir.
o Los scripts son considerados componentes.
o Dependiendo del objeto que se quiera crear, usted va agregar diferentes
combinaciones de Components al GameObject. Piense en un GameObject
como una olla vacía de cocina, y los Components como los ingredientes
diferentes que hacen su receta del gameplay.
Ejemplo:

 Prefabs:
o Son instancias del GameObject, es decir GameObject pre configurados que se
crean en escena se almacenan en el proyecto.
o Pueden ser instanciados o clonados
o un Prefab permite almacenar un objeto GameObject completamente con
components y propiedades. El prefab actúa como una plantilla a partir de la
cual se pueden crear nuevas instancias del objeto en la escena.
o Cualquier cambio al prefab en sí mismo serán reflejados en todas las
instancias, pero también se puede modificar instancias individualmente por
separado.

Tags (Etiquetas)
 Un Tag es una palabra que víncula a uno o más GameObjects.
 Los Tags son valores marcados que pueden ser usados para identificar objetos
en su proyecto

Por ejemplo, usted podrá definir etiquetas como “Player” y “Enemy” para personajes
controlados por el jugador y personajes no controlados por el jugador respectivamente; una
etiqueta “Collectable” puede ser definida para elementos que el jugador puede recoger en la
Scene; y así.

Claramente, las etiquetas están destinadas para identificar GameObjects para propósitos de
scripting. Podemos utilizarlas para escribir código de scripts para encontrar un GameObject por
buscar un objeto que contenga nuestra etiqueta deseada. Esto se logra usando la función
GameObject.FindWithTag().

Applicando una Etiqueta(Tag)

Para aplicar una etiqueta a un GameObject, simplemente abra el despegable de etiquetas


en el Inspector y escoja la etiqueta que requiera:

El GameObject estará associado con esta etiqueta.

Creando nuevas Etiquetas

Para crear una nueva Etiqueta, haga click en la opción “Add tag…” al final del menú
desplegable. Esto abrirá el Tag Manager en el Inspector.

El Tags and Layers Manager le permite establecer Layers, Tags y Sorting Layers. Para
ver el administrador, seleccione Edit > Project Settings > Tags and Layers.
Recomendaciones

 Un GameObject solo puede tener una etiqueta asignada a él.


 Unity tiene unas etiquetas integradas que no aparecen en el Tag Manager:
o “Untagged”
o “Respawn”
o “Finish”
o “EditorOnly”
o “MainCamera”
o “Player”
 y “GameController”.
 Puede utilizar cualquier palabra que quiera como una etiqueta. (Puede utilizar
incluso frases cortas, pero puede que necesite agrandar el Inspector para ver el
nombre completo de la etiqueta.)

Capas (Layers)

Los Layers son comúnmente utilizados:

 Para indicar funcionalidad (semejante a otros programas que utilizan capas)


atreves de los gameobeject
 Por Cameras para renderizar solo una parte de la escena, o gameobeject en
tiempo de ejecución (ejemplo con la propiedad Culling Mask que capas la
cámara renderizara).
 Por las Lights para iluminar solo partes de la escena.
 Por Raycasting para selectivamente ignorar los Colliders o crear Collisions.

Entiendo la sintaxis en Unity


Vector3 pos = transform.position;
pos = new Vector3(0,2,0);
Descripción:

 pos: Es el nombre de la variable y la cual almacena la posición actual del objeto


(gameObject) al que esta adjunto el script (componente script).
 Vector3 es el tipo de datos (estructura)
 transform: es el tipo de componente, este un objeto creado de la clase Transform y la
cual hereda de Component, la cual a su vez hereda de la clase Object.
 position: es una variable del componente transform.
 Punto(.): Este símbolo es utilizado como direccionamiento para acceder a los
miembros de una clase, objeto, instancia, componenente o estructura.
 Punto y coma (;): Indica el final de una senctencia o línea de código.
 Signo de igual (=): Es un operador de asignación (no de igualación, ya que el de
igualación implica comparación se cómo sigue ==).
 Comas (,): (Separadores de ejes de coordenadas de la estructura Vecor3).

La primera línea:

Se declara una variable de tipo vector3 y se iguala a la variable position del componente
transform, esto quiere decir que la variable pos almacenara la posición de ese objeto, ya que
se ha almacenado por referencia (clase).

El component transform contiene tres variables importantes que son position, scale y rotation
las cuales se pueden utilizar o acceder para modificar el comportamiento de un objeto.

Nota: Un componente es un objeto de referencia de clase, puede ser un script, un transform,


sea cual sea es un objeto de referencia, ya que los componentes heredan de la clase objeto.

La segunda línea:

new Vector3(x,y,z), es el constructor de la estructura vector3.


0,2,0: Son los valores asignados a los ejes del vector3 al inicializar el constructor.

La variable pos almacenara un nuevo valor el cual ha sido inicializado mediante el constructor
de la estructura (Vector3) con los valores (x,y,z) 0,2,0 y dichos valores (x,y,z) son variables de la
estructura Vector3.

Notas:

Tanto los datos de referencia, así como los de valor cuando se utiliza el constructor (new),
los valores asignados anteriormente se borran automáticamente de la memoria o pila y no
ocupan espacio. Esto es diferente a cuando instanciamos un objeto y si estos objetos
deberían de destruirse manualmente ya que si ocupan memoria.

El componente transform (objeto) contiene una variable o propiedad llamada position, la


cual es al igual que Vector3 estrutura que representa un vector 3D o un punto en el espacio
3D.
Ejemplo de direccionamiento a objetos (gameObject, Component,
Script) y propiedades.

Ejemplo 1:

gameObeject.renderer.material.color = Color.red

renderer: Componente adjunto al gameObject donde se encuentra el codigo.

material: Es una propiedad de la clase renderer la cual guarda una referencia a la clase
material.

Color: Es una propiedad de la clase material la cual guarda una referencia a la estructura
color.

Red: es una variable estatica compuesta por cuatros variables normales r, b, g, a.

Ejemplo 2:

gameObject.renderer.collider.attachRigidbody.angularDrag = 0.2f

Esto significa que del gameobject se accederá a su componente renderer (almacenado en


su propiedad o variable del mismo nombre) del objeto renderer se accederá a su
componente collider asociado (mediante la variable del mismo nombre) y del collider se
accederá a su componenete rigidbody asociado (mediante su propiedad attachRigidbody)
y a la variable angularDrag se le asignará un valor de 0.2.

Esto también pudo haberse escrito de la siguiente manera:

This.renderer.collider.attachRigidbody.angularDrag = 0.2f

This: Es una auto referencia al propio gameObject donde está contenido el script.

Este fue un ejemplo largo de como acceder usando referencias o direccionamiento de


memoria.

Una forma corta seria:

This.Rigidbody.angularDrag = 0.2f

Si tenemos un componente Rigidbody agreagado al objeto gameobject.

Potrebbero piacerti anche