public void HandGripDetected(long userId, int userIndex, bool isRightHand, bool isHandInteracting, Vector3 handScreenPos) { if (!isHandInteracting || !interactionManager) { return; } if (userId != interactionManager.GetUserID()) { return; } lastHandEvent = nowHandEvent; nowHandEvent = InteractionManager.HandEventType.Grip; //isLeftHandDrag = !isRightHand; screenNormalPos = handScreenPos; }
public void HandReleaseDetected(long userId, int userIndex, bool isRightHand, bool isHandInteracting, Vector3 handScreenPos) { if (userIndex != playerIndex) { return; } if (!isRightHand) { isLeftHandInteracting = isHandInteracting; leftHandEvent = InteractionManager.HandEventType.Release; } else { isRightHandInteracting = isHandInteracting; rightHandEvent = InteractionManager.HandEventType.Release; } }
private void OnGUI() { InteractionManager instance = InteractionManager.Instance; Texture x = null; if ((bool)instance && instance.IsInteractionInited()) { if (isLeftHanded) { lastHandEvent = instance.GetLastLeftHandEvent(); if (lastHandEvent == InteractionManager.HandEventType.Grip) { x = gripHandTexture; } else if (lastHandEvent == InteractionManager.HandEventType.Release) { x = releaseHandTexture; } } else { lastHandEvent = instance.GetLastRightHandEvent(); if (lastHandEvent == InteractionManager.HandEventType.Grip) { x = gripHandTexture; } else if (lastHandEvent == InteractionManager.HandEventType.Release) { x = releaseHandTexture; } } } if (x == null) { x = normalHandTexture; } if (cursorPos != Vector2.zero && x != null) { Vector3 vector = new Vector3(cursorPos.x * (float)Screen.width, cursorPos.y * (float)Screen.height, 0f); handCursor.transform.position = vector; Vector3.Lerp(handCursor.transform.position, vector, 2f * Time.deltaTime); } }
void Update() { // by default set the main-camera to be screen-camera if (screenCamera == null) { screenCamera = Camera.main; } // get the interaction manager instance if (interactionManager == null) { interactionManager = InteractionManager.Instance; } // get all buttons in scene btns = GameObject.FindObjectsOfType <Button>(); if (interactionManager != null && interactionManager.IsInteractionInited()) { // convert the normalized screen pos to pixel pos screenNormalPos = interactionManager.IsLeftHandPrimary() ? interactionManager.GetLeftHandScreenPos() : interactionManager.GetRightHandScreenPos(); screenPixelPos.x = (int)(screenNormalPos.x * (screenCamera ? screenCamera.pixelWidth : Screen.width)); screenPixelPos.y = (int)(screenNormalPos.y * (screenCamera ? screenCamera.pixelHeight : Screen.height)); if (lastOnButton == null) { foreach (Button btn in btns) { if (RectTransformUtility.RectangleContainsScreenPoint(btn.image.rectTransform, screenPixelPos, null)) { lastOnButton = btn; btn.image.color = btn_focused; break; } } } else { if (!RectTransformUtility.RectangleContainsScreenPoint(lastOnButton.image.rectTransform, screenPixelPos, null)) { lastOnButton.image.color = btn_normal; lastOnButton = null; return; } if (lastHandEvent != InteractionManager.HandEventType.Grip && nowHandEvent == InteractionManager.HandEventType.Grip) { if (lastOnButton && lastGripTime < 0) { lastGripTime = Time.time; } if (lastOnButton == null) { lastGripTime = -1; lastHandEvent = InteractionManager.HandEventType.Grip; } if (lastGripTime > 0 && Time.time - lastGripTime > gripDelay) { lastOnButton.image.color = btn_pressed; lastOnButton.onClick.Invoke(); lastHandEvent = InteractionManager.HandEventType.Grip; lastGripTime = -1; } } else if (lastHandEvent == InteractionManager.HandEventType.Grip && nowHandEvent != InteractionManager.HandEventType.Grip) { lastOnButton.image.color = btn_focused; } } } }
// Update is called once per frame void Update() { if (interactionManager != null && interactionManager.IsInteractionInited() && manager.IsUserDetected(0)) { right_cube.position = ScreenToPixel(interactionManager.GetRightHandScreenPos()) / 100; left_cube.position = ScreenToPixel(interactionManager.GetLeftHandScreenPos()) / 100; RightHandEvent = interactionManager.GetRightHandEvent(); LeftHandEvent = interactionManager.GetLeftHandEvent(); RightHand_pos = interactionManager.GetRightHandScreenPos(); LeftHand_pos = interactionManager.GetLeftHandScreenPos(); if (RightHandEvent != InteractionManager.HandEventType.Grip && RightHandEvent != InteractionManager.HandEventType.None) { RightHandGrip_pos = interactionManager.GetRightHandScreenPos(); RightHandVerticalEvent = HandGripVerticalType.None; RightHandHorizontalEvent = HandGripHorizontalType.None; } else { if (RightHand_pos.x < RightHandGrip_pos.x && Mathf.Abs(RightHand_pos.x - RightHandGrip_pos.x) > 0.1f) { RightHandHorizontalEvent = HandGripHorizontalType.Left; } else if (RightHand_pos.x > RightHandGrip_pos.x && Mathf.Abs(RightHand_pos.x - RightHandGrip_pos.x) > 0.1f) { RightHandHorizontalEvent = HandGripHorizontalType.Right; } else if (Mathf.Abs(RightHand_pos.x - RightHandGrip_pos.x) < 0.1f) { RightHandHorizontalEvent = HandGripHorizontalType.None; } if (RightHand_pos.y > RightHandGrip_pos.y && Mathf.Abs(RightHand_pos.y - RightHandGrip_pos.y) > 0.1f) { RightHandVerticalEvent = HandGripVerticalType.Up; } else if (RightHand_pos.y < RightHandGrip_pos.y && Mathf.Abs(RightHand_pos.y - RightHandGrip_pos.y) > 0.1f) { RightHandVerticalEvent = HandGripVerticalType.Down; } else if (Mathf.Abs(RightHand_pos.y - RightHandGrip_pos.y) < 0.1f) { RightHandVerticalEvent = HandGripVerticalType.None; } } if (LeftHandEvent != InteractionManager.HandEventType.Grip && LeftHandEvent != InteractionManager.HandEventType.None) { LeftHandGrip_pos = interactionManager.GetLeftHandScreenPos(); LeftHandHorizontalEvent = HandGripHorizontalType.None; LeftHandVerticalEvent = HandGripVerticalType.None; } else { if (LeftHand_pos.x < LeftHandGrip_pos.x && Mathf.Abs(LeftHand_pos.x - LeftHandGrip_pos.x) > 0.1f) { LeftHandHorizontalEvent = HandGripHorizontalType.Left; } else if (LeftHand_pos.x > LeftHandGrip_pos.x && Mathf.Abs(LeftHand_pos.x - LeftHandGrip_pos.x) > 0.1f) { LeftHandHorizontalEvent = HandGripHorizontalType.Right; } else if (Mathf.Abs(LeftHand_pos.x - LeftHandGrip_pos.x) < 0.1f) { LeftHandHorizontalEvent = HandGripHorizontalType.None; } if (LeftHand_pos.y > LeftHandGrip_pos.y && Mathf.Abs(LeftHand_pos.y - LeftHandGrip_pos.y) > 0.1f) { LeftHandVerticalEvent = HandGripVerticalType.Up; } else if (LeftHand_pos.y < LeftHandGrip_pos.y && Mathf.Abs(LeftHand_pos.y - LeftHandGrip_pos.y) > 0.1f) { LeftHandVerticalEvent = HandGripVerticalType.Down; } else if (Mathf.Abs(LeftHand_pos.y - LeftHandGrip_pos.y) < 0.1f) { LeftHandVerticalEvent = HandGripVerticalType.None; } } if (LeftHandEvent == InteractionManager.HandEventType.Grip && RightHandEvent == InteractionManager.HandEventType.Grip && RightHandVerticalEvent == HandGripVerticalType.None && RightHandHorizontalEvent == HandGripHorizontalType.None && LeftHandHorizontalEvent == HandGripHorizontalType.None && LeftHandVerticalEvent == HandGripVerticalType.None) { t += Time.deltaTime; if (t > 2) { handHover = true; } } else { handHover = false; t = 0; } if (LeftHandEvent == InteractionManager.HandEventType.Release && RightHandEvent == InteractionManager.HandEventType.Release && game_ctr.UISTATE != GameCtr.UIState.Close) { s += Time.deltaTime; c += Time.deltaTime; if (s > 6) { if (!standby) { standby = true; s = 0; } else { standby = false; s = 0; } } if (c > 10) { c = 0; s = 0; close = true; } else { close = false; } } else { //standby = false; s = 0; c = 0; close = false; } //Debug.Log("Left:" + LeftHandEvent + " "+ LeftHandHorizontalEvent + " " + LeftHandVerticalEvent); } }
/// <summary> /// Updates the avatar each frame. /// </summary> /// <param name="UserID">User ID</param> public void UpdateAvatar(Int64 UserID) { if (!gameObject.activeInHierarchy) { return; } // Get the KinectManager instance if (kinectManager == null) { kinectManager = KinectManager.Instance; } // move the avatar to its Kinect position if (!externalRootMotion) { MoveAvatar(UserID); } // get the left hand state and event if (kinectManager && kinectManager.GetJointTrackingState(UserID, (int)KinectInterop.JointType.HandLeft) != KinectInterop.TrackingState.NotTracked) { KinectInterop.HandState leftHandState = kinectManager.GetLeftHandState(UserID); InteractionManager.HandEventType leftHandEvent = InteractionManager.HandStateToEvent(leftHandState, lastLeftHandEvent); if (leftHandEvent != InteractionManager.HandEventType.None) { lastLeftHandEvent = leftHandEvent; } } // get the right hand state and event if (kinectManager && kinectManager.GetJointTrackingState(UserID, (int)KinectInterop.JointType.HandRight) != KinectInterop.TrackingState.NotTracked) { KinectInterop.HandState rightHandState = kinectManager.GetRightHandState(UserID); InteractionManager.HandEventType rightHandEvent = InteractionManager.HandStateToEvent(rightHandState, lastRightHandEvent); if (rightHandEvent != InteractionManager.HandEventType.None) { lastRightHandEvent = rightHandEvent; } } // rotate the avatar bones for (var boneIndex = 0; boneIndex < bones.Length; boneIndex++) { if (!bones[boneIndex]) { continue; } if (boneIndex2JointMap.ContainsKey(boneIndex)) { KinectInterop.JointType joint = !mirroredMovement ? boneIndex2JointMap[boneIndex] : boneIndex2MirrorJointMap[boneIndex]; TransformBone(UserID, joint, boneIndex, !mirroredMovement); } else if (specIndex2JointMap.ContainsKey(boneIndex)) { // special bones (clavicles) List <KinectInterop.JointType> alJoints = !mirroredMovement ? specIndex2JointMap[boneIndex] : specIndex2MirrorMap[boneIndex]; if (alJoints.Count >= 2) { //Debug.Log(alJoints[0].ToString()); Vector3 baseDir = alJoints[0].ToString().EndsWith("Left") ? Vector3.left : Vector3.right; TransformSpecialBone(UserID, alJoints[0], alJoints[1], boneIndex, baseDir, !mirroredMovement); } } } //update relative position info updatePositionInfo_(UserID); }
/// <summary> /// Updates the avatar each frame. /// </summary> /// <param name="UserID">User ID</param> public void UpdateAvatar(Int64 UserID) { PlayerDetected = true; if (!gameObject.activeInHierarchy) { return; } // Get the KinectManager instance if (kinectManager == null) { kinectManager = KinectManager.Instance; ColorImageWidth = kinectManager.GetColorImageWidth(); ColorImageHeight = kinectManager.GetColorImageHeight(); } // for rendering the head //**************************************** // if (rawImage) { rawImage.texture = kinectManager.GetUsersClrTex(); int HeadIndex = 3;// (int)TrackedHead; if (kinectManager.IsJointTracked(UserID, HeadIndex)) { Vector3 posJoint = kinectManager.GetRawSkeletonJointPos(UserID, HeadIndex); if (posJoint != Vector3.zero) { // 3d position to depth Vector2 posDepth = kinectManager.GetDepthMapPosForJointPos(posJoint); // depth pos to color pos Vector2 posColor = kinectManager.GetColorMapPosForDepthPos(posDepth); float UVrecPosX = (float)posColor.x / ColorImageWidth; float UVrecPosY = (float)posColor.y / ColorImageHeight; UVrecPosX -= HeadImageWidth / 2.5f; UVrecPosY -= HeadImageHeight / 2f; // Vector3 localPos = new Vector3(scaleX * 10f - 5f, 0f, scaleY * 10f - 5f); // 5f is 1/2 of 10f - size of the plane // Vector3 vPosOverlay = backgroundImage.transform.TransformPoint(localPos); //Vector3 vPosOverlay = BottomLeft + ((vRight * scaleX) + (vUp * scaleY)); rawImage.uvRect = new Rect(Mathf.Lerp(rawImage.uvRect.x, UVrecPosX, smoothFactor * Time.deltaTime), Mathf.Lerp(rawImage.uvRect.y, UVrecPosY, smoothFactor * Time.deltaTime), HeadImageHeight, HeadImageWidth); // Vector3 vPosOverlay = Camera.main.ViewportToWorldPoint(new Vector3(scaleX, scaleY, distanceToCamera)); // OverlayObject.transform.position = Vector3.Lerp(OverlayObject.transform.position, vPosOverlay, smoothFactor * Time.deltaTime); } } } //**************************** // move the avatar to its Kinect position if (!externalRootMotion) { MoveAvatar(UserID); } // get the left hand state and event if (kinectManager && kinectManager.GetJointTrackingState(UserID, (int)KinectInterop.JointType.HandLeft) != KinectInterop.TrackingState.NotTracked) { KinectInterop.HandState leftHandState = kinectManager.GetLeftHandState(UserID); InteractionManager.HandEventType leftHandEvent = InteractionManager.HandStateToEvent(leftHandState, lastLeftHandEvent); if (leftHandEvent != InteractionManager.HandEventType.None) { lastLeftHandEvent = leftHandEvent; } } // get the right hand state and event if (kinectManager && kinectManager.GetJointTrackingState(UserID, (int)KinectInterop.JointType.HandRight) != KinectInterop.TrackingState.NotTracked) { KinectInterop.HandState rightHandState = kinectManager.GetRightHandState(UserID); InteractionManager.HandEventType rightHandEvent = InteractionManager.HandStateToEvent(rightHandState, lastRightHandEvent); if (rightHandEvent != InteractionManager.HandEventType.None) { lastRightHandEvent = rightHandEvent; } } // rotate the avatar bones for (var boneIndex = 0; boneIndex < bones.Length; boneIndex++) { if (!bones[boneIndex]) { continue; } if (boneIndex2JointMap.ContainsKey(boneIndex)) { KinectInterop.JointType joint = !mirroredMovement ? boneIndex2JointMap[boneIndex] : boneIndex2MirrorJointMap[boneIndex]; TransformBone(UserID, joint, boneIndex, !mirroredMovement); } else if (specIndex2JointMap.ContainsKey(boneIndex)) { // special bones (clavicles) List <KinectInterop.JointType> alJoints = !mirroredMovement ? specIndex2JointMap[boneIndex] : specIndex2MirrorMap[boneIndex]; if (alJoints.Count >= 2) { //Debug.Log(alJoints[0].ToString()); Vector3 baseDir = alJoints[0].ToString().EndsWith("Left") ? Vector3.left : Vector3.right; TransformSpecialBone(UserID, alJoints[0], alJoints[1], boneIndex, baseDir, !mirroredMovement); } } } }
void OnGUI() { InteractionManager intManager = InteractionManager.Instance; Texture texture = null; if(intManager && intManager.IsInteractionInited()) { if(isLeftHanded) { lastHandEvent = intManager.GetLastLeftHandEvent(); if(lastHandEvent == InteractionManager.HandEventType.Grip) texture = gripHandTexture; else if(lastHandEvent == InteractionManager.HandEventType.Release) texture = releaseHandTexture; } else { lastHandEvent = intManager.GetLastRightHandEvent(); if(lastHandEvent == InteractionManager.HandEventType.Grip) texture = gripHandTexture; else if(lastHandEvent == InteractionManager.HandEventType.Release) texture = releaseHandTexture; } } if(texture == null) { texture = normalHandTexture; } if((cursorPos != Vector2.zero) && (texture != null)) { //handCursor.transform.position = cursorScreenPos; // Vector3.Lerp(handCursor.transform.position, cursorScreenPos, 3 * Time.deltaTime); Rect rectTexture = new Rect(cursorPos.x * Screen.width - texture.width / 2, (1f - cursorPos.y) * Screen.height - texture.height / 2, texture.width, texture.height); GUI.DrawTexture(rectTexture, texture); } }
/// <summary> /// Updates the avatar each frame. /// </summary> /// <param name="UserID">User ID</param> public void UpdateAvatar(Int64 UserID) { if(!gameObject.activeInHierarchy) return; // Get the KinectManager instance if(kinectManager == null) { kinectManager = KinectManager.Instance; } // move the avatar to its Kinect position if(!externalRootMotion) { MoveAvatar(UserID); } // get the left hand state and event if(kinectManager && kinectManager.GetJointTrackingState(UserID, (int)KinectInterop.JointType.HandLeft) != KinectInterop.TrackingState.NotTracked) { KinectInterop.HandState leftHandState = kinectManager.GetLeftHandState(UserID); InteractionManager.HandEventType leftHandEvent = InteractionManager.HandStateToEvent(leftHandState, lastLeftHandEvent); if(leftHandEvent != InteractionManager.HandEventType.None) { lastLeftHandEvent = leftHandEvent; } } // get the right hand state and event if(kinectManager && kinectManager.GetJointTrackingState(UserID, (int)KinectInterop.JointType.HandRight) != KinectInterop.TrackingState.NotTracked) { KinectInterop.HandState rightHandState = kinectManager.GetRightHandState(UserID); InteractionManager.HandEventType rightHandEvent = InteractionManager.HandStateToEvent(rightHandState, lastRightHandEvent); if(rightHandEvent != InteractionManager.HandEventType.None) { lastRightHandEvent = rightHandEvent; } } // rotate the avatar bones for (var boneIndex = 0; boneIndex < bones.Length; boneIndex++) { if (!bones[boneIndex] || isBoneDisabled[boneIndex]) continue; if(boneIndex2JointMap.ContainsKey(boneIndex)) { KinectInterop.JointType joint = !mirroredMovement ? boneIndex2JointMap[boneIndex] : boneIndex2MirrorJointMap[boneIndex]; TransformBone(UserID, joint, boneIndex, !mirroredMovement); } else if(specIndex2JointMap.ContainsKey(boneIndex)) { // special bones (clavicles) List<KinectInterop.JointType> alJoints = !mirroredMovement ? specIndex2JointMap[boneIndex] : specIndex2MirrorMap[boneIndex]; if(alJoints.Count >= 2) { //Debug.Log(alJoints[0].ToString()); Vector3 baseDir = alJoints[0].ToString().EndsWith("Left") ? Vector3.left : Vector3.right; TransformSpecialBone(UserID, alJoints[0], alJoints[1], boneIndex, baseDir, !mirroredMovement); } } } }