public void FinishJigsaw(JigsawController jigsaw) { _jigsaw.Remove(jigsaw); if (_jigsaw.Count == 0) { if (OnFinishGame != null) { OnFinishGame.Invoke(); } } }
// Update is called once per frame void Update() { if (Input.mousePresent) { //点击 if (Input.GetMouseButtonDown(0)) { //ray _IsMousePressed = true; _state = InputState.Press; } if (_IsMousePressed && Input.GetMouseButtonUp(0)) { //_cacheJigsaw = null; _IsMousePressed = false; _state = InputState.Release; } //拖拽 if (_cacheJigsaw != null && _IsMousePressed && Input.GetMouseButton(0)) { _state = InputState.Drag; } switch (_state) { case InputState.NoPress: break; case InputState.Press: { var ray = _camera.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider != null && hit.collider.gameObject.CompareTag(JigsawTag)) { var jcotrl = hit.collider.gameObject.GetComponent <JigsawController>(); if (jcotrl.CanPick()) { if (_cacheJigsaw != null) { _cacheJigsaw.OnUnSelect(); } _cacheJigsaw = jcotrl; _cacheJigsaw.OnSelect(AdsorbentDis); } } } } break; case InputState.Drag: { var ray = _camera.ScreenPointToRay(Input.mousePosition); var pos = ray.direction * (_cacheJigsaw.transform.position.z - _camera.transform.position.z); var newpos = new Vector3(_camera.transform.position.x + pos.x, _camera.transform.position.y + pos.y, _cacheJigsaw.transform.position.z); _cacheJigsaw.transform.position = newpos; _cacheJigsaw.OnDrag(); } break; case InputState.Release: { if (_cacheJigsaw != null) { _cacheJigsaw.OnUnSelect(); } _cacheJigsaw = null; } break; } } }