示例#1
0
    void Update()
    {
        KinectManager kinectManager = KinectManager.Instance;

        // update Kinect interaction
        if (kinectManager && kinectManager.IsInitialized())
        {
            List <Int64> aluserIds = kinectManager.GetAlUserIds();
            while (leftHandState.Count < aluserIds.Count)
            {
                leftHandEvent.Add(HandEventType.None);
                lastLeftHandEvent.Add(HandEventType.None);
                rightHandEvent.Add(HandEventType.None);
                lastRightHandEvent.Add(HandEventType.None);
                leftHandState.Add(KinectInterop.HandState.Unknown);
                rightHandState.Add(KinectInterop.HandState.Unknown);
            }

            for (int userIndex = 0; userIndex < aluserIds.Count; userIndex++)
            {
                if (aluserIds[userIndex] != 0)                // User found
                {
                    HandEventType handEvent = HandEventType.None;

                    // get the left hand state
                    leftHandState[userIndex] = kinectManager.GetLeftHandState(aluserIds[userIndex]);

                    // get the right hand state
                    rightHandState[userIndex] = kinectManager.GetRightHandState(aluserIds[userIndex]);

                    // process left hand
                    handEvent = HandStateToEvent(leftHandState[userIndex], lastLeftHandEvent[userIndex]);
                    leftHandEvent[userIndex] = handEvent;
                    if (handEvent != HandEventType.None)
                    {
                        lastLeftHandEvent[userIndex] = handEvent;
                    }

                    // process right hand
                    handEvent = HandStateToEvent(rightHandState[userIndex], lastRightHandEvent[userIndex]);
                    rightHandEvent[userIndex] = handEvent;
                    if (handEvent != HandEventType.None)
                    {
                        lastRightHandEvent[userIndex] = handEvent;
                    }
                }
                else                 // User not found
                {
                    leftHandState[userIndex]  = KinectInterop.HandState.NotTracked;
                    rightHandState[userIndex] = KinectInterop.HandState.NotTracked;

                    leftHandEvent[userIndex]  = HandEventType.None;
                    rightHandEvent[userIndex] = HandEventType.None;

                    lastLeftHandEvent[userIndex]  = HandEventType.Release;
                    lastRightHandEvent[userIndex] = HandEventType.Release;
                }
            }
        }
    }