Exemple #1
0
            private void OnDetechHand(long userID, UserManager userManager, KinectHandInteract rightHand, KinectHandInteract leftHand)
            {
                if (rightHand.IsHandInteracting)
                {
                    HandStatus = KinectHandStatus.Enable;
                    userManager.StopOtherUsers(userID);
                    SetUserID(userID);
                    StartHand(0);

                    KinectManager.Instance.SetPrimaryUserID(userID);

                    return;
                }

                if (leftHand.IsHandInteracting)
                {
                    HandStatus = KinectHandStatus.Enable;
                    userManager.StopOtherUsers(userID);
                    SetUserID(userID);
                    StartHand(1);

                    KinectManager.Instance.SetPrimaryUserID(userID);

                    return;
                }
            }
Exemple #2
0
            public UserManager()
            {
                oneHandControl = new OneHandControl();
                twoHandControl = new TwoHandControl();

                rightHandInteract = new KinectHandInteract(0);
                leftHandInteract  = new KinectHandInteract(1);
            }
Exemple #3
0
            private void OnChangeHand(long userID, UserManager userManager, KinectHandInteract rightHand, KinectHandInteract leftHand)
            {
                if (!rightHand.IsEnable)
                {
                    if (leftHand.IsHandInteracting)
                    {
                        StopHand(0);
                        StartHand(1);
                        leftHand.IsEnable = true;
                    }
                    else
                    {
                        leftHand.IsEnable = false;
                    }
                }

                if (!leftHand.IsEnable)
                {
                    if (rightHand.IsHandInteracting)
                    {
                        StopHand(1);
                        StartHand(0);
                        rightHand.IsEnable = true;
                    }
                    else
                    {
                        rightHand.IsEnable = false;
                    }
                }

                if ((!rightHand.IsHandInteracting && !leftHand.IsHandInteracting) ||
                    !userManager.IsUserNear(userID))
                {
                    //操作用户ID设置为0
                    SetUserIDNull();

                    //将手停止
                    //StopHand(2);
                    HandStatus = KinectHandStatus.Identify;

                    userManager.StartUsers();

                    rightHand.IsEnable = false;
                    leftHand.IsEnable  = false;

                    return;
                }

                //如果正在识别中的用户不在检测区域,则检测区域的用户开启检测并允许抢夺控制权
                if (!userManager.IsUserNear(userID))
                {
                    userManager.StartNearUsers();
                }
                else
                {
                    userManager.StopOtherUsers(userID);
                }
            }
Exemple #4
0
            private void OnDetectHand(KinectHandInteract handInteract, long userID)
            {
                handInteract.OnHandInteracting(userID);

                if (handInteract.IsHandInteracting)
                {
                    if (!IsHandActive(handInteract.handIndex))
                    {
                        MLog.WriteLog(userID + "用户检测到手启动——OnDetectHand(),手编号:" + handInteract.handIndex);
                        StartHand(handInteract.handIndex);
                    }
                }
                else
                {
                    if (IsHandActive(handInteract.handIndex))
                    {
                        MLog.WriteLog(userID + "用户检测到手停止——OnDetectHand(),手编号:" + handInteract.handIndex);
                        StopHand(handInteract.handIndex);
                    }
                }
            }
Exemple #5
0
            public void StartDetectHand(long userID, UserManager userManager, KinectHandInteract rightHand, KinectHandInteract leftHand)
            {
                KinectManager kinectManager = KinectManager.Instance;

                //这里的代码是从Kinect SDK的 InteractionManager.cs 复制过来的,用于判断用户是否举起一只手。最终用到的是isLeftHandInteracting和isRightHandInteracting两个bool值。

                leftHand.OnHandInteracting(userID);
                rightHand.OnHandInteracting(userID);

                //判断条件:1.当前没有操作用户。2.当前用户不是操作用户。3.后来加的,只有检测区域的用户才识别。
                if ((UserID == 0 || UserID != userID) && userManager.IsUserNear(userID))
                {
                    OnDetechHand(userID, userManager, rightHand, leftHand);
                    return;
                }

                if (UserID == userID)
                {
                    OnChangeHand(userID, userManager, rightHand, leftHand);
                    return;
                }
            }
Exemple #6
0
        private void Awake()
        {
            InputKinect = this;

            //实例化组件
            var kinectManager = KinectConfig.mainCamera.gameObject.AddComponent <KinectManager>();

            kinectManager.computeUserMap  = true;
            kinectManager.computeColorMap = true;

            kinectGestureListener = KinectConfig.mainCamera.gameObject.AddComponent <KinectGestureListener>();
            kinectManager.gestureListeners.Add(kinectGestureListener);

            leftHandInteract  = new KinectHandInteract(1);
            rightHandInteract = new KinectHandInteract(0);

            kinectCapture = new KinectCapture();

            userManager = new UserManager();

            kinectGestureListener.OnInitialize(userManager);

            DontDestroyOnLoad(gameObject);
        }