예제 #1
0
        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);
            }
        }