Exemplo n.º 1
0
            /// <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;
                }
            }
Exemplo n.º 2
0
        /// <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;
                }
            }
        }
Exemplo n.º 3
0
        /// <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;
                }
            }
        }
Exemplo n.º 4
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;
                }
            }
        }
Exemplo n.º 5
0
        // 双手操作处理
        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;
                }
            }
        }