Konfigurace pozorovatelů sítě prostřednictvím kódu – MRTK2
Tento článek popisuje některé klíčové mechanismy a rozhraní API pro programovou konfiguraci systému Spatial Awareness a souvisejících zprostředkovatelů dat Mesh Observer .
Přístup k pozorovatelům sítě
Třídy Mesh Observer, které implementují IMixedRealitySpatialAwarenessMeshObserver
rozhraní, poskytují data sítě specifická pro platformu systému Spatial Awareness. V profilu Spatial Awareness je možné nakonfigurovat více pozorovatelů.
Přístup k poskytovatelům dat v systému Spatial Awareness je většinou stejný jako přístup k jakékoli jiné službě Mixed Reality Toolkit. Služba Spatial Awareness se musí přetypovat do IMixedRealityDataProviderAccess
rozhraní pro přístup prostřednictvím GetDataProvider<T>
rozhraní API, která se pak dají využít pro přístup k objektům Mesh Observer přímo za běhu.
// Use CoreServices to quickly get access to the IMixedRealitySpatialAwarenessSystem
var spatialAwarenessService = CoreServices.SpatialAwarenessSystem;
// Cast to the IMixedRealityDataProviderAccess to get access to the data providers
var dataProviderAccess = spatialAwarenessService as IMixedRealityDataProviderAccess;
var meshObserver = dataProviderAccess.GetDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();
Pomocná rutina CoreServices.GetSpatialAwarenessSystemDataProvider<T>()
zjednodušuje tento model přístupu, jak je znázorněno níže.
// Get the first Mesh Observer available, generally we have only one registered
var meshObserver = CoreServices.GetSpatialAwarenessSystemDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();
// Get the SpatialObjectMeshObserver specifically
var meshObserverName = "Spatial Object Mesh Observer";
var spatialObjectMeshObserver = dataProviderAccess.GetDataProvider<IMixedRealitySpatialAwarenessMeshObserver>(meshObserverName);
Spouštění a zastavování pozorování sítě
Jedním z nejběžnějších úkolů při práci se systémem Spatial Awareness je dynamické vypnutí nebo zapnutí funkce za běhu. To se provádí pro pozorovatele IMixedRealitySpatialAwarenessObserver.Resume
prostřednictvím rozhraní API a IMixedRealitySpatialAwarenessObserver.Suspend
.
// Get the first Mesh Observer available, generally we have only one registered
var observer = CoreServices.GetSpatialAwarenessSystemDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();
// Suspends observation of spatial mesh data
observer.Suspend();
// Resumes observation of spatial mesh data
observer.Resume();
Tuto funkci kódu lze také zjednodušit prostřednictvím přímého přístupu prostřednictvím systému Spatial Awareness.
var meshObserverName = "Spatial Object Mesh Observer";
CoreServices.SpatialAwarenessSystem.ResumeObserver<IMixedRealitySpatialAwarenessMeshObserver>(meshObserverName);
Spouštění a zastavování všech pozorování sítě
Obecně je vhodné spustit/zastavit všechna pozorování sítě v aplikaci. Toho lze dosáhnout pomocí užitečných rozhraní API ResumeObservers()
systému Prostorového povědomí a SuspendObservers()
.
// Resume Mesh Observation from all Observers
CoreServices.SpatialAwarenessSystem.ResumeObservers();
// Suspend Mesh Observation from all Observers
CoreServices.SpatialAwarenessSystem.SuspendObservers();
Vytvoření výčtu sítí a přístup k okům
Přístup k sítím je možné provést pomocí pozorovatele a pak vytvořit výčet přes sítě, které tento pozorovatel sítě zná prostřednictvím IMixedRealitySpatialAwarenessMeshObserver
rozhraní API.
Při spuštění v editoru AssetDatabase.CreateAsset()
můžete použít k uložení objektu Mesh
do souboru prostředku.
Pokud běží na zařízení, je k dispozici mnoho modulů plug-in komunity a Store, které serializují MeshFilter
data do typu souboru modelu.
// Get the first Mesh Observer available, generally we have only one registered
var observer = CoreServices.GetSpatialAwarenessSystemDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();
// Loop through all known Meshes
foreach (SpatialAwarenessMeshObject meshObject in observer.Meshes.Values)
{
Mesh mesh = meshObject.Filter.mesh;
// Do something with the Mesh object
}
Zobrazení a skrytí prostorové sítě
Pomocí následujícího vzorového kódu je možné sítě skrýt nebo zobrazit prostřednictvím kódu programu:
// Get the first Mesh Observer available, generally we have only one registered
var observer = CoreServices.GetSpatialAwarenessSystemDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();
// Set to not visible
observer.DisplayOption = SpatialAwarenessMeshDisplayOptions.None;
// Set to visible and the Occlusion material
observer.DisplayOption = SpatialAwarenessMeshDisplayOptions.Occlusion;
Registrace událostí pozorování sítě
Komponenty mohou implementovat IMixedRealitySpatialAwarenessObservationHandler<SpatialAwarenessMeshObject>
a pak se zaregistrovat do systému Spatial Awareness pro příjem událostí pozorování sítě.
Užitečným DemoSpatialMeshHandler
příkladem a výchozím bodem pro naslouchání událostem pozorovatele sítě je skript (Assets/MRTK/Examples/Demos/SpatialAwareness/Scripts).
Toto je zjednodušený příklad skriptu DemoSpatialMeshHandler a naslouchání událostí pozorování sítě.
// Simplify type
using SpatialAwarenessHandler = IMixedRealitySpatialAwarenessObservationHandler<SpatialAwarenessMeshObject>;
public class MyMeshObservationExample : MonoBehaviour, SpatialAwarenessHandler
{
private void OnEnable()
{
// Register component to listen for Mesh Observation events, typically done in OnEnable()
CoreServices.SpatialAwarenessSystem.RegisterHandler<SpatialAwarenessHandler>(this);
}
private void OnDisable()
{
// Unregister component from Mesh Observation events, typically done in OnDisable()
CoreServices.SpatialAwarenessSystem.UnregisterHandler<SpatialAwarenessHandler>(this);
}
public virtual void OnObservationAdded(MixedRealitySpatialAwarenessEventData<SpatialAwarenessMeshObject> eventData)
{
// Do stuff
}
public virtual void OnObservationUpdated(MixedRealitySpatialAwarenessEventData<SpatialAwarenessMeshObject> eventData)
{
// Do stuff
}
public virtual void OnObservationRemoved(MixedRealitySpatialAwarenessEventData<SpatialAwarenessMeshObject> eventData)
{
// Do stuff
}
}