Advertisement
Guest User

Untitled

a guest
Apr 29th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.18 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. {
  9. public enum AxisOption
  10. {
  11. // Options for which axes to use
  12. Both, // Use both
  13. OnlyHorizontal, // Only horizontal
  14. OnlyVertical // Only vertical
  15. }
  16.  
  17. public int MovementRange = 100;
  18. public AxisOption axesToUse = AxisOption.Both; // The options for the axes that the still will use
  19. public string horizontalAxisName = "Horizontal"; // The name given to the horizontal axis for the cross platform input
  20. public string verticalAxisName = "Vertical"; // The name given to the vertical axis for the cross platform input
  21.  
  22. Vector3 m_StartPos;
  23. bool m_UseX; // Toggle for using the x axis
  24. bool m_UseY; // Toggle for using the Y axis
  25. CrossPlatformInputManager.VirtualAxis m_HorizontalVirtualAxis; // Reference to the joystick in the cross platform input
  26. CrossPlatformInputManager.VirtualAxis m_VerticalVirtualAxis; // Reference to the joystick in the cross platform input
  27.  
  28. void OnEnable()
  29. {
  30. CreateVirtualAxes();
  31. }
  32.  
  33. void Start()
  34. {
  35. m_StartPos = transform.position;
  36. }
  37.  
  38. void UpdateVirtualAxes(Vector3 value)
  39. {
  40. var delta = m_StartPos - value;
  41. delta.y = -delta.y;
  42. delta /= MovementRange;
  43. if (m_UseX)
  44. {
  45. m_HorizontalVirtualAxis.Update(-delta.x);
  46. }
  47.  
  48. if (m_UseY)
  49. {
  50. m_VerticalVirtualAxis.Update(delta.y);
  51. }
  52. }
  53.  
  54. void CreateVirtualAxes()
  55. {
  56. // set axes to use
  57. m_UseX = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyHorizontal);
  58. m_UseY = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyVertical);
  59.  
  60. // create new axes based on axes to use
  61. if (m_UseX)
  62. {
  63. m_HorizontalVirtualAxis = new CrossPlatformInputManager.VirtualAxis(horizontalAxisName);
  64. CrossPlatformInputManager.RegisterVirtualAxis(m_HorizontalVirtualAxis);
  65. }
  66. if (m_UseY)
  67. {
  68. m_VerticalVirtualAxis = new CrossPlatformInputManager.VirtualAxis(verticalAxisName);
  69. CrossPlatformInputManager.RegisterVirtualAxis(m_VerticalVirtualAxis);
  70. }
  71. }
  72.  
  73.  
  74. public void OnDrag(PointerEventData data)
  75. {
  76. Vector3 newPos = Vector3.zero;
  77.  
  78. if (m_UseX)
  79. {
  80. int delta = (int)(data.position.x - m_StartPos.x);
  81. delta = Mathf.Clamp(delta, - MovementRange, MovementRange);
  82. newPos.x = delta;
  83. }
  84.  
  85. if (m_UseY)
  86. {
  87. int delta = (int)(data.position.y - m_StartPos.y);
  88. delta = Mathf.Clamp(delta, -MovementRange, MovementRange);
  89. newPos.y = delta;
  90. }
  91. transform.position = new Vector3(m_StartPos.x + newPos.x, m_StartPos.y + newPos.y, m_StartPos.z + newPos.z);
  92. UpdateVirtualAxes(transform.position);
  93. }
  94.  
  95.  
  96. public void OnPointerUp(PointerEventData data)
  97. {
  98. transform.position = m_StartPos;
  99. UpdateVirtualAxes(m_StartPos);
  100. }
  101.  
  102.  
  103. public void OnPointerDown(PointerEventData data) { }
  104.  
  105. void OnDisable()
  106. {
  107. // remove the joysticks from the cross platform input
  108. if (m_UseX)
  109. {
  110. m_HorizontalVirtualAxis.Remove();
  111. }
  112. if (m_UseY)
  113. {
  114. m_VerticalVirtualAxis.Remove();
  115. }
  116. }
  117. }
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement