Hola gente! Les traigo un nuevo vídeo de la serie de tutoriales de 2.5D hoy, es algo bastante nuevo, la animación por código para todos esos amantes de la programación, como yo, y les tengo buenas noticias, la verdad es que funciona mejor que el mecanim :P, si no vas a hacer cosas muy complicadas como escalar o rotar en unity 2D, pues creo que es una buena opción, claro que rotar escalar, cambiar de colores también se puede hacer, pero resultará un poco más complicado, pero igual es una opción que yo, particularmente, voy a utilizar ya que es mucho más rápido trabajar de esta forma.
Código
using UnityEngine; using System.Collections; public class AnimacionesScript : MonoBehaviour { //estado = 0 (parado norte) estado = 1 (caminando norte) //estado = 2 (parado noreste) estado = 3 (caminando noreste) //estado = 4 (parado este) estado = 5 (caminando este) //estado = 6 (parado sureste) estado = 7 (caminando sureste) //estado = 8 (parado sur) estado = 9 (caminando sur) //estado = 10 (parado suroeste) estado = 11 (caminando suroeste) //estado = 12 (parado oeste) estado = 13 (caminando oeste) //estado = 14 (parado noroeste) estado = 15 (caminando noroeste) public int estado = 1; public Sprite[] spritesNorte; public Sprite[] spritesNorEste; public Sprite[] spritesEste; public Sprite[] spritesSurEste; public Sprite[] spritesSur; public Sprite[] spritesSurOeste; public Sprite[] spritesOeste; public Sprite[] spritesNorOeste; public float framesPorSegundo; private SpriteRenderer spriteRenderer; private bool pausa; // private float tiempoEntreEstados = 0.12f; // Use this for initialization void Start () { spriteRenderer = renderer as SpriteRenderer; //pausa debe ser igual auna variable global pausa } // Update is called once per frame void Update () { if(pausa == false) { int indice = (int)(Time.timeSinceLevelLoad * framesPorSegundo); //Debug.Log(((int)Time.timeSinceLevelLoad * framesPerSecond) % sprites.Length); indice = indice % spritesNorte.Length; Debug.Log(indice); if (estado == 0) spriteRenderer.sprite = spritesNorte[ 5 ]; if(estado == 1) spriteRenderer.sprite = spritesNorte[ indice ]; if (estado == 2) spriteRenderer.sprite = spritesNorEste[ 5 ]; if(estado == 3) spriteRenderer.sprite = spritesNorEste[ indice ]; if (estado == 4) spriteRenderer.sprite = spritesEste[ 5 ]; if(estado == 5) spriteRenderer.sprite = spritesEste[ indice ]; if (estado == 6) spriteRenderer.sprite = spritesSurEste[ 5 ]; if(estado == 7) spriteRenderer.sprite = spritesSurEste[ indice ]; if (estado == 8) spriteRenderer.sprite = spritesSur[ 5 ]; if(estado == 9) spriteRenderer.sprite = spritesSur[ indice ]; if (estado == 10) spriteRenderer.sprite = spritesSurOeste[ 5 ]; if(estado == 11) spriteRenderer.sprite = spritesSurOeste[ indice ]; if (estado == 12) spriteRenderer.sprite = spritesOeste[ 5 ]; if(estado == 13) spriteRenderer.sprite = spritesOeste[ indice ]; if (estado == 14) spriteRenderer.sprite = spritesNorOeste[ 5 ]; if(estado == 15) spriteRenderer.sprite = spritesNorOeste[ indice ]; } } public void pararAnimacion() { estado = estado - 1; } public void comenzarAnimacion() { estado = estado + 1; } }
Proyecto
https://www.box.net/shared/1u6dtcrydzsgwbducp9v
Vídeo
Explicación del código de animación 1
https://www.youtube.com/watch?v=qTw2SA3jGkI#t=2m21s
Implementando la animación por código
https://www.youtube.com/watch?v=qTw2SA3jGkI#t=9m14s
Explicación del código de animación 2
https://www.youtube.com/watch?v=qTw2SA3jGkI#t=14m01s
Suerte!
no funciona el codigo, al aplicarle el codigo a la imagen del huntress no me aparecen los cuadros para inicializar las variables de spritesnorte, spritessur, framesPorSegundo…
copie y pegue el codigo, el del tutorial anterior de multiplicar el fondo si me funciona por ejemplo…
que puede ser?
Revisa que lleve el mismo nombre del Unity con el del código, AnimacionesScript, si no es igual no lo reconoce, y puede ser que tengas errores en el console que no te dejen usar el script, revisa eso y si tienes algun error que no entiendes mandame un correo 🙂