/// Optional interface to use with objects which need to take ownership of <see cref="MaterialInstance"/>(s).
/// </summary>
publicinterfaceIMaterialInstanceOwner
{
/// <summary>
/// Method which is invoked by a <see cref="MaterialInstance"/> when an external material change is detected.
/// This normally occurs when materials are changed via <see href="https://docs.unity3d.com/ScriptReference/Renderer-material.html">Renderer.material</see>,
/// <see href="https://docs.unity3d.com/ScriptReference/Renderer-materials.html">Renderer.materials</see>, or via the editor.
/// </summary>
/// <param name="materialInstance">The material instance which contains the updated materials.</param>
/// Generic interface for all optional Mixed Reality systems, components, or features that can be added to the <see cref="MixedRealityServiceConfiguration"/>
/// Generic interface for all Mixed Reality Services
/// </summary>
publicinterfaceIMixedRealityService:IDisposable
{
/// <summary>
/// Optional Priority attribute if multiple services of the same type are required, enables targeting a service for action.
/// </summary>
stringName{get;}
/// <summary>
/// Optional Priority to reorder registered managers based on their respective priority, reduces the risk of race conditions by prioritizing the order in which managers are evaluated.
/// </summary>
uintPriority{get;}
/// <summary>
/// The configuration profile for the service.
/// </summary>
/// <remarks>
/// Many services may wish to provide a typed version (ex: MixedRealityInputSystemProfile) that casts this value for ease of use in calling code.
/// </remarks>
BaseMixedRealityProfileConfigurationProfile{get;}
/// <summary>
/// The initialize function is used to setup the service once created.
/// This method is called once all services have been registered in the Mixed Reality Toolkit.
/// </summary>
voidInitialize();
/// <summary>
/// Optional Reset function to perform that will Reset the service, for example, whenever there is a profile change.
/// </summary>
voidReset();
/// <summary>
/// Optional Enable function to enable / re-enable the service.
/// </summary>
voidEnable();
/// <summary>
/// Optional Update function to perform per-frame updates of the service.
/// </summary>
voidUpdate();
/// <summary>
/// Optional LateUpdate function to that is called after Update has been called on all services.
/// </summary>
voidLateUpdate();
/// <summary>
/// Optional Disable function to pause the service.
/// </summary>
voidDisable();
/// <summary>
/// Optional Destroy function to perform cleanup of the service before the Mixed Reality Toolkit is destroyed.
/// Gets the parent object to which all spatial awareness <see href="https://docs.unity3d.com/ScriptReference/GameObject.html">GameObject</see>s are to be parented.
/// </summary>
GameObjectSpatialAwarenessObjectParent{get;}
/// <summary>
/// Creates the a parent, that is a child of the Spatial Awareness System parent so that the scene hierarchy does not get overly cluttered.
/// </summary>
/// <returns>
/// The <see href="https://docs.unity3d.com/ScriptReference/GameObject.html">GameObject</see> to which spatial awareness objects will be parented.
/// </returns>
/// <remarks>
/// This method is to be called by implementations of the <see cref="IMixedRealitySpatialAwarenessObserver"/> interface, not by application code. It
/// is used to enable observations to be grouped by observer.
/// Get or sets the desired Unity Physics Layer on which to set the spatial mesh.
/// </summary>
/// <remarks>
/// If not explicitly set, it is recommended that implementations return <see cref="IMixedRealitySpatialAwarenessObserver.DefaultPhysicsLayer"/>.
/// </remarks>
intMeshPhysicsLayer{get;set;}
/// <summary>
/// Gets the bit mask that corresponds to the value specified in <see cref="MeshPhysicsLayer"/>.
/// </summary>
intMeshPhysicsLayerMask{get;}
/// <summary>
/// Indicates whether or not mesh normals should be recalculated by the observer.
/// </summary>
boolRecalculateNormals{get;set;}
/// <summary>
/// Gets or sets the level of detail, in triangles per cubic meter, for the returned spatial mesh.
/// </summary>
/// <remarks>
/// When specifying a <see cref="LevelOfDetail"/> other than Custom, this value will be automatically overwritten with system default values.
/// </remarks>
intTrianglesPerCubicMeter{get;set;}
/// <summary>
/// Gets or sets the <see href="https://docs.unity3d.com/ScriptReference/Material.html">Material</see> to be used when spatial <see href="https://docs.unity3d.com/ScriptReference/Mesh.html">Mesh</see>es should occlude other objects.
/// </summary>
MaterialOcclusionMaterial{get;set;}
/// <summary>
/// Gets or sets the <see href="https://docs.unity3d.com/ScriptReference/Material.html">Material</see> to be used when displaying <see href="https://docs.unity3d.com/ScriptReference/Mesh.html">Mesh</see>es.
/// Indicates the developer's intended startup behavior.
/// </summary>
AutoStartBehaviorStartupBehavior{get;set;}
/// <summary>
/// Get or sets the default Unity Physics Layer on which to set the spatial object.
/// </summary>
intDefaultPhysicsLayer{get;}
/// <summary>
/// Is the observer running (actively accumulating spatial data)?
/// </summary>
boolIsRunning{get;}
/// <summary>
/// Should the observer remain stationary in the scene?
/// </summary>
/// <remarks>
/// Set IsStationaryObserver to false to move the volume with the user.
/// If set to true, the origin will be 0,0,0 or the last known location.
/// </remarks>
boolIsStationaryObserver{get;set;}
/// <summary>
/// Gets or sets the type of volume the observer should operate in.
/// </summary>
VolumeTypeObserverVolumeType{get;set;}
/// <summary>
/// Gets or sets the extents( 1/2 size) of the volume, in meters per axis, from which individual observations will be made.
/// </summary>
/// <remarks>
/// When used when <see cref="ObserverVolumeType"/> is set to <see cref="Microsoft.MixedReality.Toolkit.Utilities.VolumeType.Sphere"/> the X value of the extents will be
/// used as the radius.
/// </remarks>
Vector3ObservationExtents{get;set;}
/// <summary>
/// Gets or sets the orientation of the volume in World Space.
/// </summary>
/// <remarks>
/// This is only used when <see cref="ObserverVolumeType"/> is set to <see cref="Microsoft.MixedReality.Toolkit.Utilities.VolumeType.UserAlignedCube"/>
/// </remarks>
QuaternionObserverRotation{get;set;}
/// <summary>
/// Gets or sets the origin, in World Space, of the observer.
/// </summary>
/// <remarks>
/// Moving the observer origin allows the spatial awareness system to locate and discard meshes as the user
/// navigates the environment.
/// </remarks>
Vector3ObserverOrigin{get;set;}
/// <summary>
/// Gets or sets the frequency, in seconds, at which the spatial observer should update.
/// </summary>
floatUpdateInterval{get;set;}
/// <summary>
/// Start | resume the observer.
/// </summary>
voidResume();
/// <summary>
/// Stop | pause the observer
/// </summary>
voidSuspend();
/// <summary>
/// Clears the observer's collection of observations.
/// </summary>
/// <remarks>
/// If the observer is currently running, calling ClearObservations will suspend it.
/// The interface for defining an <see cref="ISpatialAwarenessPhysicsProperties"/> which provides physical materials
/// </summary>
publicinterfaceISpatialAwarenessPhysicsProperties
{
/// <summary>
/// Gets or sets the <see href="https://docs.unity3d.com/ScriptReference/PhysicMaterial.html">PhysicMaterial</see> to be used when displaying <see href="https://docs.unity3d.com/ScriptReference/Mesh.html">Mesh</see>es.