miércoles, 16 de octubre de 2013

Fases en Unity


Unity se compone de pantallas o fases independientes. Es decir que en cuanto cambiamos de fase todo lo que contenía la pantalla anterior, sin excepción, es destruído para pasar a crear los objetos pertenecientes a la fase nueva.



Al hacer doble click en el archivo de la fase podemos ver su contenido
en la jerarquía


El único modo de crear elementos "globales" o persistentes, como el personaje principal o el objeto en el que se guarda el estado de la partida, es crearlos en la primera de las pantallas y hacer que posean la cualidad de persistencia, es decir que sobrevivan saltando de pantalla en pantalla. Para que esto suceda simplemente hay que añadirle:

function Awake() { DontDestroyOnLoad (this); }


Yo lo que tengo es un script aparte que contiene sólo esta linea. De este modo con sólo asignarlo ya hago que un objeto sea persistente y puedo ver rápidamente en el inspector qué objetos son persistentes y cuales no.


Para cambiar de fase sólo tenemos que añadir la fase el la lista de pantallas que formarán parte del juego en File - Build Setings - Add Current y finalmente escribir en el punto del script donde queremos desencadenar el cambio:

Application.LoadLevel("nombre_fase");



Si queremos que un objeto persistente inicialice ciertas variable o ejecute un protocolo de entrada cada vez que cambiamos de fase, como por ejemplo la posición en la que aparece el personaje principal, podemos añadir al objeto un procedimiento onLevelWasLoaded, que trae el número de la fase en la que acabamos de entrar. Esta función es llamada siempre que tiene lugar un cambio de pantalla.


function OnLevelWasLoaded (level:int) {

    if (level == 2) { transform.position = Vector3(38,2,5.4); }
    if (level == 1) { transform.position = Vector3(0,4,0); }
    
    otras_inicializaciones();
}

No hay comentarios:

Publicar un comentario