private void UpdateHandPoseVisual(GameObject skeletonJoint, Astra.HandPose pose) { Vector3 targetScale = NormalPoseScale; if (pose == Astra.HandPose.Grip) { targetScale = GripPoseScale; } skeletonJoint.transform.localScale = targetScale; }
private void UpdateHandPoseVisual(GameObject skeletonJoint, Astra.HandPose pose, string name) { Vector3 targetScale = NormalPoseScale; if (pose == Astra.HandPose.Grip) { targetScale = GripPoseScale; } if (_oscSender._dataSource == null) { _oscSender._dataSource = skeletonJoint.transform; _oscSender._oscAddress = "/unity/Hands/" + name; _oscSender._propertyName = "Hand" + name; } skeletonJoint.transform.localScale = targetScale; }
//float lowestX =0; //float highestX = 0; void UpdateSkeletonsFromBodies(Astra.Body[] bodies) { //Astra.DepthStream soup = ; foreach (var body in bodies) { if (body.Status == Astra.BodyStatus.NotTracking) { continue; } GameObject[] joints; if (!_bodySkeletons.ContainsKey(body.Id)) { joints = new GameObject[body.Joints.Length]; for (int i = 0; i < joints.Length; i++) { joints[i] = (GameObject)Instantiate(JointPrefab, Vector3.zero, Quaternion.identity); joints[i].transform.SetParent(JointRoot); } _bodySkeletons.Add(body.Id, joints); } else { joints = _bodySkeletons[body.Id]; } for (int i = 0; i < body.Joints.Length; i++) { var skeletonJoint = joints[i]; var bodyJoint = body.Joints[i]; if (bodyJoint.Status != Astra.JointStatus.NotTracked) { if (!skeletonJoint.activeSelf) { skeletonJoint.SetActive(true); } //if (bodyJoint.WorldPosition.X < lowestX) //{ // lowestX = bodyJoint.WorldPosition.X; // print("New LowestX:" + lowestX); //} //if (bodyJoint.WorldPosition.X > highestX) //{ // highestX = bodyJoint.WorldPosition.X; // print("New HighestX:" + highestX); //} skeletonJoint.transform.localPosition = new Vector3(bodyJoint.WorldPosition.X / 1000f, bodyJoint.WorldPosition.Y / 1000f, bodyJoint.WorldPosition.Z / 1000f); //skel.Joints[i].Orient.Matrix: // 0, 1, 2, // 3, 4, 5, // 6, 7, 8 // ------- // right(X), up(Y), forward(Z) //Vector3 jointRight = new Vector3( // bodyJoint.Orientation.M00, // bodyJoint.Orientation.M10, // bodyJoint.Orientation.M20); Vector3 jointUp = new Vector3( bodyJoint.Orientation.M01, bodyJoint.Orientation.M11, bodyJoint.Orientation.M21); Vector3 jointForward = new Vector3( bodyJoint.Orientation.M02, bodyJoint.Orientation.M12, bodyJoint.Orientation.M22); skeletonJoint.transform.rotation = Quaternion.LookRotation(jointForward, jointUp); if (bodyJoint.Type == Astra.JointType.LeftHand) { UpdateHandPoseVisual(skeletonJoint, body.HandPoseInfo.LeftHand); if (leftHandPose == Astra.HandPose.Unknown && body.HandPoseInfo.LeftHand == Astra.HandPose.Grip) { foreach (GameObject go in GameObject.FindGameObjectsWithTag("Pickupable")) { if (Vector3.Distance(go.transform.position, skeletonJoint.transform.position) < 1) { go.GetComponent <Grabbable>().getGrabbed(skeletonJoint); grabbedLeftHand = go; //go.transform.position = skeletonJoint.transform.position; //go.transform.parent = skeletonJoint.transform; //print("grabbedBall"); } } } else if (leftHandPose == Astra.HandPose.Unknown && body.HandPoseInfo.LeftHand == Astra.HandPose.Grip && grabbedLeftHand != null) { grabbedLeftHand.GetComponent <Grabbable>().release(); } leftHandPose = body.HandPoseInfo.RightHand; } else if (bodyJoint.Type == Astra.JointType.RightHand) { UpdateHandPoseVisual(skeletonJoint, body.HandPoseInfo.RightHand); if (rightHandPose == Astra.HandPose.Unknown && body.HandPoseInfo.RightHand == Astra.HandPose.Grip) { foreach (GameObject go in GameObject.FindGameObjectsWithTag("Pickupable")) { if (Vector3.Distance(go.transform.position, skeletonJoint.transform.position) < 1) { go.GetComponent <Grabbable>().getGrabbed(skeletonJoint); grabbedRightHand = go; //go.transform.position = skeletonJoint.transform.position; //go.transform.parent = skeletonJoint.transform; //print("grabbedBall"); } } } else if (leftHandPose == Astra.HandPose.Unknown && body.HandPoseInfo.LeftHand == Astra.HandPose.Grip && grabbedLeftHand != null) { grabbedLeftHand.GetComponent <Grabbable>().release(); } rightHandPose = body.HandPoseInfo.RightHand; } } else { if (skeletonJoint.activeSelf) { skeletonJoint.SetActive(false); } } // LEFT ARM if (i == (int)Astra.JointType.LeftHand) { leftArmPos[0] = skeletonJoint.transform.position; } else if (i == (int)Astra.JointType.LeftWrist) { leftArmPos[1] = skeletonJoint.transform.position; } else if (i == (int)Astra.JointType.LeftElbow) { leftArmPos[2] = skeletonJoint.transform.position; } else if (i == (int)Astra.JointType.LeftShoulder) { leftArmPos[3] = skeletonJoint.transform.position; } // RIGHT ARM else if (i == (int)Astra.JointType.RightHand) { rightArmPos[0] = skeletonJoint.transform.position; } else if (i == (int)Astra.JointType.RightWrist) { rightArmPos[1] = skeletonJoint.transform.position; } else if (i == (int)Astra.JointType.RightElbow) { rightArmPos[2] = skeletonJoint.transform.position; } else if (i == (int)Astra.JointType.RightShoulder) { rightArmPos[3] = skeletonJoint.transform.position; } // LEFT LEG else if (i == (int)Astra.JointType.LeftFoot) { leftLegsPos[0] = skeletonJoint.transform.position; } else if (i == (int)Astra.JointType.LeftKnee) { leftLegsPos[1] = skeletonJoint.transform.position; } else if (i == (int)Astra.JointType.LeftHip) { leftLegsPos[2] = skeletonJoint.transform.position; } // RIGHT LEG else if (i == (int)Astra.JointType.RightFoot) { rightLegsPos[0] = skeletonJoint.transform.position; } else if (i == (int)Astra.JointType.RightKnee) { rightLegsPos[1] = skeletonJoint.transform.position; } else if (i == (int)Astra.JointType.RightHip) { rightLegsPos[2] = skeletonJoint.transform.position; } // TORSO else if (i == (int)Astra.JointType.Head) { torsoPos[0] = skeletonJoint.transform.position; } else if (i == (int)Astra.JointType.Neck) { torsoPos[1] = skeletonJoint.transform.position; } else if (i == (int)Astra.JointType.MidSpine) { torsoPos[3] = skeletonJoint.transform.position; } // COMMON JOINTS else if (i == (int)Astra.JointType.ShoulderSpine) { leftArmPos[4] = skeletonJoint.transform.position; rightArmPos[4] = skeletonJoint.transform.position; torsoPos[2] = skeletonJoint.transform.position; } else if (i == (int)Astra.JointType.BaseSpine) { leftLegsPos[3] = skeletonJoint.transform.position; rightLegsPos[3] = skeletonJoint.transform.position; torsoPos[4] = skeletonJoint.transform.position; } } } if (leftArmRenderer != null) { leftArmRenderer.SetPositions(leftArmPos); } if (rightArmRenderer != null) { rightArmRenderer.SetPositions(rightArmPos); } if (leftLegRenderer != null) { leftLegRenderer.SetPositions(leftLegsPos); } if (rightLegRenderer != null) { rightLegRenderer.SetPositions(rightLegsPos); } if (torsoRenderer != null) { torsoRenderer.SetPositions(torsoPos); } }