private void OnSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame()) { // No player if (skeletonFrame == null) { return; } var skeletonCount = skeletonFrame.SkeletonArrayLength; if (skeletonCount == 0) { return; } m_Skeletons = new Skeleton[skeletonCount]; skeletonFrame.CopySkeletonDataTo(m_Skeletons); for (int i = 0; i < skeletonCount; i++) { if (m_Skeletons[i].TrackingState == SkeletonTrackingState.Tracked) { var trackedBones = 0; foreach (Joint joint in m_Skeletons[i].Joints) { if (joint.JointType == JointType.Head) { m_TrackingData.HeadPosition[0] = joint.Position.X; m_TrackingData.HeadPosition[1] = joint.Position.Y; m_TrackingData.HeadPosition[2] = joint.Position.Z; trackedBones++; } else if (joint.JointType == JointType.HandLeft) { UpdateJoint(ref m_TrackingData.LeftTransform, joint, i); trackedBones++; } else if (joint.JointType == JointType.HandRight) { UpdateJoint(ref m_TrackingData.RightTransform, joint, i); trackedBones++; } if (trackedBones == 3) { NewTrackingData.Invoke(m_TrackingData); break; } } break; } } } }
private void OnSkeletonFrameReady(object sender, MultiSourceFrameArrivedEventArgs e) { var reference = e.FrameReference.AcquireFrame(); using (var frame = reference.BodyFrameReference.AcquireFrame()) { if (frame == null) { return; } var bodyCount = frame.BodyFrameSource.BodyCount; if (bodyCount == 0) { return; } if (m_Bodies == null) { m_Bodies = new Body[bodyCount]; } if (m_Bodies.Length != bodyCount) { Array.Resize(ref m_Bodies, bodyCount); } frame.GetAndRefreshBodyData(m_Bodies); for (var i = 0; i < bodyCount; i++) { var body = m_Bodies[i]; if (body?.IsTracked ?? false) { var trackedBones = 0; foreach (var joint in body.Joints) { var position = joint.Value.Position; if (joint.Key == JointType.Head) { m_TrackingData.HeadPosition[0] = position.X; m_TrackingData.HeadPosition[1] = position.Y; m_TrackingData.HeadPosition[2] = position.Z; trackedBones++; } if (joint.Key == JointType.HandLeft) { UpdateJoint(ref m_TrackingData.LeftTransform, body, joint.Value); trackedBones++; } if (joint.Key == JointType.HandRight) { UpdateJoint(ref m_TrackingData.RightTransform, body, joint.Value); trackedBones++; } if (trackedBones == 3) { NewTrackingData.Invoke(m_TrackingData); break; } } break; } } } }