/// <summary>
 /// Updates the packet with the skeleton-independant data from the Skeleton Frame
 /// </summary>
 /// <param name="frame">Skeleton Frame to use for update</param>
 private void UpdatePacketGlobalData(SkeletonFrame frame)
 {
     m_version1Packet.PlayerCount.Set((byte)KinectUtils.CountTrackedSkeletons(m_skeletonArray));
     m_version1Packet.Flags.Set(0);      //Flags only accessible in the C++ API??
     m_version1Packet.FloorClipPlane.Set(frame.FloorClipPlane.Item1,
                                         frame.FloorClipPlane.Item2,
                                         frame.FloorClipPlane.Item3,
                                         frame.FloorClipPlane.Item4);
     m_version1Packet.GravityNormal.Set(0, 0, 0); //Gravity Normal removed from SDK
 }
Beispiel #2
0
    void Update()
    {
        bool isOverBtn1 = false, isOverBtn2 = false, isOverBtn3 = false;

        if (_manager == null)
        {
            _manager = KinectManager.Instance;
        }

        if (_manager && _manager.IsInitialized())//如果初始化成功
        {
            #region 检测切割,更新划线
            //先检查人物是否被检测
            if (_manager.IsUserDetected())
            {
                long userId = _manager.GetPrimaryUserID();
                //获取左右手手掌的关节视口坐标
                Vector3 leftJointPos  = KinectUtils.GetViewportToScreenPoint(KinectInterop.JointType.HandLeft);
                Vector3 rightJointPos = KinectUtils.GetViewportToScreenPoint(KinectInterop.JointType.HandRight);
                //将左右手坐标转换为ugui坐标
                Vector2 leftHandScreenpos;
                bool    isLeftHandOver = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, leftJointPos, Camera.main, out leftHandScreenpos);
                Vector2 rightHandScreenpos;
                bool    isRightHandOver = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, rightJointPos, Camera.main, out rightHandScreenpos);

                //左手是否悬浮在区域上
                bool l1 = RectTransformUtility.RectangleContainsScreenPoint(fruit1, leftJointPos, Camera.main);
                bool l2 = RectTransformUtility.RectangleContainsScreenPoint(fruit2, leftJointPos, Camera.main);
                bool l3 = RectTransformUtility.RectangleContainsScreenPoint(fruit3, leftJointPos, Camera.main);
                //右手是否悬浮在区域上
                bool r1 = RectTransformUtility.RectangleContainsScreenPoint(fruit1, rightJointPos, Camera.main);
                bool r2 = RectTransformUtility.RectangleContainsScreenPoint(fruit2, rightJointPos, Camera.main);
                bool r3 = RectTransformUtility.RectangleContainsScreenPoint(fruit3, rightJointPos, Camera.main);

                isOverBtn1 = l1 || r1;
                isOverBtn2 = l2 || r2;
                isOverBtn3 = l3 || r3;

                //更新显示线位置
                leftLine.UpdateCutLine(leftHandScreenpos);
                rightLine.UpdateCutLine(rightHandScreenpos);
            }
            else
            {
                leftLine.UpdateCutLine(new Vector2(-1000, 1000));
                rightLine.UpdateCutLine(new Vector2(1000, 1000));
            }
            #endregion
            //检测是否选中按钮
            ClickBtnEvent(isOverBtn1, isOverBtn2, isOverBtn3);
            RotatePic();
        }
    }
        /// <summary>
        /// Processes the given skeleton and updates the network packet data structure, then
        /// sends the resulting packet.
        /// </summary>
        /// <param name="frame">The Kinect Skeleton frame to process.</param>
        public void ProcessSkeletonData(SkeletonFrame frame)
        {
            if ((m_skeletonArray == null) || (m_skeletonArray.Length != frame.SkeletonArrayLength))
            {
                m_skeletonArray = new Skeleton[frame.SkeletonArrayLength];
            }
            frame.CopySkeletonDataTo(m_skeletonArray);

            // Do stuff here
            lock (m_version1Packet)
            {
                UpdatePacketGlobalData(frame);

                // Get the best skeleton
                Skeleton skeleton = KinectUtils.SelectBestSkeleton(m_skeletonArray);

                UpdatePacketSkeletonData(skeleton);
                UpdatePacketJoystickData(skeleton);
            }

            Send();
            m_heartbeatTimer.Change(HEARTBEAT_PERIOD_MS, HEARTBEAT_PERIOD_MS);
            NTKinect.UpdateHeartBeat();
        }
