/// <summary> /// 针对OperateObject的处理 /// </summary> public void OnOperateObjectHandle() { if (OperateObject == null) { return; } switch (Operate.InputHand.HandStatus) { case MInputHandStatus.Grabing: var screenDevice = MUtility.MainWorldToScreenPoint(OperateObject.GrabObject.transform.position); var screenMouse = Operate.InputHand.ScreenPoint; Vector3 vpos = MUtility.MainScreenToWorldPoint(new Vector3(screenMouse.x, screenMouse.y, screenDevice.z)); Vector3 position = vpos - Offset; EventUpdateObject.SendListener(OperateObject.GrabObject, position, OperateObject.GrabObject.transform.rotation, HandIndex); break; case MInputHandStatus.Idle: OperateObject = null; break; } }
/// <summary> /// 鼠标控制端的妹帧执行 /// </summary> void OnMouseUpdate() { if (!IsEnable) { return; } //将他的屏幕坐标传递出去 InputHands[0].OnUpdate(Input.mousePosition); #region 标/触摸检测 //触摸 if (!IsMousing && Input.touchCount >= 1) { InputHands[0].SetGrip(); IsTouching = true; observedMode.OnDown(); } if (Input.GetMouseButtonDown(0)) { //鼠标 if (!IsTouching && InputHands[0].IsIdleStatus) { InputHands[0].SetGrip(); IsMousing = true; observedMode.OnDown(); } } if (IsTouching && Input.touchCount == 0) { InputHands[0].SetIdle(); IsTouching = false; ObservedModeUpHandler(); } if (Input.GetMouseButtonUp(0)) { if (IsMousing && !InputHands[0].IsErrorStatus) { InputHands[0].SetIdle(); IsMousing = false; ObservedModeUpHandler(); } } #endregion //不同模式中的不同操作 switch (MSwitchManager.CurrentMode) { case OperateModeType.Rotate: observedMode.OnAchieve(InputHands[0], true); break; case OperateModeType.Zoom: //observedMode.OnAchieve(InputHands[0], false); observedMode.OnZoom(); break; case OperateModeType.Tool: break; default: break; } if (operateObject != null) { switch (InputHands[0].HandStatus) { case MInputHandStatus.Grabing: //需要处理偏移量 var screenDevice = MUtility.MainWorldToScreenPoint(operateObject.GrabObject.transform.position); Vector3 screenMouse = InputHands[0].ScreenPoint; Vector3 vPos = MUtility.MainScreenToWorldPoint(new Vector3(screenMouse.x, screenMouse.y, screenDevice.z)); Vector3 position = vPos - offset; EventUpdateObject.SendListener(operateObject.GrabObject, position, operateObject.GrabObject.transform.rotation, InputHands[0].HandIndex); break; case MInputHandStatus.Idle: this.operateObject = null; break; default: break; } } }
/// <summary> /// 鼠标控制端的妹帧执行 /// </summary> void OnMouseUpdate() { //将他的屏幕坐标传递出去 InputHands[0].OnUpdate(Input.mousePosition); if (Input.GetMouseButtonDown(0)) { InputHands[0].SetGrip(); } if (Input.GetMouseButtonUp(0)) { InputHands[0].SetIdle(); } //如果按下右键 if (Input.GetMouseButtonDown(1)) { IsRotateDown = true; IsRotate = false; } if (Input.GetMouseButtonUp(1)) { IsRotateDown = false; //已经存在旋转,并且在集合中记录 if (IsRotate && ActionConstraint.IsBind(ActionConstraint.Camera_Rotate_Action)) { EventCameraRotate.SendListener(Vector3.zero); } IsRotate = false; ActionConstraint.RemoveBind(ActionConstraint.Camera_Rotate_Action); } //按住右键旋转 if (IsRotateDown) { //向量的模大于2.0时 if (!IsRotate && ActionConstraint.BindCount == 0 && InputHands[0].ScreenVector.magnitude > 2.0f) { //将动作记录到集合中 ActionConstraint.AddBind(ActionConstraint.Camera_Rotate_Action); IsRotate = true; } //已经存在旋转,并且在集合中记录 if (IsRotate && ActionConstraint.IsBind(ActionConstraint.Camera_Rotate_Action)) { EventCameraRotate.SendListener(InputHands[0].ScreenVector); } } //缩放 if (Input.GetAxis("Mouse ScrollWheel") != 0) { float result = Input.GetAxis("Mouse ScrollWheel"); if (!IsZoom && ActionConstraint.BindCount == 0) { ActionConstraint.AddBind(ActionConstraint.Camera_Zoom_Action); IsZoom = true; } //进行缩放 if (IsZoom && ActionConstraint.IsBind(ActionConstraint.Camera_Zoom_Action)) { EventCameraZoom.SendListener(result); } } else { //进行缩放 if (IsZoom && ActionConstraint.IsBind(ActionConstraint.Camera_Zoom_Action)) { EventCameraZoom.SendListener(0); } IsZoom = false; if (ActionConstraint.BindCount > 0) { ActionConstraint.RemoveBind(ActionConstraint.Camera_Zoom_Action); } } if (operateObject != null) { switch (InputHands[0].HandStatus) { case MInputHandStatus.Grabing: //需要处理偏移量 var screenDevice = MUtility.MainWorldToScreenPoint(operateObject.GrabObject.transform.position); Vector3 screenMouse = InputHands[0].ScreenPoint; Vector3 vPos = MUtility.MainScreenToWorldPoint(new Vector3(screenMouse.x, screenMouse.y, screenDevice.z)); Vector3 position = vPos - offset; EventUpdateObject.SendListener(operateObject.GrabObject, position, operateObject.GrabObject.transform.rotation, InputHands[0].HandIndex); break; case MInputHandStatus.Idle: this.operateObject = null; break; default: break; } } }
/// <summary> /// 鼠标控制端的妹帧执行 /// </summary> void OnMouseUpdate() { if (!IsEnable) { return; } //将他的屏幕坐标传递出去 InputHands[0].OnUpdate(Input.mousePosition); if (Input.GetMouseButtonDown(0) && InputHands[0].IsIdleStatus) { InputHands[0].SetGrip(); } if (Input.GetMouseButtonUp(0) && !(InputHands[0].IsRotateZoomStatus || InputHands[0].IsErrorStatus)) { InputHands[0].SetIdle(); } #region 旋转 //如果按下右键 if (Input.GetMouseButtonDown(1)) { IsRotateDown = true; IsRotate = false; } if (Input.GetMouseButtonUp(1)) { IsRotateDown = false; //已经存在旋转,并且在集合中记录 if (IsRotate) { EventCameraRotate.SendListener(Vector3.zero); } IsRotate = false; InputHands[0].HandStatus = MInputHandStatus.Idle; } //按住右键旋转 if (IsRotateDown) { //向量的模大于2.0时 if (!IsRotate && InputHands[0].IsIdleStatus && InputHands[0].ScreenVector.magnitude > 2.0f) { //将动作记录到集合中 InputHands[0].HandStatus = MInputHandStatus.Rotate; IsRotate = true; } //已经存在旋转,并且在集合中记录 if (IsRotate) { EventCameraRotate.SendListener(InputHands[0].ScreenVector); } } #endregion #region 缩放 //缩放 if (Input.GetAxis("Mouse ScrollWheel") != 0) { float result = Input.GetAxis("Mouse ScrollWheel"); if (!IsZoom && InputHands[0].IsIdleStatus) { InputHands[0].HandStatus = MInputHandStatus.Zoom; IsZoom = true; } //进行缩放 if (IsZoom) { EventCameraZoom.SendListener(result); } } else { //进行缩放 if (IsZoom) { EventCameraZoom.SendListener(0); IsZoom = false; InputHands[0].HandStatus = MInputHandStatus.Idle; } } #endregion if (operateObject != null) { switch (InputHands[0].HandStatus) { case MInputHandStatus.Grabing: //需要处理偏移量 var screenDevice = MUtility.MainWorldToScreenPoint(operateObject.GrabObject.transform.position); Vector3 screenMouse = InputHands[0].ScreenPoint; Vector3 vPos = MUtility.MainScreenToWorldPoint(new Vector3(screenMouse.x, screenMouse.y, screenDevice.z)); Vector3 position = vPos - offset; EventUpdateObject.SendListener(operateObject.GrabObject, position, operateObject.GrabObject.transform.rotation, InputHands[0].HandIndex); break; case MInputHandStatus.Idle: this.operateObject = null; break; default: break; } } }
// 双手操作处理 void KinectHandTwo() { //将他的屏幕坐标传递出去 InputHands[0].OnUpdate(MInputKinect.ScreenHandPostion(0)); if (MInputKinect.HandGrip(0)) { InputHands[0].SetGrip(); } if (MInputKinect.HandRelease(0)) { InputHands[0].SetIdle(); } //将他的屏幕坐标传递出去 InputHands[1].OnUpdate(MInputKinect.ScreenHandPostion(1)); if (MInputKinect.HandGrip(1)) { InputHands[1].SetGrip(); } if (MInputKinect.HandRelease(1)) { InputHands[1].SetIdle(); } KinectRotateZoom(); if (rightOperateObject != null) { switch (InputHands[0].HandStatus) { case MInputHandStatus.Grabing: var screenDevice = MUtility.MainWorldToScreenPoint(rightOperateObject.GrabObject.transform.position); Vector3 screenMouse = InputHands[0].ScreenPoint; Vector3 vPos = MUtility.MainScreenToWorldPoint(new Vector3(screenMouse.x, screenMouse.y, screenDevice.z)); //rightOperateObject.GrabObject.transform.position = vPos - rightOffset; Vector3 position = vPos - rightOffset; EventUpdateObject.SendListener(rightOperateObject.GrabObject, position, rightOperateObject.GrabObject.transform.rotation, InputHands[0].HandIndex); //需要处理偏移量 break; case MInputHandStatus.Idle: this.rightOperateObject = null; break; default: break; } } if (leftOperateObject != null) { switch (InputHands[1].HandStatus) { case MInputHandStatus.Grabing: var screenDevice = MUtility.MainWorldToScreenPoint(leftOperateObject.GrabObject.transform.position); Vector3 screenMouse = InputHands[1].ScreenPoint; Vector3 vPos = MUtility.MainScreenToWorldPoint(new Vector3(screenMouse.x, screenMouse.y, screenDevice.z)); //leftOperateObject.GrabObject.transform.position = vPos - leftOffset; Vector3 position = vPos - leftOffset; EventUpdateObject.SendListener(leftOperateObject.GrabObject, position, leftOperateObject.GrabObject.transform.rotation, InputHands[0].HandIndex); //需要处理偏移量 break; case MInputHandStatus.Idle: this.leftOperateObject = null; break; default: break; } } if (kinectHandStartStatus == KinectActiveHandStadus.One) { if (MInputKinect.IsHandActive(0) && !MInputKinect.IsHandActive(1) && isRight == false) { MOperateManager.GetOperateHand(0, OperatePlatform.Kinect).OnEnable(); MOperateManager.GetOperateHand(1, OperatePlatform.Kinect).OnDisable(); isRight = true; isLeft = false; } else if (MInputKinect.IsHandActive(1) && !MInputKinect.IsHandActive(0) && isLeft == false) { MOperateManager.GetOperateHand(1, OperatePlatform.Kinect).OnEnable(); MOperateManager.GetOperateHand(0, OperatePlatform.Kinect).OnDisable(); isLeft = true; isRight = false; } } }