Exemple #1
0
    void CreateRay(Action <GameObject> action)
    {
        bool hitObject = false;

        switch (_mode)
        {
        case Mode.GameObject:
            int layerMask = _interaction != null ? 1 << _interaction.GetLayer() : 0;

            ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask) && IsValidTarget(hit.collider.gameObject))
            {
                action(hit.collider.gameObject);
                hitObject = true;
            }
            break;

        case Mode.UI:
            _pointerEventData          = new PointerEventData(_eventSystem);
            _pointerEventData.position = Input.mousePosition;
            _results.Clear();
            _raycaster.Raycast(_pointerEventData, _results);
            foreach (RaycastResult result in _results)
            {
                if (IsValidTarget(result.gameObject))
                {
                    action(result.gameObject);
                    hitObject = true;
                    break;
                }
            }
            break;

        default:
            throw new NotImplementedException();
        }

        if (!hitObject)
        {
            action(null);
        }
    }
Exemple #2
0
    public void UpdateInteraction()
    {
        int layerMask = 1 << _interaction.GetLayer();

        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask))
        {
            if (!_isOver)
            {
                _isOver = true;
                _interaction.OnMouseEnter(hit.point);
            }
            else
            {
                if (Input.GetMouseButtonDown(0))
                {
                    _interaction.OnMouseClick(hit.point);
                }
                else
                {
                    _interaction.OnMouseOver(hit.point);
                }
            }
        }
        else if (_isOver)
        {
            _isOver = false;
            _interaction.OnMouseExit();
        }


        if (Input.GetKeyDown(KeyCode.Escape))
        {
            CancelInteraction();
        }
    }