private void Update() { // Now this is a bit tricky // As we are completely REPLACING the uGUI event system for the Editor, we need to handle both Touch and Mouse inputs // For every touch out there for (int i = 0; i < How_To_Do_Touch_InputManager.TouchCount; i++) { var touch = How_To_Do_Touch_InputManager.GetTouch(i); PointerEventDataCache.position = touch.position; // Check if it's inside our rectangle if (RectTransformUtility.RectangleContainsScreenPoint(_linkedButtonRectTransform, touch.position, UiRootCamera)) { // If it's inside, it's just started AND the button has not been pressed yet if (touch.phase == TouchPhase.Began && LastFingerId == -1) { // We press the button _linkedButton.OnPointerDown(PointerEventDataCache); // Remember our pressed finger id LastFingerId = touch.fingerId; return; } } // If it's just been lifted AND this is the finger that was pressing this button if (touch.phase == TouchPhase.Ended && touch.fingerId == LastFingerId) { // We release the button _linkedButton.OnPointerUp(PointerEventDataCache); // Reset finger ID so we can Press again LastFingerId = -1; return; } } // Mouse input here // Same logic, but mouse is considered to be the finger with id of 255 so it's definitely won't interfere with actual fingers PointerEventDataCache.position = Input.mousePosition; if (RectTransformUtility.RectangleContainsScreenPoint(_linkedButtonRectTransform, PointerEventDataCache.position, UiRootCamera)) { if (Input.GetMouseButtonDown(0)) { _linkedButton.OnPointerDown(PointerEventDataCache); LastFingerId = 255; return; } } if (Input.GetMouseButtonUp(0) && LastFingerId == 255) { _linkedButton.OnPointerUp(PointerEventDataCache); LastFingerId = -1; } }
public void Update() { // Now this is a bit tricky // As we are completely REPLACING the uGUI event system for the Editor, we need to handle both Touch and Mouse inputs // For every touch out there for (int i = 0; i < How_To_Do_Touch_InputManager.TouchCount; i++) { var touch = How_To_Do_Touch_InputManager.GetTouch(i); PointerEventDataCache.position = touch.position; PointerEventDataCache.delta = touch.deltaPosition; // Check if it's inside our rectangle if (RectTransformUtility.RectangleContainsScreenPoint(_touchpadTouchRect, touch.position, UiRootCamera)) { // If it's inside, it's just started AND the joystick is not being tweaked yet if (touch.phase == TouchPhase.Began && LastFingerId == -1) { // We press the joystick _linkedTouchpad.OnPointerDown(PointerEventDataCache); // Remember our pressed finger id LastFingerId = touch.fingerId; return; } } // If it's just been lifted AND this is the finger that was tweaking this joystick if (touch.phase == TouchPhase.Ended && touch.fingerId == LastFingerId) { // We release the joystick _linkedTouchpad.OnPointerUp(PointerEventDataCache); // Reset finger ID so we can Press again LastFingerId = -1; return; } if (touch.phase == TouchPhase.Moved && touch.fingerId == LastFingerId) { _linkedTouchpad.OnDrag(PointerEventDataCache); return; } } // Mouse input here // Same logic, but mouse is considered to be the finger with id of 255 so it's definitely won't interfere with actual fingers PointerEventDataCache.position = Input.mousePosition; PointerEventDataCache.delta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")); PointerEventDataCache.delta *= 10f; if (RectTransformUtility.RectangleContainsScreenPoint(_touchpadTouchRect, PointerEventDataCache.position, UiRootCamera)) { if (Input.GetMouseButtonDown(0)) { _linkedTouchpad.OnPointerDown(PointerEventDataCache); LastFingerId = 255; return; } } if (Input.GetMouseButtonUp(0) && LastFingerId == 255) { _linkedTouchpad.OnPointerUp(PointerEventDataCache); LastFingerId = -1; return; } if (Input.GetMouseButton(0) && LastFingerId == 255 && PointerEventDataCache.delta.sqrMagnitude > 0.000000001f) { _linkedTouchpad.OnDrag(PointerEventDataCache); } }