void Update() { KinectManager manager = KinectManager.Instance; // get 1st player Int64 userID = manager ? manager.GetPrimaryUser() : 0; if (userID <= 0) { // reset the pointman position and rotation if (transform.position != initialPosition) { transform.position = initialPosition; } if (transform.rotation != initialRotation) { transform.rotation = initialRotation; } for (int i = 0; i < bones.Length; i++) { bones[i].gameObject.SetActive(true); bones[i].transform.localPosition = Vector3.zero; bones[i].transform.localRotation = Quaternion.identity; if (LinePrefab) { lines[i].gameObject.SetActive(false); } } return; } // set the position in space Vector3 posPointMan = manager.GetUserPosition(userID); posPointMan.z = !MirroredMovement ? -posPointMan.z : posPointMan.z; // store the initial position if (initialPosUserID != userID) { initialPosUserID = userID; initialPosOffset = transform.position - (MoveVertically ? posPointMan : new Vector3(posPointMan.x, 0, posPointMan.z)); } transform.position = initialPosOffset + (MoveVertically ? posPointMan : new Vector3(posPointMan.x, 0, posPointMan.z)); // update the local positions of the bones for (int i = 0; i < bones.Length; i++) { if (bones[i] != null) { int joint = !MirroredMovement ? i : (int)KinectWrapper.GetMirrorJoint((KinectWrapper.JointType)i); if (manager.IsJointTracked(userID, joint)) { bones[i].gameObject.SetActive(true); Vector3 posJoint = manager.GetJointPosition(userID, joint); posJoint.z = !MirroredMovement ? -posJoint.z : posJoint.z; Quaternion rotJoint = manager.GetJointOrientation(userID, joint, !MirroredMovement); posJoint -= posPointMan; if (MirroredMovement) { posJoint.x = -posJoint.x; posJoint.z = -posJoint.z; } bones[i].transform.localPosition = posJoint; bones[i].transform.localRotation = rotJoint; if (LinePrefab) { lines[i].gameObject.SetActive(true); Vector3 posJoint2 = bones[i].transform.position; Vector3 dirFromParent = manager.GetJointDirection(userID, joint); dirFromParent.z = !MirroredMovement ? -dirFromParent.z : dirFromParent.z; Vector3 posParent = posJoint2 - dirFromParent; //lines[i].SetVertexCount(2); lines[i].SetPosition(0, posParent); lines[i].SetPosition(1, posJoint2); } } else { bones[i].gameObject.SetActive(false); if (LinePrefab) { lines[i].gameObject.SetActive(false); } } } } }