コード例 #1
0
            unsafe void RetrieveGestureEvents()
            {
                if (NativeApi.IsHandGesturesEnabled())
                {
                    GetGestureEvents <MagicLeapKeyPoseGestureEvent>(ref m_KeyPoseGestureEvents, NativeApi.GetKeyPoseGestureEventsPtr);
                }
                if (NativeApi.IsControllerGesturesEnabled())
                {
                    GetGestureEvents <MagicLeapTouchpadGestureEvent>(ref m_TouchpadGestureEvents, NativeApi.GetTouchpadGestureEventsPtr);
                }

                // Count up valid activate gestures (Have to do this as we cannot dynamically grow NativeArray).
                // This should be possible to fix with NativeList (when out of preview package).
                int activateGestureEventCount = 0;

                foreach (var gestureEvent in m_KeyPoseGestureEvents)
                {
                    if (gestureEvent.state == GestureState.Started && gestureEvent.keyPose == MagicLeapKeyPose.Finger)
                    {
                        activateGestureEventCount++;
                    }
                }

                if (m_ActivateGestureEvents.IsCreated)
                {
                    m_ActivateGestureEvents.Dispose();
                }
                m_ActivateGestureEvents = new NativeArray <ActivateGestureEvent>(activateGestureEventCount, Allocator.Persistent);

                int iActivateGestureEvent = 0;

                foreach (var gestureEvent in m_KeyPoseGestureEvents)
                {
                    if (gestureEvent.state == GestureState.Started && gestureEvent.keyPose == MagicLeapKeyPose.Finger)
                    {
                        m_ActivateGestureEvents[iActivateGestureEvent++] =
                            new ActivateGestureEvent(GetNextGUID(), gestureEvent.state, Vector3.zero, Vector3.one);
                    }
                }
            }
コード例 #2
0
            unsafe void RetrieveAllGestureEvents()
            {
                RetrieveGestureEvents(NativeApi.UnityWindowsMR_GesturesGetHoldGestureEventsPtr, ref m_HoldGestureEvents);
                RetrieveGestureEvents(NativeApi.UnityWindowsMR_GesturesGetManipulationGestureEventsPtr, ref m_ManipulationGestureEvents);
                RetrieveGestureEvents(NativeApi.UnityWindowsMR_GesturesGetNavigationGestureEventsPtr, ref m_NavigationGestureEvents);
                RetrieveGestureEvents(NativeApi.UnityWindowsMR_GesturesGetTappedGestureEventsPtr, ref m_TappedGestureEvents);

                // Avoid re-allocation of NativeArray if our current NativeArray is empty and we don't have new events.
                if (m_TappedGestureEvents.Length == 0)
                {
                    if (m_ActivateGestureEvents.Length > 0)
                    {
                        if (m_ActivateGestureEvents.IsCreated)
                        {
                            m_ActivateGestureEvents.Dispose();
                        }
                        m_ActivateGestureEvents = new NativeArray <ActivateGestureEvent>(0, Allocator.Persistent);
                    }
                }
                else
                {
                    if (m_ActivateGestureEvents.IsCreated)
                    {
                        m_ActivateGestureEvents.Dispose();
                    }
                    m_ActivateGestureEvents = new NativeArray <ActivateGestureEvent>(m_TappedGestureEvents.Length, Allocator.Persistent);

                    int iActivateGestureEvent = 0;
                    foreach (var gestureEvent in m_TappedGestureEvents)
                    {
                        if (gestureEvent.state == GestureState.Started)
                        {
                            m_ActivateGestureEvents[iActivateGestureEvent++] =
                                new ActivateGestureEvent(GetNextGUID(), gestureEvent.state);
                        }
                    }
                }
            }