Beispiel #4
0
    void Update()
    {
        timer += Time.deltaTime * creatSpeed;
        if (timer >= creatTime)
        {
            // random time to create fruit
            int num = Random.Range(1, 3);
            for (int i = 0; i < num; i++)
            {
                _currentFruitArray[i] = CreatFruit();
            }
            timer = 0;
        }
        bool isRightOverFrult = false;
        bool isLeftOverFrult  = false;

        if (_manager == null)
        {
            _manager = KinectManager.Instance;
        }
        for (int i = 0; i < _currentFruitArray.Length; i++)
        {
            if (_currentFruitArray [i] != null)
            {
                RectTransform rt = _currentFruitArray [i].transform as RectTransform;
                if (_manager && _manager.IsInitialized())                   //如果初始化成功
                {
                    #region 检测切割,更新划线
                    //先检查人物是否被检测
                    if (_manager.IsUserDetected())
                    {
                        long userId = _manager.GetPrimaryUserID();
                        //获取左右手手掌的关节视口坐标
                        Vector3 leftJointPos  = KinectUtils.GetViewportToScreenPoint(KinectInterop.JointType.HandLeft);
                        Vector3 rightJointPos = KinectUtils.GetViewportToScreenPoint(KinectInterop.JointType.HandRight);
                        //将左右手坐标转换为ugui坐标
                        Vector2 leftHandScreenpos;
                        bool    isLeftHandOver = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, leftJointPos, Camera.main, out leftHandScreenpos);
                        Vector2 rightHandScreenpos;
                        bool    isRightHandOver = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, rightJointPos, Camera.main, out rightHandScreenpos);

                        //左手是否悬浮在区域上
                        isLeftOverFrult = RectTransformUtility.RectangleContainsScreenPoint(rt, leftJointPos, Camera.main);
                        //右手是否悬浮在区域上
                        isRightOverFrult = RectTransformUtility.RectangleContainsScreenPoint(rt, rightJointPos, Camera.main);

                        //更新显示线位置
                        leftLine.UpdateCutLine(leftHandScreenpos);
                        rightLine.UpdateCutLine(rightHandScreenpos);
                    }
                    else
                    {
                        leftLine.UpdateCutLine(new Vector2(-1000, 1000));
                        rightLine.UpdateCutLine(new Vector2(1000, 1000));
                    }
                    #endregion
                }

                #region 切水果
                if (isLeftOverFrult || isRightOverFrult)
                {
                    int t = _currentFruitArray[i].type;
                    if (t == 0)                      //切到最终boom
                    {
                        lifeNum--;
                    }
                    else                        //切到水果加分
                    {
                        scoreNum++;
                        CreatLeftRightFurit(t, _currentFruitArray[i]);
                    }
                    Destroy(_currentFruitArray[i].gameObject);
                }
                #endregion
            }
        }
        lifeContent.setLife(lifeNum);
        gameUIControlOne.SetScore(scoreNum, lifeNum);
    }
Beispiel #5
0
        /// <summary>
        /// Processes the given skeleton and updates the network packet data structure, then
        /// sends the resulting packet.
        /// </summary>
        /// <param name="frame">The Kinect skeleton to process.</param>
        public void ProcessSkeleton(SkeletonFrame frame)
        {
            sbyte[] nullAxis = new sbyte[6];

            if ((m_skeletonArray == null) || (m_skeletonArray.Length != frame.SkeletonArrayLength))
            {
                m_skeletonArray = new Skeleton[frame.SkeletonArrayLength];
            }

            frame.CopySkeletonDataTo(m_skeletonArray);

            // Do stuff here
            lock (m_version0Packet)
            {
                m_version0Packet.PlayerCount.Set((byte)KinectUtils.CountTrackedSkeletons(m_skeletonArray));

                m_version0Packet.Flags.Set(0);      //Flags only accessible in the C++ API??
                m_version0Packet.FloorClipPlane.Set(frame.FloorClipPlane.Item1,
                                                    frame.FloorClipPlane.Item2,
                                                    frame.FloorClipPlane.Item3,
                                                    frame.FloorClipPlane.Item4);
                m_version0Packet.GravityNormal.Set(0, 0, 0); //Gravity Normal removed from SDK

                // Get the best skeleton
                Skeleton s = KinectUtils.SelectBestSkeleton(m_skeletonArray);

                m_version0Packet.Quality.Set((byte)s.ClippedEdges);
                m_version0Packet.CenterOfMass.Set(s.Position.X,
                                                  s.Position.Y,
                                                  s.Position.Z);
                m_version0Packet.SkeletonTrackState.Set((uint)s.TrackingState);

                // Loop through joints; get tracking states and positions
                byte[]           trackingStates = new byte[20];
                WritableVertex[] vertices       = new WritableVertex[20];

                for (uint i = 0; i < s.Joints.Count; i++)
                {
                    Joint j = s.Joints[(JointType)i];

                    trackingStates[i] = (byte)(j.TrackingState);
                    vertices[i]       = new WritableVertex(j.Position.X,
                                                           j.Position.Y,
                                                           j.Position.Z);
                }
                m_version0Packet.SkeletonTrackingStates.Set(trackingStates);
                m_version0Packet.SkeletonJoints.Set(vertices);

                // Update Joysticks
                WritableJoystick[] sticks = new WritableJoystick[2] {
                    m_version0Packet.Joystick1,
                    m_version0Packet.Joystick2
                };
                if (m_version0Packet.PlayerCount.Get() != 0)        //Only process and send valid data if a player is detected
                {
                    m_gestureProcessor.ProcessGestures(sticks, s);
                }
                else
                {
                    m_version0Packet.Joystick1.Set(nullAxis, 0);
                    m_version0Packet.Joystick2.Set(nullAxis, 0);
                }
            }

            send();
            m_heartbeatTimer.Change(HEARTBEAT_PERIOD_MS, HEARTBEAT_PERIOD_MS);
        }