Ejemplo n.º 1
0
        public SGTouchController(Camera camera, LayerMask[] sortinglayerMasks, string chainClickName = "")
        {
            _touchOverUGUI = new SGTouchOverUGUI();
            _touchOverUGUI.Initial();

            _touchRaycast2D = new SGTouchRayCast2D(camera, sortinglayerMasks);

            _touchCovers = new SGTouchCover[MAX_TOUCH_COUNT];
            for (var i = 0; i < MAX_TOUCH_COUNT; ++i)
            {
                _touchCovers[i] = new SGTouchCover();
            }

            _isPause        = false;
            _chainClickName = chainClickName;
        }
Ejemplo n.º 2
0
        private void ProcessTouchCover(SGTouchCover touchCover)
        {
            if (_touchOverUGUI.IsTouchedOverUGUI(touchCover.Position))
            {
                touchCover.Reset();
                return;
            }

            if (_touchRaycast2D.TryGetRaycast2DObject(touchCover, out var hit2dObj))
            {
                switch (touchCover.Phase)
                {
                case SGTouchPhase.Began:
                {
                    touchCover.SetInstanceId(hit2dObj.GetInstanceID());
                    _onTouchBegan?.Invoke(touchCover);
                }
                break;

                case SGTouchPhase.Stationary:
                {
                    if (touchCover.IsTouched(hit2dObj.GetInstanceID()) ||
                        IsPolygonCollider(hit2dObj, _chainClickName))    // 按住连续点击
                    {
                        _onTouchStationary?.Invoke(touchCover);
                    }
                    else
                    {
                        TouchEnd(touchCover);
                    }
                }
                break;

                case SGTouchPhase.End:
                {
                    TouchEnd(touchCover);
                }
                break;
                }
            }
            else
            {
                TouchEnd(touchCover);
            }
        }
Ejemplo n.º 3
0
        public bool TryGetRaycast2DObject(SGTouchCover touchCover, out GameObject hit2dObj)
        {
            hit2dObj          = null;
            _screenPointToRay = _camera.ScreenPointToRay(touchCover.Position);
            var n = _sortinglayerMasks.Length;

            for (var i = 0; i < n; ++i)
            {
                if (Physics2D.GetRayIntersectionNonAlloc(_screenPointToRay,
                                                         _raycastHit2Ds, raycastDistance, _sortinglayerMasks[i]) > 0)
                {
                    hit2dObj = _raycastHit2Ds[0].collider.gameObject;
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 4
0
 private void TouchEnd(SGTouchCover touchCover)
 {
     _onTouchEnd?.Invoke(touchCover);
     touchCover.Reset();
 }