Raphafrei

Joystick

Jan 29th, 2016
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.70 KB | None | 0 0
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.EventSystems;
  4.  
  5. namespace UnityStandardAssets.CrossPlatformInput
  6. {
  7.     public class Joystick : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler{
  8.         public enum AxisOption{
  9.             Both,
  10.             OnlyHorizontal,
  11.             OnlyVertical
  12.         }
  13.        
  14.         public int MovementRange = 100;
  15.         public AxisOption axesToUse = AxisOption.Both; // The options for the axes that the still will use
  16.         public string horizontalAxisName = "Horizontal"; // The name given to the horizontal axis for the cross platform input
  17.         public string verticalAxisName = "Vertical"; // The name given to the vertical axis for the cross platform input
  18.        
  19.         Vector3 m_StartPos;
  20.         bool m_UseX;
  21.         bool m_UseY;
  22.         CrossPlatformInputManager.VirtualAxis m_HorizontalVirtualAxis;
  23.         CrossPlatformInputManager.VirtualAxis m_VerticalVirtualAxis;
  24.        
  25.         void Start(){
  26.             m_StartPos = transform.position;
  27.             CreateVirtualAxes();
  28.         }
  29.        
  30.         void UpdateVirtualAxes(Vector3 value){
  31.             var delta = m_StartPos - value;
  32.             delta.y = -delta.y;
  33.             delta /= MovementRange;
  34.             if (m_UseX)
  35.             {
  36.                 m_HorizontalVirtualAxis.Update(-delta.x);
  37.             }
  38.            
  39.             if (m_UseY)
  40.             {
  41.                 m_VerticalVirtualAxis.Update(delta.y);
  42.             }
  43.         }
  44.        
  45.         void CreateVirtualAxes(){
  46.             m_UseX = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyHorizontal);
  47.             m_UseY = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyVertical);
  48.            
  49.             if (m_UseX)
  50.             {
  51.                 m_HorizontalVirtualAxis = new CrossPlatformInputManager.VirtualAxis(horizontalAxisName);
  52.                 CrossPlatformInputManager.RegisterVirtualAxis(m_HorizontalVirtualAxis);
  53.             }
  54.             if (m_UseY)
  55.             {
  56.                 m_VerticalVirtualAxis = new CrossPlatformInputManager.VirtualAxis(verticalAxisName);
  57.                 CrossPlatformInputManager.RegisterVirtualAxis(m_VerticalVirtualAxis);
  58.             }
  59.         }
  60.        
  61.        
  62.         public void OnDrag(PointerEventData data)
  63.         {
  64.             Vector3 newPos = Vector3.zero;
  65.            
  66.             if (m_UseX)
  67.             {
  68.                 int delta = (int)(data.position.x - m_StartPos.x);
  69.                 newPos.x = delta;
  70.             }
  71.            
  72.             if (m_UseY)
  73.             {
  74.                 int delta = (int)(data.position.y - m_StartPos.y);
  75.                 newPos.y = delta;
  76.             }
  77.             transform.position = Vector3.ClampMagnitude(new Vector3(newPos.x, newPos.y, newPos.z), MovementRange) + m_StartPos;
  78.             UpdateVirtualAxes(transform.position);
  79.         }
  80.        
  81.        
  82.         public void OnPointerUp(PointerEventData data)
  83.         {
  84.             transform.position = m_StartPos;
  85.             UpdateVirtualAxes(m_StartPos);
  86.         }
  87.        
  88.        
  89.         public void OnPointerDown(PointerEventData data) { }
  90.        
  91.         void OnDisable()
  92.         {
  93.             // remove the joysticks from the cross platform input
  94.             if (m_UseX)
  95.             {
  96.                 m_HorizontalVirtualAxis.Remove();
  97.             }
  98.             if (m_UseY)
  99.             {
  100.                 m_VerticalVirtualAxis.Remove();
  101.             }
  102.         }
  103.     }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment