Пример #1
0
        public static void ImplicitTest()
        {
            XRFaceA a = new XRFaceA()
            {
                trackableId   = new TrackableId(ulong.MaxValue - 1000, ulong.MaxValue / 4),
                pose          = TestUtil.MockPose(3),
                trackingState = TrackingState.Tracking,
                nativePtr     = new IntPtr(8),
                leftEyePose   = TestUtil.MockPose(9),
                rightEyePose  = TestUtil.MockPose(17),
                fixationPoint = new float3(25, 26, 27)
            };

            XRFaceB b = a;



            Assert.AreEqual(a.trackableId.subId1, b.trackableId.subId1);
            Assert.AreEqual(a.trackableId.subId2, b.trackableId.subId2);

            XRFaceA c = b;

            Assert.AreEqual(a, c);

            Debug.Log($"A: {a}");
            Debug.Log($"C: {c}");
        }
            public override TrackableChanges <UnityXRFace> GetChanges(UnityXRFace defaultFace, Allocator allocator)
            {
                var face = ARKitReceiver.Instance?.Face;

                if (face == null)
                {
                    return(new TrackableChanges <UnityXRFace>());
                }
                // Debug.Log($"GetChanges: {face}");

                var added   = face.added.Select(f => (UnityXRFace)f).ToList();
                var updated = face.updated.Select(f => (UnityXRFace)f).ToList();
                var removed = face.removed.Select(id => (UnityTrackableId)id).ToList();

                foreach (var f in added.ToArray())
                {
                    if (ids.Contains(f.trackableId))
                    {
                        added.Remove(f);
                    }
                    else
                    {
                        ids.Add(f.trackableId);
                    }
                }

                foreach (var f in updated.ToArray())
                {
                    // Send as new
                    if (!ids.Contains(f.trackableId))
                    {
                        updated.Remove(f);
                        added.Add(f);
                        ids.Add(f.trackableId);
                    }
                }
                foreach (var id in removed.ToArray())
                {
                    // Send ad
                    if (ids.Contains(id))
                    {
                        ids.Remove(id);
                    }
                    else
                    {
                        removed.Remove(id);
                    }
                }

                var nativeAdded   = new NativeArray <UnityXRFace>(added.ToArray(), Allocator.Temp);
                var nativeUpdated = new NativeArray <UnityXRFace>(updated.ToArray(), Allocator.Temp);
                var nativeRemoved = new NativeArray <UnityTrackableId>(removed.ToArray(), Allocator.Temp);

                return(TrackableChanges <UnityXRFace> .CopyFrom(nativeAdded, nativeUpdated, nativeRemoved, allocator));
            }
Пример #3
0
            public override TrackableChanges <UnityXRFace> GetChanges(UnityXRFace defaultFace, Allocator allocator)
            {
                var face = ARKitReceiver.Instance?.Face;

                if (face == null)
                {
                    return(new TrackableChanges <UnityXRFace>());
                }
                // Debug.Log($"GetChanges: {face}");

                var added   = face.added.Select(f => (UnityXRFace)f).ToList();
                var updated = face.updated.Select(f => (UnityXRFace)f).ToList();
                var removed = face.removed.Select(id => (UnityTrackableId)id).ToList();

                return(modifier.Modify(added, updated, removed, allocator));
            }
Пример #4
0
 /// <summary>
 /// Get the changes (added, updated, and removed) faces since the last call to <see cref="GetChanges(Allocator)"/>.
 /// </summary>
 /// <param name="defaultFace">
 /// The default face. This should be used to initialize the returned <c>NativeArray</c>s for backwards compatibility.
 /// See <see cref="TrackableChanges{T}.TrackableChanges(void*, int, void*, int, void*, int, T, int, Allocator)"/>.
 /// </param>
 /// <param name="allocator">An <c>Allocator</c> to use when allocating the returned <c>NativeArray</c>s.</param>
 /// <returns>
 /// <see cref="TrackableChanges{T}"/> describing the faces that have been added, updated, and removed
 /// since the last call to <see cref="GetChanges(Allocator)"/>. The changes should be allocated using
 /// <paramref name="allocator"/>.
 /// </returns>
 public virtual TrackableChanges <XRFace> GetChanges(
     XRFace defaultFace,
     Allocator allocator)
 {
     return(default(TrackableChanges <XRFace>));
 }
            public override TrackableChanges <UnityEngine.XR.ARSubsystems.XRFace> GetChanges(UnityEngine.XR.ARSubsystems.XRFace defaultFace, Allocator allocator)
            {
                var changes = new TrackableChanges <UnityEngine.XR.ARSubsystems.XRFace>(m_AddedFaces.Count,
                                                                                        m_UpdatedFaces.Count, m_RemovedFaces.Count, allocator);
                var numAddedFaces = m_AddedFaces.Count;

                if (numAddedFaces > 0)
                {
                    Utils.EnsureCapacity(ref m_ConversionBuffer, numAddedFaces);
                    var i = 0;
                    foreach (var face in m_AddedFaces.Values)
                    {
                        m_ConversionBuffer[i++] = XRFaceFromIMRFace(face);
                    }
                    NativeArray <XRFace> .Copy(m_ConversionBuffer, changes.added.Reinterpret <XRFace>(), numAddedFaces);

                    m_AddedFaces.Clear();
                }

                var numUpdatedFaces = m_UpdatedFaces.Count;

                if (numUpdatedFaces > 0)
                {
                    Utils.EnsureCapacity(ref m_ConversionBuffer, numUpdatedFaces);
                    var i = 0;
                    foreach (var face in m_UpdatedFaces.Values)
                    {
                        m_ConversionBuffer[i++] = XRFaceFromIMRFace(face);
                    }
                    NativeArray <XRFace> .Copy(m_ConversionBuffer, changes.updated.Reinterpret <XRFace>(), numUpdatedFaces);

                    m_UpdatedFaces.Clear();
                }

                var numRemovedFaces = m_RemovedFaces.Count;

                if (numRemovedFaces > 0)
                {
                    Utils.EnsureCapacity(ref m_IdConversionBuffer, numRemovedFaces);
                    var i = 0;
                    foreach (var id in m_RemovedFaces)
                    {
                        m_IdConversionBuffer[i++] = new TrackableId(id.subId1, id.subId2);
                    }

                    NativeArray <TrackableId> .Copy(m_IdConversionBuffer, changes.removed, numRemovedFaces);

                    m_RemovedFaces.Clear();
                }

                return(changes);
            }