// 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(); } }