public void OnUpdate()
        {
            _swipe = _down && Vector3.Distance(_startPosition, UnityEngine.Input.mousePosition) > 15;
            _tapUnknown = !_tap && _tapUnknown;
            _tap = _tapUnknown && Time.time - _tapUnknownTime > DoubleTapTimeout;
            _doubleTap = false;
            _longTap = false;

            if (UnityEngine.Input.GetMouseButtonDown(0))
            {
                _tapStartTime = Time.time;
                _startPosition = UnityEngine.Input.mousePosition;
                _down = true;
            }
            if (UnityEngine.Input.GetMouseButtonUp(0))
            {
                _doubleTap = Time.time - _lastTapTime < DoubleTapTimeout;
                _longTap = !_swipe && Time.time - _tapStartTime >= LongTapTimeout;
                _tapUnknown = !(_swipe || _doubleTap || _longTap);
                _tapUnknownTime = _tapUnknown ? Time.time : 0;
                _lastTapTime = Time.time;
                _down = false;
            }
            if (_tap || _longTap || _doubleTap)
            {
                _result = new TouchResult(_startPosition);
            }
            if (_swipe)
            {
                _result = new TouchResult(UnityEngine.Input.mousePosition);
            }
        }
        public void OnUpdate()
        {
            _tapUnknown = !_tap && _tapUnknown;
            _tap = _tapUnknown && Time.time - _tapUnknownTime > DoubleTapTimeout;
            _doubleTap = false;
            _longTap = false;
            _scale = UnityEngine.Input.touchCount > 1 && (_swipe || _swipe2);

            if (UnityEngine.Input.touchCount > 0)
            {
                var touch = UnityEngine.Input.GetTouch(0);
                _swipe = !_scale && _down && Vector3.Distance(_startPosition, touch.position) > 15;

                if (UnityEngine.Input.touchCount > 1)
                {
                    var touch2 = UnityEngine.Input.GetTouch(1);
                    _swipe2 = _down2 && Vector3.Distance(_startPosition2, touch2.position) > 15;

                    if (touch2.phase == TouchPhase.Began)
                    {
                        _down2 = true;
                        _startPosition2 = touch2.position;
                    }
                    if (touch2.phase == TouchPhase.Ended)
                    {
                        _down2 = false;
                        _swipe2 = false;
                    }
                    if (_scale)
                    {
                        _result1 = new TouchResult(touch.position);
                        _result2 = new TouchResult(touch2.position);
                    }
                }

                if (touch.phase == TouchPhase.Began)
                {
                    _down = true;
                    _tapStartTime = Time.time;
                    _startPosition = touch.position;
                }
                if (touch.phase == TouchPhase.Ended)
                {
                    _down = false;
                    _doubleTap = Time.time - _lastTapTime < DoubleTapTimeout;
                    _longTap = !_swipe && !_scale && Time.time - _tapStartTime >= LongTapTimeout;
                    _tapUnknown = !(_swipe || _scale || _doubleTap || _longTap);
                    _tapUnknownTime = _tapUnknown ? Time.time : 0;
                    _lastTapTime = Time.time;
                    _swipe = false;
                }
                if (_swipe)
                {
                    _result1 = new TouchResult(touch.position);
                }
            }

            if (_tap || _longTap || _doubleTap)
            {
                _result1 = new TouchResult(_startPosition);
            }
        }
 public static TouchResult NullResult()
 {
     var result = new TouchResult(Vector3.zero);
     return result;
 }