Jump to content
pioj

[Aporte] Joystick Virtual para Unity 5.0 (uGUI)

Recommended Posts

Saludos a todos.

 

 

Tras muchas búsquedas sin éxito, por fin he encontrado un Joystick analógico virtual (en pantalla) para tablets y smartphones, pero que se base por fin en el uso de la nueva GUI que tiene Unity desde la 4.6.x.

 

He tenido la oportunidad de probarlo, y tras unas leves modificaciones ya funciona para versiones 5.0 en adelante. Lo he reducido de tamaño con sólo lo necesario y lo he vuelto a empaquetar.

 

 

El Package en cuestión lleva una scene de prueba que mueve una píldora por un escenario cerrado, para probar colisiones. El Joystick como tal se encuentra dentro de un panel, dentro del Canvas (como toca).

 

 

Enlace:

http://www.filedropper.com/uguijoystick

 

 

Espero que os sirva tanto como a mí, y que le deis mucho uso!  B)

Edited by pioj
actualizado con la nueva url de descarga

Share this post


Link to post
Share on other sites

Yo he creado otro algo más sencillo, utilizando también el nuevo sistema UI de Unity mediante una imagen de fondo y un botón al que he añadido dos eventos: Drag y PointerUp.

 

Podemos delimitar el radio de accion y el tiempo(smoothTime) que tarda en volver al centro después de soltar el botón.

 

Las variables estáticas Horizontal y Vertical muestran los valores en los ejes como hace Input.GetAxis.

 

Enlace de descarga.

using UnityEngine;
using System.Collections;

public class JoystickControl : MonoBehaviour {

	public static float Horizontal;
	public static float Vertical;
	public RectTransform rectTransform;
	public float radio;
	public float smoothTime = 0f;
	
	Vector3 centro;
	Vector3 velocidad;
	bool centrar = false;
	
	void Start(){
		
		this.centro = this.rectTransform.position;
		
	}
	
	void Update(){
		
		if(this.centrar){
			
			this.rectTransform.position = Vector3.SmoothDamp(this.rectTransform.position, this.centro, ref this.velocidad, this.smoothTime);
			if(Vector3.Distance(this.rectTransform.position, this.centro) < 0.1f){
				
				this.centrar = false;
				this.rectTransform.position = this.centro;
				
			}
		}
		
		Horizontal = (this.rectTransform.position.x - this.centro.x) / this.radio;
		Vertical =   (this.rectTransform.position.y - this.centro.y) / this.radio;
		
	}
	
	void Drag(){
		
		this.centrar = false;
		
		Vector3 posicion = Input.mousePosition;
		
		if(Vector2.Distance(this.centro, posicion) < this.radio){
			
			this.rectTransform.position = posicion;
			
		} else {
			
			this.rectTransform.position = this.centro + (posicion - this.centro).normalized * this.radio;
			
		}
		
	}
	
	void PointerUp(){
		
		this.centrar = true;
		this.velocidad = Vector3.zero;
		
	}

}
Edited by kaito

Share this post


Link to post
Share on other sites

Hola, los dos ficheros están borrados. ¿Seriáis tan amables de subirlos de nuevo?

Gracias,

Fernando.

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...