miércoles, 20 de agosto de 2014

Plugin de animación en Unity: iTween

Quiero explicar los problemas que he tenido con la cámara del juego, pero para llegar allí tengo que pasar por un par de plugins de Unity, que además son bastante útiles para multitud de cosas, por eso puede que me extienda varias entradas.

El plugin principal sobre el que descansan los demás es iTween. Es gratuito y está en la tienda de Unity. Lo que venden son packs con ejemplos, para que cojas ese código directamente, o aprendas el rendimiento que se le puede dar. Aún así con la documentación básica se puede tirar bastante bien.

Básicamente iTween ofrece la posibilidad de animar cosas de forma fácil. Y cuando digo animar cosas no es solo mover objetos, sino animar un cambio de color, de sonido, escalados, orientaciones, movimientos predefinidos, recorridos por splines, cámaras... 

Yo de hecho cuando lo empecé a usar me pregunté cómo esto no venía por defecto en Unity, hace mucho más fácil animar cosas mediante scripts. Voy a un poner un ejemplo básico de lo más sencillo: mover un objeto a lo largo de una línea.

Imaginemos que queremos que el objeto se empiece a mover en algún momento, y que queremos que se ejecute algo cuando haya llegado al destino (un método cualquiera) y que recorra la línea en 4 segundos, la línea va a ser paralela al eje z donde se encuentre el objeto y tiene una longitud de 30 unidades. El código más básico que podríamos encontrar en foros Unity para hacerlo podría ser (lo doy en C#, en javascript es muy parecido):

void comenzarMovimiento(){
   moviendo=true;
   tiempoMoviendo=0;
}

void Update(){
  if (moviendo){
    gameObject.transform.position += new Vector3 (0f, 0f, (Time.deltaTime/4f)*30);
    tiempoMoviendo+=Time.DeltaTime
    if (tiempoMoviendo>=4){
      moviendo=false;
      metodoFinDeMovimiento();
    }
  }
}

Aquí tendríamos el movimiento controlado, sería un movimiento lineal, y para cambiarlo a otro tipo habría que cambiar la forma en que se incrementa la posición en z, también hay que tener en cuenta que tenemos un if en el update solo para este movimiento. Pero si tuvieramos varios movimientos posibles se empezaría a llenar el método Update de código de las distintas posibles animaciones. Se podrían usar funciones de interpolación como Lerp. Pero vamos, el movimiento es el mismo. Este mismo movimiento con iTween sería:

void comenzarMovimiento(){
  iTween.MoveBy( gameObject, iTween.Hash(
    "z" , 30,
    "time" , 4f,
    "oncomplete", "metodoFinDeMovimiento",
    "easeType", iTween.EaseType.easeOutQuart
  ));
}

Apenas 6 líneas y porque no lo he querido poner todo en una sola línea. Además con el easeType podemos controlar de forma muy sencilla cómo queremos el movimiento, si lineal, cuadrático, con inicio y final suavizado...

Y este es solo un ejemplo, y sin todas las posibilidades que da esta llamada. iTween se puede utilizar para poner la música más rápido, cambiar el color del HUD, hacer que tiemble la cámara. De hecho haré una entrada solo de pequeños usos que le he dado en los dos juegos.

No hay comentarios :

Publicar un comentario