Hálócsomópont konfigurálása kóddal

Ez a cikk néhány fő mechanizmust és API-t ismertet a térbeli tudatosság rendszer és a kapcsolódó Mesh Observer adatszolgáltatók programozott konfigurálásán.

A háló megfigyelőinek elérése

A felületet implementáló Mesh Observer-osztályok platformspecifikus hálóadatokat biztosítanak a IMixedRealitySpatialAwarenessMeshObserver térbeli tudatosság rendszer számára. A Térbeli tudatosság profilban több megfigyelő is konfigurálható.

A Tértudatos rendszer adatszolgáltatóihoz való hozzáférés többnyire megegyezik a többi Mixed Reality eszközkészlet-szolgáltatáshoz. A Térbeli tudatosság szolgáltatást a felületre kell átírni az API-kon keresztüli hozzáféréshez, amely ezután a Mesh-megfigyelő objektumok közvetlen elérésére használható IMixedRealityDataProviderAccessGetDataProvider<T> futásidőben.

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

A CoreServices.GetSpatialAwarenessSystemDataProvider<T>() segítő leegyszerűsíti ezt a hozzáférési mintát az alább látható módon.

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

Hálómegfigyelás indítása és leállítása

A térbeli tudatossági rendszer egyik leggyakoribb feladata a funkció dinamikus kikapcsolása futásidőben. Ez megfigyelőnként történik a IMixedRealitySpatialAwarenessObserver.Resume és IMixedRealitySpatialAwarenessObserver.Suspend API-kon keresztül.

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

Ez a kódfunkció a Spatial Awareness rendszer közvetlen elérésével is egyszerűsíthető.

var meshObserverName = "Spatial Object Mesh Observer";
CoreServices.SpatialAwarenessSystem.ResumeObserver<IMixedRealitySpatialAwarenessMeshObserver>(meshObserverName);

Az összes hálómegfigyelás indítása és leállítása

Általában kényelmes elindítani/leállítani az alkalmazásban található összes hálómegfigyeléseket. Ez a Spatial Awareness rendszer hasznos API-ja és a segítségével ResumeObservers() érhető SuspendObservers() el.

// Resume Mesh Observation from all Observers
CoreServices.SpatialAwarenessSystem.ResumeObservers();

// Suspend Mesh Observation from all Observers
CoreServices.SpatialAwarenessSystem.SuspendObservers();

A hálók számbavétele és elérése

A hálók elérése megfigyelőnként történik, majd az API-n keresztül enumerálható a Mesh-megfigyelő által ismert IMixedRealitySpatialAwarenessMeshObserver hálókban.

Ha a szerkesztőben fut, a használatával mentheti az AssetDatabase.CreateAsset()Mesh objektumot egy objektumfájlba.

Ha eszközön fut, számos közösségi és áruházi beépülő modul áll rendelkezésre az adatok modellfájltípusba MeshFilter valóMeshFilter).

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

A térbeli háló megjelenítése és elrejtése

Az alábbi mintakóddal programozott módon elrejtheti/mutathat hálókat:

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

Regisztrálás hálómegfigyelés eseményeire

Az összetevők implementálják a-t, majd regisztrálnak a Spatial Awareness rendszerrel a IMixedRealitySpatialAwarenessObservationHandler<SpatialAwarenessMeshObject> Mesh-megfigyelés eseményeinek fogadására.

Az DemoSpatialMeshHandler (Assets/MRTK/Examples/Demos/SpatialAwareness/Scripts) szkript hasznos példa és kiindulási pont a Mesh Observer-események figyelésében.

Ez egy egyszerűsített példa a DemoSpatialMeshHandler szkriptre és a Mesh-megfigyelés esemény figyelésére.

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

Lásd még