Single Tech Games

Tutorial de Unity 2.5D – Bonus Video (Nueva version del plugin del Joystick)

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;
	}


Imágenes
base stickSuerte!

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments