Hola Gente! Les dejo un pequeño vídeo bonus de la nueva actualización del plugin del Joystick para móviles, hay algunos cambios en el código y en la forma en como funciona este nuevo plugin.
Plugin
https://www.assetstore.unity3d.com/en/#!/content/15233
Código
joystickAnimacionScript
using UnityEngine; using System.Collections; public class joystickAnimacionScript : MonoBehaviour { public CNJoystick movementJoystick; private Transform transformCache; private animacionScript animador; public float turnSpeed; private Transform camaraPrincipal; public float Velocidad; // Use this for initialization void Awake() { animador = GetComponent<animacionScript>(); if (movementJoystick == null) { throw new UnassignedReferenceException("Please specify movement Joystick object"); } transformCache = transform; camaraPrincipal= Camera.main.GetComponent<Transform>(); } void Update() { var movement = new Vector3( movementJoystick.GetAxis("Horizontal"), movementJoystick.GetAxis("Vertical"), 0f); if(movement == Vector3.zero) StopMoving(); else Move(movement); } // You can extend this class and override any of these virtual methods private void Move(Vector3 relativeVector) { // It's actually 2D vector relativeVector = camaraPrincipal.TransformDirection(relativeVector); relativeVector.z = 0f; relativeVector.Normalize(); Vector3 sigPosicion = relativeVector * Velocidad + transformCache.position; transform.position = Vector3.Lerp( transformCache.position, sigPosicion, Time.deltaTime ); FaceMovementDirection(relativeVector); } private void FaceMovementDirection(Vector3 direction) { float targetAngle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; if(targetAngle > 68 && targetAngle <= 112) animador.estado = 1; if(targetAngle > 22 && targetAngle <= 68) animador.estado = 3; if(targetAngle > -22 && targetAngle <= 22) animador.estado = 5; if(targetAngle > -68 && targetAngle <= -22) animador.estado = 7; if(targetAngle > -112 && targetAngle <= -68) animador.estado = 9; if(targetAngle > -158 && targetAngle <= -112) animador.estado = 11; if((targetAngle > 158 && targetAngle <= 180)|(targetAngle > -180 && targetAngle <= -158)) animador.estado = 13; if(targetAngle > 112 && targetAngle <= 158) animador.estado = 15; } private void StopMoving() { //Se mueve arriba animador.pararAnimacion (); } }
joystickScript
using UnityEngine; using System.Collections; public class joystickScript : MonoBehaviour { public CNAbstractController movementJoystick; private Transform transformCache; private Animator animador; private Transform camaraPrincipal; public float Velocidad; private int estado, estadoAnterior; // Use this for initialization void Awake() { animador = GetComponent<Animator>(); if (movementJoystick == null) { throw new UnassignedReferenceException("Please specify movement Joystick object"); } transformCache = transform; camaraPrincipal= Camera.main.GetComponent<Transform>(); } void Update() { var movement = new Vector3( movementJoystick.GetAxis("Horizontal"), movementJoystick.GetAxis("Vertical"), 0f); if(movement == Vector3.zero) StopMoving(); else Move(movement); } // You can extend this class and override any of these virtual methods private void Move(Vector3 relativeVector) { relativeVector = camaraPrincipal.TransformDirection(relativeVector); relativeVector.z = 0f; relativeVector.Normalize(); // It's actually 2D vector transformCache.position = transformCache.position + relativeVector*Velocidad; FaceMovementDirection(relativeVector); } private void FaceMovementDirection(Vector3 direction) { float AnguloObjetivo = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; if(AnguloObjetivo > 68 && AnguloObjetivo <= 112) estado = 1; if(AnguloObjetivo > 22 && AnguloObjetivo <= 68) estado = 2; if(AnguloObjetivo > -22 && AnguloObjetivo <= 22) estado = 3; if(AnguloObjetivo > -68 && AnguloObjetivo <= -22) estado = 4; if(AnguloObjetivo > -112 && AnguloObjetivo <= -68) estado = 5; if(AnguloObjetivo > -158 && AnguloObjetivo <= -112) estado = 6; if((AnguloObjetivo > 158 && AnguloObjetivo <= 180)|(AnguloObjetivo > -180 && AnguloObjetivo <= -158)) estado = 7; if(AnguloObjetivo > 112 && AnguloObjetivo <= 158) estado = 8; if(estado != estadoAnterior) { if(estado == 1) animador.SetTrigger("Norte"); if(estado == 2) animador.SetTrigger("NorEste"); if(estado == 3) animador.SetTrigger("Este"); if(estado == 4) animador.SetTrigger("SurEste"); if(estado == 5) animador.SetTrigger("Sur"); if(estado == 6) animador.SetTrigger("SurOeste"); if(estado == 7) animador.SetTrigger("Oeste"); if(estado == 8) animador.SetTrigger("NorOeste&amp"); estadoAnterior = estado; } animador.SetTrigger("Avanzar"); } private void StopMoving() { if(estado == 1) animador.SetTrigger("Norte"); if(estado == 2) animador.SetTrigger("NorEste"); if(estado == 3) animador.SetTrigger("Este"); if(estado == 4) animador.SetTrigger("SurEste"); if(estado == 5) animador.SetTrigger("Sur"); if(estado == 6) animador.SetTrigger("SurOeste"); if(estado == 7) animador.SetTrigger("Oeste"); if(estado == 8) animador.SetTrigger("NorOeste"); } }
AnimacionesScript
public void pararAnimacion() { if(estado % 2 != 0 ) estado = estado - 1; }