コード例 #1
0
    // Update is called once per frame
    void Update()
    {
        // 本函数用来判定,是否点击到了界面,只有没有点击界面,才处理战场内的事件
        // 下面的这两种做法在手机上均无效,只有使用IsPointerOverUIObject()这个自己写的代码才能生效,原因不明.
        //    if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
        //        return;
        //    if (EventSystem.current.IsPointerOverGameObject())
        //        return;

        // 因为检测的是Up消息,所以延迟一帧
//        if (vecLastMousePosition == Vector3.zero)
//            vecLastMousePosition = Input.mousePosition;
        bool over = HexMapCamera.IsPointerOverUIObject(vecLastMousePosition);

        vecLastMousePosition = Input.mousePosition;
        if (over)
        {
            return;
        }

        if (Input.GetMouseButtonDown(0))
        {
            _isMouseDown  = true;
            _downMousePos = Input.mousePosition;
        }

        if (Input.GetMouseButtonUp(0) && _isMouseDown)
        {
            _isMouseDown = false;
            if (Vector3.Distance(Input.mousePosition, _downMousePos) > 100f)
            {
                // 在移动屏幕, 所以不处理鼠标抬起的消息
                return;
            }
            vecLastMousePosition = Vector3.zero;

            if (_isCreatingActor)
            {
                AskCreateUnit(GetCellUnderCursor(), _createActorInfoId);
                ClearCreateActorGroup();
            }
            else if (_isRangeTesting)
            {
                RangeTest();
                _isRangeTesting = false;
                CursorManager.Instance.RestoreCursor();
                _btnRangeTest.transform.Find("Select").gameObject.SetActive(false);
            }
            else
            {
                DoSelection();
            }
        }

        if (CommandManager.Instance.IsCommandRunning())
        {
            DoPathfinding();
        }

        // 实时显示当前被选中的单位的行军路径
        if (_pickInfoMaster.CurrentActor)
        {
            _pickInfoMaster.CurrentActor.UpdatePath();
        }
    }