private void Update()
        {
            if (!ValidateDimension())
            {
                return;
            }

            Vector3 mouseWorldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);

            UpdateTouchLogic(mouseWorldPoint);
            TouchEventInfo touchInfo = CreateTouchInfo(mouseWorldPoint);

            DispatchEvents(touchInfo);
            OnProcess(touchInfo);
        }
        private TouchEventInfo CreateTouchInfo(Vector3 mouseWorldPoint)
        {
            TouchEventInfo info;

            if (_dimension == Dimension.Two)
            {
                RaycastHit2D[] hits = Physics2D.RaycastAll(mouseWorldPoint, Vector2.zero, 1000f);
                info = new TouchEventInfo(this, TouchLogic, hits, mouseWorldPoint);
            }
            else
            {
                RaycastHit[] hits = Physics.RaycastAll(mouseWorldPoint, Vector3.forward, 1000f);
                info = new TouchEventInfo(this, TouchLogic, hits, mouseWorldPoint);
            }

            return(info);
        }
        private void DispatchEvents(TouchEventInfo touchInfo)
        {
            if (TouchLogic.IsFirstDown)
            {
                OnDown(touchInfo);
            }

            if (TouchLogic.IsFirstDownOff)
            {
                OnDownOff(touchInfo);
            }

            if (TouchLogic.IsDrag)
            {
                OnDrag(touchInfo);
            }

            if (TouchLogic.IsRelease)
            {
                OnRelease(touchInfo);
            }
        }