Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using UnityEngine;
- using UnityEngine.EventSystems;
- namespace UnityStandardAssets.CrossPlatformInput
- {
- public class Joystick : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler{
- public enum AxisOption{
- Both,
- OnlyHorizontal,
- OnlyVertical
- }
- public int MovementRange = 100;
- public AxisOption axesToUse = AxisOption.Both; // The options for the axes that the still will use
- public string horizontalAxisName = "Horizontal"; // The name given to the horizontal axis for the cross platform input
- public string verticalAxisName = "Vertical"; // The name given to the vertical axis for the cross platform input
- Vector3 m_StartPos;
- bool m_UseX;
- bool m_UseY;
- CrossPlatformInputManager.VirtualAxis m_HorizontalVirtualAxis;
- CrossPlatformInputManager.VirtualAxis m_VerticalVirtualAxis;
- void Start(){
- m_StartPos = transform.position;
- CreateVirtualAxes();
- }
- void UpdateVirtualAxes(Vector3 value){
- var delta = m_StartPos - value;
- delta.y = -delta.y;
- delta /= MovementRange;
- if (m_UseX)
- {
- m_HorizontalVirtualAxis.Update(-delta.x);
- }
- if (m_UseY)
- {
- m_VerticalVirtualAxis.Update(delta.y);
- }
- }
- void CreateVirtualAxes(){
- m_UseX = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyHorizontal);
- m_UseY = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyVertical);
- if (m_UseX)
- {
- m_HorizontalVirtualAxis = new CrossPlatformInputManager.VirtualAxis(horizontalAxisName);
- CrossPlatformInputManager.RegisterVirtualAxis(m_HorizontalVirtualAxis);
- }
- if (m_UseY)
- {
- m_VerticalVirtualAxis = new CrossPlatformInputManager.VirtualAxis(verticalAxisName);
- CrossPlatformInputManager.RegisterVirtualAxis(m_VerticalVirtualAxis);
- }
- }
- public void OnDrag(PointerEventData data)
- {
- Vector3 newPos = Vector3.zero;
- if (m_UseX)
- {
- int delta = (int)(data.position.x - m_StartPos.x);
- newPos.x = delta;
- }
- if (m_UseY)
- {
- int delta = (int)(data.position.y - m_StartPos.y);
- newPos.y = delta;
- }
- transform.position = Vector3.ClampMagnitude(new Vector3(newPos.x, newPos.y, newPos.z), MovementRange) + m_StartPos;
- UpdateVirtualAxes(transform.position);
- }
- public void OnPointerUp(PointerEventData data)
- {
- transform.position = m_StartPos;
- UpdateVirtualAxes(m_StartPos);
- }
- public void OnPointerDown(PointerEventData data) { }
- void OnDisable()
- {
- // remove the joysticks from the cross platform input
- if (m_UseX)
- {
- m_HorizontalVirtualAxis.Remove();
- }
- if (m_UseY)
- {
- m_VerticalVirtualAxis.Remove();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment