Exemple #1
0
        /// <summary>
        /// Apply an existing <see cref="ARWorldMap"/> to the session. This will attempt
        /// to relocalize the current session to the given <paramref name="worldMap"/>.
        /// If relocalization is successful, the stored planes & reference points from
        /// the <paramref name="worldMap"/> will be added to the current session.
        /// This is equivalent to setting the <a href="https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration/2968180-initialworldmap">initialWorldMap</a>
        /// property on the session's <a href="https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration">ARWorldTrackingConfiguration</a>.
        /// </summary>
        /// <param name="worldMap">An <see cref="ARWorldMap"/> with which to relocalize the session.</param>
        public void ApplyWorldMap(
            ARWorldMap worldMap)
        {
            if (worldMap.nativeHandle == ARWorldMap.k_InvalidHandle)
                throw new InvalidOperationException("ARWorldMap has been disposed.");

            NativeApi.UnityARKit_applyWorldMap(worldMap.nativeHandle);
        }
    void ApplyWorldMap(ARWorldMap arWorldMap)
    {
        arSession.Reset();

        if (!(arSession.subsystem is ARKitSessionSubsystem arKitSessionSubsystem))
        {
            throw new Exception("No session subsystem available. Could not load.");
        }
        if (!arWorldMap.valid)
        {
            throw new Exception("Data is not a valid ARWorldMap");
        }
        arKitSessionSubsystem.ApplyWorldMap(arWorldMap);
    }
Exemple #3
0
        /// <summary>
        /// Apply an existing <see cref="ARWorldMap"/> to the session. This will attempt
        /// to relocalize the current session to the given <paramref name="worldMap"/>.
        /// If relocalization is successful, the stored planes & reference points from
        /// the <paramref name="worldMap"/> will be added to the current session.
        /// This is equivalent to setting the <a href="https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration/2968180-initialworldmap">initialWorldMap</a>
        /// property on the session's <a href="https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration">ARWorldTrackingConfiguration</a>.
        /// </summary>
        /// <param name="sessionSubsystem">The <c>XRSessionSubsystem</c> being extended.</param>
        /// <param name="worldMap">An <see cref="ARWorldMap"/> with which to relocalize the session.</param>
        public static void ApplyWorldMap(
            this XRSessionSubsystem sessionSubsystem,
            ARWorldMap worldMap)
        {
            if (sessionSubsystem == null)
            {
                throw new ArgumentNullException("sessionSubsystem");
            }

            if (worldMap.nativeHandle == ARWorldMap.k_InvalidHandle)
            {
                throw new InvalidOperationException("ARWorldMap has been disposed.");
            }

            Api.UnityARKit_applyWorldMap(worldMap.nativeHandle);
        }
        static unsafe void OnAsyncConversionComplete(ARWorldMapRequestStatus status, int worldMapId, IntPtr context)
        {
            var handle     = GCHandle.FromIntPtr(context);
            var onComplete = (Action <ARWorldMapRequestStatus, ARWorldMap>)handle.Target;

            if (status.IsError())
            {
                onComplete(status, default(ARWorldMap));
            }
            else
            {
                var worldMap = new ARWorldMap(worldMapId);
                onComplete(status, worldMap);
            }

            handle.Free();
        }