public void OnZoom() { if (Input.touchCount >= 2) { Touch touch1 = Input.GetTouch(0); Touch touch2 = Input.GetTouch(1); if (touch2.phase == TouchPhase.Began) { lastTouch1 = touch1; lastTouch2 = touch2; return; } float lastDis = Vector2.Distance(lastTouch1.position, lastTouch2.position); float dis = Vector2.Distance(touch1.position, touch2.position); float offset = (dis - lastDis) * 0.001f; //float dir = 1; //if (offset<0) // dir=-1; //offset=MathHelper.Damping(offset,10)*dir; EventCameraZoom.SendListener(offset); lastTouch1 = touch1; lastTouch2 = touch2; } else { float offset = Input.GetAxis("Mouse ScrollWheel"); // offset =MathHelper.Damping(offset,10); EventCameraZoom.SendListener(offset); } }
/// <summary> /// 开启相机的无限缩放 /// </summary> void StartCameraZoom() { mainCamera = MUtility.MainCamera; //EventCameraZoom.AddListener(HandZoomFun); EventCameraZoom.AddListener(MouseZoomFun); }
/// <summary> /// 缩放 /// </summary> private void OnZoom() { if (IsZoom()) { if (!IsZooming) { InputHands[0].HandStatus = MInputHandStatus.Zoom; InputHands[1].HandStatus = MInputHandStatus.Zoom; zoomOperate.OnHandGrip(); IsZooming = true; } float zoomValue = zoomOperate.ZoomCameraToMoveFloat() / 10000; if (IsZooming) { EventCameraZoom.SendListener(zoomValue); } } else { if (IsZooming) { zoomOperate.OnHandIdle(); EventCameraZoom.SendListener(0); InputHands[0].HandStatus = MInputHandStatus.Idle; InputHands[1].HandStatus = MInputHandStatus.Idle; IsZooming = false; } } }
/// <summary> /// 关闭相机的无限缩放 /// </summary> public void StopCameraZoom() { //EventCameraZoom.RemoveListener(HandZoomFun); EventCameraZoom.RemoveListener(MouseZoomFun); isEnable = false; isZoomInitialization = false; }
void OnKinectUpdate() { if (!isEnable) { return; } SetHandStatus(0); //右手 SetHandStatus(1); //左手 rightHandOperate.OnOperateObjectHandle(); leftHandOperate.OnOperateObjectHandle(); //不同模式中的不同操作 switch (MSwitchManager.CurrentMode) { //不用区分是左手旋转还是右手旋转,双手使用时会切换到缩放模式 case OperateModeType.Rotate: if (GetInputHand(0).HandStatus == MInputHandStatus.Grip) { rightHandOperate.OnGestureAction(leftHandOperate, true); } if (GetInputHand(1).HandStatus == MInputHandStatus.Grip) { leftHandOperate.OnGestureAction(rightHandOperate, true); } break; case OperateModeType.Zoom: Vector2 left = leftHandOperate.Operate.InputHand.ScreenPoint; Vector2 right = rightHandOperate.Operate.InputHand.ScreenPoint; if (operateModeType != MSwitchManager.CurrentMode) { lastLeftPos = left; lastRightPos = right; } float lastDis = Vector2.Distance(lastRightPos, lastLeftPos); float dis = Vector2.Distance(left, right); float offset = (dis - lastDis) / 1200; EventCameraZoom.SendListener(offset); lastLeftPos = left; lastRightPos = right; //rightHandOperate.OnGestureAction(leftHandOperate,false); //leftHandOperate.OnGestureAction(rightHandOperate,false); break; case OperateModeType.Tool: break; default: break; } operateModeType = MSwitchManager.CurrentMode; }
/// <summary> /// 具体实现,是旋转还是缩放 /// </summary> /// <param name="inputHand"></param> /// <param name="IsRotate"></param> public void OnAchieve(MInputHand inputHand, bool IsRotate) { ////如果按下右键 //if (Input.GetMouseButtonDown(0)) //{ // IsDown = true; // IsObserved = false; //} //if (Input.GetMouseButtonUp(0)) //{ // IsDown = false; // //已经存在旋转,并且在集合中记录 // if (IsObserved) // { // if (IsRotate) // EventCameraRotate.SendListener(Vector3.zero); // else // EventCameraZoom.SendListener(0); // } // IsObserved = false; // inputHand.HandStatus = MInputHandStatus.Idle; //} //按住右键旋转 if (IsDown) { //向量的模大于2.0时 if (!IsObserved && inputHand.ScreenVector.magnitude > 2.0f) { //将动作记录到集合中 inputHand.HandStatus = IsRotate ? MInputHandStatus.Rotate : MInputHandStatus.Zoom; IsObserved = true; } //已经存在旋转,并且在集合中记录 if (IsObserved) { if (IsRotate) { Vector3 vector = inputHand.ScreenVector; EventCameraRotate.SendListener(vector); } else { EventCameraZoom.SendListener(inputHand.ScreenVector.x / 1200); } } } }
/// <summary> /// 开启相机对中心点缩放 /// </summary> /// <param name="zoomcenter">缩放中心</param> /// <param name="mindistance">最近距离</param> /// <param name="maxdistance">最大距离</param> public void StartCameraZoomWithCenter(Transform zoomcenter, float mindistance, float maxdistance) { mainCamera = MUtility.MainCamera;; zoomTarget = zoomcenter; zoomMinDis = mindistance; zoomMaxDis = maxdistance; //EventCameraZoom.AddTwoHandDisEvent(HandZoomFun); EventCameraZoom.AddListener(MouseZoomFun); isEnable = true; isZoomInitialization = true; }
/// <summary> /// 暂停或者重启动 /// </summary> /// <param name="isenable"></param> public void PauseOrRestart(bool isenable) { if (!isZoomInitialization) { return; } if (isenable) { //EventCameraZoom.AddTwoHandDisEvent(HandZoomFun); EventCameraZoom.AddListener(MouseZoomFun); } else { //EventCameraZoom.RemoveTwoHandDisEvent(HandZoomFun); EventCameraZoom.RemoveListener(MouseZoomFun); } }
/// <summary> /// 抬起时 /// </summary> /// <param name="IsRotate"></param> public void OnUp(bool IsRotate) { IsDown = false; //已经存在旋转,并且在集合中记录 if (IsObserved) { if (IsRotate) { EventCameraRotate.SendListener(Vector3.zero); } else { EventCameraZoom.SendListener(0); } } IsObserved = false; }
void ontest() { gameObject.AddGrabObject(onGrab); gameObject.RemoveGrabObject(onGrab); gameObject.RemoveGrabObjectAll(); gameObject.AddReleaseObject(OnRelease); gameObject.RemoveReleaseObject(OnRelease); gameObject.RemoveReleaseObjectAll(); gameObject.AddRayTargetEnter(OnTargetEnter); gameObject.RemoveRayTargetEnter(OnTargetEnter); gameObject.RemoveRayTargetEnter(); gameObject.AddRayTargetExit(OnTargetExit); gameObject.RemoveRayTargetExit(); gameObject.RemoveRayTargetExit(OnTargetExit); EventHandRay.AddListener(onRay); EventHandRay.RemoveListener(onRay); EventHandRays.AddListener(OnRays); EventHandRays.RemoveListener(OnRays); EventHandStart.AddListener(onstart); EventHandStart.RemoveListener(onstart); EventHandStop.AddListener(onstop); EventHandStop.RemoveListener(onstop); EventHandUIRay.AddListener(onRay); EventHandUIRay.RemoveListener(onRay); EventCameraZoom.AddListener(onzoom); EventCameraZoom.RemoveListener(onzoom); EventCameraRotate.AddListener(onrotate); EventCameraRotate.RemoveListener(onrotate); EventHandGrabObject.AddListener(ongrabobject); EventHandGrabObject.RemoveListener(ongrabobject); EventHandReleaseObject.AddListener(onreleaseobject); EventHandReleaseObject.RemoveListener(onreleaseobject); EventHandGrabObjectKey.AddListener(gameObject, onGrab); EventHandGrabObjectKey.RemoveListener(gameObject, onGrab); EventHandReleaseObjectKey.AddListener(gameObject, OnRelease); EventHandReleaseObjectKey.RemoveListener(gameObject, OnRelease); EventHandRayTarget.AddListener(onraytarget); EventHandRayTarget.RemoveListener(onraytarget); EventHandRayTargetEnter.AddListener(gameObject, OnTargetEnter); EventHandRayTargetEnter.RemoveListener(gameObject, OnTargetEnter); EventHandRayTargetExit.AddListener(gameObject, OnTargetExit); EventHandRayTargetExit.RemoveListener(gameObject, OnTargetExit); EventHandUIRayEnter.AddListener(gameObject, onuienter); EventHandUIRayEnter.RemoveListener(gameObject, onuienter); EventHandUIRayExit.AddListener(gameObject, onuiexit); EventHandUIRayExit.RemoveListener(gameObject, onuiexit); EventHandUIRay.AddListener(onRay); EventHandUIRay.RemoveListener(onRay); }
internal override void OnLeave(IFsm <OperateSystem> fSM, bool v) { base.OnLeave(fSM, v); EventCameraZoom.SendListener(0); }
/// <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; } } }
/// <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; } } }
void KinectRotateZoom() { if (MInputKinect.HandGrip(0)) { handIndex = 0; isRightGrip = true; } else if (MInputKinect.HandRelease(0)) { isRightGrip = false; } if (MInputKinect.HandGrip(1)) { handIndex = 1; isLeftGrip = true; } else if (MInputKinect.HandRelease(1)) { isLeftGrip = false; handIndex = 0; } if (IsRotate) // 旋转 { if ((isLeftGrip && !isRightGrip) || (isRightGrip && !isLeftGrip)) { if (!isTempRotate && ActionConstraint.BindCount == 0 && InputHands[0].ScreenVector.magnitude > 2.0f) { //将动作记录到集合中 ActionConstraint.AddBind(ActionConstraint.Camera_Rotate_Action); isTempRotate = true; } //已经存在旋转,并且在集合中记录 if (isTempRotate && ActionConstraint.IsBind(ActionConstraint.Camera_Rotate_Action)) { EventCameraRotate.SendListener(InputHands[handIndex].ScreenVector); } } else { EventCameraRotate.SendListener(Vector3.zero); } } if (IsZoom) // 缩放 { if (isRightGrip && isLeftGrip) { if (!isTempZoom) { if (twoHandDistance != null) { twoHandDistance.TwoHandGrip(); } isTempZoom = true; } if (twoHandDistance == null) { twoHandDistance = new TwoHandDistance(); twoHandDistance.TwoHandGrip(); } else { float result = twoHandDistance.ZoomCameraToMoveFloat() / 10000; if (result != 0 /* && isTempZoom *//*&& ActionConstraint.IsBind(ActionConstraint.Camera_Zoom_Action)*/) { EventCameraZoom.SendListener(result); } } } else if (!isRightGrip && !isLeftGrip && twoHandDistance != null) { twoHandDistance.TwoHandIdle(); EventCameraZoom.SendListener(0); isTempZoom = false; } } }