using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class joystick : MonoBehaviour { public bool touchDown; public bool autoConfigMaxDist; public float maxDist; public Vector2 input; public Vector2 deltaPos; public Vector2 startPos; public Vector2 endPos; public RectTransform joyBG; public RectTransform joyStick; public static Vector2 Input => instance.input; public static joystick instance; void Awake(){ instance = this; } void Update() {/* if (autoConfigMaxDist) { maxDist = joyBG.sizeDelta.x / 2; } if (touchDown) { if (Input.touchCount > 0) { Touch[] tlist = Input.touches; int tId = 0; for (int i = 0; i < tlist.Length; i++) { if (tlist[tId].position.x < Screen.width / 2) { tId = i; continue; } } if(tlist[tId].position.x > Screen.width / 2) { return; } endPos = tlist[tId].position; } else if (Input.mousePosition.x < Screen.width / 2) { endPos = Input.mousePosition; } deltaPos = endPos - startPos; deltaPos = new Vector2(Mathf.Clamp(deltaPos.x, -maxDist, maxDist), Mathf.Clamp(deltaPos.y, -maxDist, +maxDist)); } else { // deltaPos = Vector2.zero; } Vector2 _input = new Vector2(deltaPos.x / maxDist, deltaPos.y / maxDist); if(_input.magnitude < 0.1f) { return; } input = _input; input = (input.magnitude > 1.0f) ? input.normalized : input; joyStick.localPosition = new Vector2(input.x * (joyBG.sizeDelta.x / 2f), input.y * (joyBG.sizeDelta.y / 2f)); */ } public void onDrag(BaseEventData pointer) { PointerEventData ped = pointer as PointerEventData; endPos = ped.position; deltaPos = endPos - startPos; deltaPos = new Vector2(Mathf.Clamp(deltaPos.x, -maxDist, maxDist), Mathf.Clamp(deltaPos.y, -maxDist, +maxDist)); Vector2 _input = new Vector2(deltaPos.x / maxDist, deltaPos.y / maxDist); if (_input.magnitude < 0.1f) { return; } input = _input; input = (input.magnitude > 1.0f) ? input.normalized : input; joyStick.localPosition = new Vector2(input.x * (joyBG.sizeDelta.x / 2f), input.y * (joyBG.sizeDelta.y / 2f)); } public void pointerDown(BaseEventData pointer) { PointerEventData ped = pointer as PointerEventData; startJoy(ped); } public void pointerUp() { endJoy(); } void startJoy(PointerEventData pointer) { startPos = pointer.position; joyBG.gameObject.SetActive(true); joyStick.gameObject.SetActive(true); joyStick.localPosition = Vector2.zero; joyBG.position = startPos; touchDown = true; } void endJoy() { // joyBG.gameObject.SetActive(false); // joyStick.gameObject.SetActive(false); input = Vector2.zero; touchDown = false; joyStick.localPosition = Vector2.zero; } }