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)); }
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)); }
/// <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); }