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;
                    }
                }
            }
        }
Esempio n. 2
0
        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;
                    }
                }
            }
        }