Exemplo n.º 1
0
        /// <summary>
        /// 变更平台
        /// </summary>
        void ChangePlatform()
        {
            if (!MInputKinect.IsHandActive(2))
            {
                if (MUtility.CurrentPlatform != OperatePlatform.Mouse)
                {
                    mouseController.IsEnable = true;
                    MUtility.CurrentPlatform = OperatePlatform.Mouse;

                    //MLog.WriteLog("切换:鼠标平台");
                    //Debug.Log("切换:鼠标平台");
                }
            }
            else
            {
                if (MUtility.CurrentPlatform != OperatePlatform.Kinect)
                {
                    mouseController.IsEnable = false;
                    MUtility.CurrentPlatform = OperatePlatform.Kinect;

                    //MLog.WriteLog("切换:Kinect平台");
                    //Debug.Log("切换:Kinect平台");
                }
            }
        }
Exemplo n.º 2
0
            public float ZoomCameraToMoveFloat()
            {
                float moveDistance = 0;

                lastDistance = Vector3.Distance(MInputKinect.ScreenHandPostion(0), MInputKinect.ScreenHandPostion(1));

                moveDistance = lastDistance - distance;
                distance     = lastDistance;

                return(moveDistance);
            }
Exemplo n.º 3
0
        // 单手操作处理
        void KinectHandOne()
        {
            if (MInputKinect.IsHandActive(0))
            {
                handIndex = 0;
            }
            else if (MInputKinect.IsHandActive(1))
            {
                handIndex = 1;
            }

            //将他的屏幕坐标传递出去
            InputHands[0].OnUpdate(MInputKinect.ScreenHandPostion(handIndex));

            if (MInputKinect.HandGrip(handIndex))
            {
                InputHands[0].SetGrip();
            }

            if (MInputKinect.HandRelease(handIndex))
            {
                InputHands[0].SetIdle();
            }

            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;

                    //需要处理偏移量

                    break;

                case MInputHandStatus.Idle:

                    this.rightOperateObject = null;
                    break;

                default:
                    break;
                }
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Kinect控制端数据初始化
        /// </summary>
        /// <param name="handModel">Hand model.</param>
        private void KinectInitialize(KinectHandModel handModel)
        {
            InputHands = new Dictionary <int, MInputHand>();

            inputKinect = gameObject.GetComponent <MInputKinect>() ?? gameObject.AddComponent <MInputKinect>();

            MInputKinect.HandModel = handModel;
            IsPlaying = true;

            //实例化右手
            var rightHandUI    = MHandUIManager.CreateHandUI(transform, rightHandOperate.handIcon);
            var rightInputHand = new MInputHand(rightHandOperate.HandIndex, rightHandUI, OperatePlatform.Kinect);

            rightHandUI.name = "kinect-Hand-0";
            InputHands.Add(rightHandOperate.HandIndex, rightInputHand);

            //实例化左手
            var leftHandUI    = MHandUIManager.CreateHandUI(transform, leftHandOperate.handIcon);
            var leftInputHand = new MInputHand(leftHandOperate.HandIndex, leftHandUI, OperatePlatform.Kinect);

            leftHandUI.name = "Kinect-Hand-1";
            InputHands.Add(leftHandOperate.HandIndex, leftInputHand);

            //右手操作端相关初始化与事件绑定
            rightHandOperate.Operate = MOperateManager.AddOperateHand(rightInputHand, this);
            rightHandOperate.BindGrab();

            //左手操作端相关初始化与事件的绑定
            leftHandOperate.Operate = MOperateManager.AddOperateHand(leftInputHand, this);
            leftHandOperate.BindGrab();

            IsEnable = true;

            //mouseController = gameObject.GetComponent<MouseController>() ?? gameObject.AddComponent<MouseController>();
            //mouseController.IsEnable = false;

            //检查一次是否激活手
            HandStop(2);//默认也禁止
        }
Exemplo n.º 5
0
        /// <summary>
        /// 设置手的状态
        /// </summary>
        /// <param name="handIndex">Hand index.</param>
        private void SetHandStatus(int handIndex)
        {
            if (MInputKinect.IsHandActive(handIndex))
            {
                //发送抓取事件等相关事件
                InputHands[handIndex].OnUpdate(MInputKinect.ScreenHandPostion(handIndex));

                if (MInputKinect.HandGrip(handIndex))
                {
                    InputHands[handIndex].SetGrip();
                }

                if (MInputKinect.HandRelease(handIndex))
                {
                    InputHands[handIndex].SetIdle();
                }

                if (MInputKinect.HandLasso(handIndex))
                {
                    InputHands[handIndex].SetLasso();
                }
            }
        }
Exemplo n.º 6
0
 public void OnHandGrip()
 {
     distance     = Vector3.Distance(MInputKinect.ScreenHandPostion(0), MInputKinect.ScreenHandPostion(1));
     lastDistance = distance;
 }
Exemplo n.º 7
0
        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;
                }
            }
        }
Exemplo n.º 8
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;
                }
            }
        }