Files
Bachelor-Arbeit-Adrian-Haefner/Library/PackageCache/com.unity.xr.arkit@58a677f717be/Runtime/ARKitSessionDelegate.cs
adriadri6972 d3d9c5f833 upload project
2025-07-31 15:21:08 +02:00

116 lines
5.8 KiB
C#

using System;
using System.Runtime.InteropServices;
using AOT;
namespace UnityEngine.XR.ARKit
{
/// <summary>
/// A set of callbacks related to the ARKit session. Implement this class to provide custom handling of certain
/// session events.
/// </summary>
/// <seealso cref="DefaultARKitSessionDelegate"/>
/// <seealso cref="ARKitSessionSubsystem.sessionDelegate"/>
public abstract class ARKitSessionDelegate
{
/// <summary>
/// Invoked when the session fails. This base class implementation does nothing.
/// </summary>
/// <remarks>
/// Use this to respond to session failures. For example, the <see cref="DefaultARKitSessionDelegate"/>
/// implementation tries to restart the session by calling
/// [Reset](xref:UnityEngine.XR.ARSubsystems.XRSessionSubsystem.Reset).
///
/// See [session:didFailWithError:](https://developer.apple.com/documentation/arkit/arsessionobserver/2887453-session?language=objc)
/// for more information.
/// </remarks>
/// <param name="sessionSubsystem">The <see cref="ARKitSessionSubsystem"/> which provides an interface to the ARKit session.</param>
/// <param name="error">The <see cref="NSError"/> object describing the failure. This object is only valid
/// during this callback. See also <see cref="ARKitErrorCode"/>.</param>
protected virtual void OnSessionDidFailWithError(ARKitSessionSubsystem sessionSubsystem, NSError error) { }
/// <summary>
/// Invoked when a change to the
/// [ARConfiguration](https://developer.apple.com/documentation/arkit/arconfiguration?language=objc)
/// is requested.
/// </summary>
/// <param name="sessionSubsystem">The <see cref="ARKitSessionSubsystem"/> which provides an interface to the ARKit session.</param>
protected virtual void OnConfigurationChanged(ARKitSessionSubsystem sessionSubsystem) { }
/// <summary>
/// Invoked when the
/// [coaching overlay view](https://developer.apple.com/documentation/arkit/arcoachingoverlayview?language=objc)
/// activates. This base class implementation does nothing.
/// </summary>
/// <remarks>
/// See [coachingOverlayViewWillActivate:](https://developer.apple.com/documentation/arkit/arcoachingoverlayviewdelegate/3152985-coachingoverlayviewwillactivate?language=objc)
/// for more information.
/// </remarks>
/// <param name="sessionSubsystem">The <see cref="ARKitSessionSubsystem"/> which provides an interface to the ARKit session.</param>
/// <seealso cref="ARKitSessionSubsystem.requestedCoachingGoal"/>
/// <seealso cref="ARKitSessionSubsystem.currentCoachingGoal"/>
/// <seealso cref="ARKitSessionSubsystem.SetCoachingActive"/>
/// <seealso cref="OnCoachingOverlayViewDidDeactivate"/>
protected virtual void OnCoachingOverlayViewWillActivate(ARKitSessionSubsystem sessionSubsystem) { }
/// <summary>
/// Invoked when the
/// [coaching experience](https://developer.apple.com/documentation/arkit/arcoachingoverlayview?language=objc)
/// is completely deactivated. This base class implementation does nothing.
/// </summary>
/// <remarks>
/// See [coachingOverlayViewDidDeactivate:](https://developer.apple.com/documentation/arkit/arcoachingoverlayviewdelegate/3152983-coachingoverlayviewdiddeactivate?language=objc)
/// for more information.
/// </remarks>
/// <param name="sessionSubsystem">The <see cref="ARKitSessionSubsystem"/> which provides an interface to the ARKit session.</param>
/// <seealso cref="ARKitSessionSubsystem.requestedCoachingGoal"/>
/// <seealso cref="ARKitSessionSubsystem.currentCoachingGoal"/>
/// <seealso cref="ARKitSessionSubsystem.SetCoachingActive"/>
/// <seealso cref="OnCoachingOverlayViewWillActivate"/>
protected virtual void OnCoachingOverlayViewDidDeactivate(ARKitSessionSubsystem sessionSubsystem) { }
internal static Action<IntPtr, NSError> s_SessionDidFailWithError = SessionDidFailWithError;
internal static Action<IntPtr> s_CoachingOverlayViewWillActivate = CoachingOverlayViewWillActivate;
internal static Action<IntPtr> s_CoachingOverlayViewDidDeactivate = CoachingOverlayViewDidDeactivate;
internal static Action<IntPtr> s_ConfigurationChanged = ConfigurationChanged;
[MonoPInvokeCallback(typeof(Action<IntPtr, NSError>))]
static void SessionDidFailWithError(IntPtr subsystemHandle, NSError error)
{
if (GCHandle.FromIntPtr(subsystemHandle).Target is ARKitSessionSubsystem subsystem)
{
subsystem.sessionDelegate?.OnSessionDidFailWithError(subsystem, error);
}
}
[MonoPInvokeCallback(typeof(Action<IntPtr>))]
static void CoachingOverlayViewWillActivate(IntPtr subsystemHandle)
{
if (GCHandle.FromIntPtr(subsystemHandle).Target is ARKitSessionSubsystem subsystem)
{
subsystem.sessionDelegate?.OnCoachingOverlayViewWillActivate(subsystem);
}
}
[MonoPInvokeCallback(typeof(Action<IntPtr>))]
static void CoachingOverlayViewDidDeactivate(IntPtr subsystemHandle)
{
if (GCHandle.FromIntPtr(subsystemHandle).Target is ARKitSessionSubsystem subsystem)
{
subsystem.sessionDelegate?.OnCoachingOverlayViewDidDeactivate(subsystem);
}
}
[MonoPInvokeCallback(typeof(Action<IntPtr>))]
static void ConfigurationChanged(IntPtr subsystemHandle)
{
if (GCHandle.FromIntPtr(subsystemHandle).Target is ARKitSessionSubsystem subsystem)
{
subsystem.sessionDelegate?.OnConfigurationChanged(subsystem);
}
}
}
}