Jump to content
Sign in to follow this  
Ancoreig

Animación en un Canvas, ¿Cómo hacer que funcione?

Recommended Posts

Buenas a todos!

Tengo un problemilla con las animaciones cuando quiero hacerlas en un Canvas y es que éstas no se reproducen. Con animaciones, me refiero a por ejemplo cuando creo una animación en aseprite, me exporto el sheet y lo meto en Unity, y pues ahí ya le doy a crear la animación a partir del sheet. Ese tipo de animación en un Canvas no me la reproduce. Sin embargo, una animación que cree con la ventana "Animation" de Unity sí me la reproducirá.

Ejemplo de lo que quiero animar:

561ECHB.gif

Son 2 imágenes, el robot, que está por detrás, y la cápsula, que está por delante. El robot lo he animado con la ventana Animation y en el canvas se reproduce sin problemas, sin embargo, la animación de la cápsula no me la reproduce (deberían de salir burbujitas). En el animator de la cápsula, el estado se está reproduciendo, pero no está viéndose nada de nada en la escena. ¿Alguna solución?

Share this post


Link to post
Share on other sites

Hola,

Pase como un mes batallando con la animación,,, con algunas cosas debí darme por vencido o no hubiera avanzado, así es q no se si mi comentario sea muy útil.

Lo que describís me recuerda a uno de mis primeros problemas, "capas", depende del nivel que tengan las animaciones en la escena así se despliegan cuando se animan, es decir, la animación puede estar ejecutándose pero no la puedes ver por que su capa esta tras otra que la tapa.

 

  • Like 1

Share this post


Link to post
Share on other sites

Indagaré sobre las capas pues, gracias Mario!

Igualmente, he encontrado la solución (no recuerdo en qué página) a través de código, lo dejo por aquí. Eso sí, no sé cómo de intensivo será para el rendimiento.

 

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class ImageAnimation : MonoBehaviour {

	public Sprite[] sprites;
	public int spritePerFrame = 22; //si coincide con la imagen el nº, quiere decir que va a velocidad 1-1. Cuatoo mayor sea respecto al nº de frames, más lenta irá.
                                    //Por ejemplo, una imagen de 11 sprites a 22, va el doble de lento
	public bool loop = true;
	public bool destroyOnEnd = false;

	private int index = 0;
	private Image image;
	private int frame = 0;

	void Awake() {
		image = GetComponent<Image> ();
	}

	void Update () {

		if (!loop && index == sprites.Length) return;

		frame ++;

		if (frame < spritePerFrame) return;

		image.sprite = sprites [index];
		frame = 0;
		index ++;

		if (index >= sprites.Length) {
			if (loop) index = 0;
			if (destroyOnEnd) Destroy (gameObject);
		}
		
	}
}

 

Edited by Ancoreig

Share this post


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

×
×
  • Create New...