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; } }
public UserManager() { oneHandControl = new OneHandControl(); twoHandControl = new TwoHandControl(); rightHandInteract = new KinectHandInteract(0); leftHandInteract = new KinectHandInteract(1); }
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); } }
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); } } }
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; } }
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); }