Mengonfigurasi pengamat jala melalui kode — MRTK2

Artikel ini akan membahas beberapa mekanisme utama dan API untuk mengonfigurasi sistem Kesadaran Spasial secara terprogram dan penyedia data pengamat Mesh terkait.

Mengakses pengamat jala

Mesh kelas Observer yang mengimplementasikan IMixedRealitySpatialAwarenessMeshObserver antarmuka menyediakan data jala khusus platform ke sistem Kesadaran Spasial. Beberapa Pengamat dapat dikonfigurasi di profil Kesadaran Spasial.

Mengakses penyedia data sistem Kesadaran Spasial sebagian besar sama dengan layanan toolkit Mixed Reality lainnya. Layanan Kesadaran Spasial harus ditransmisikan ke IMixedRealityDataProviderAccess antarmuka untuk mengakses melalui GetDataProvider<T> API, yang kemudian dapat digunakan untuk mengakses objek Mesh Observer secara langsung pada runtime.

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

Pembantu CoreServices.GetSpatialAwarenessSystemDataProvider<T>() menyederhanakan pola akses ini seperti yang ditunjukkan di bawah ini.

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

Memulai dan menghentikan pengamatan jala

Salah satu tugas paling umum saat berhadapan dengan sistem Kesadaran Spasial adalah menonaktifkan/menyalakan fitur secara dinamis saat runtime. Ini dilakukan per Observer melalui IMixedRealitySpatialAwarenessObserver.Resume API dan 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();

Fungsionalitas kode ini juga dapat disederhanakan melalui akses melalui sistem Kesadaran Spasial secara langsung.

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

Memulai dan menghentikan semua pengamatan jala

Umumnya nyaman untuk memulai/menghentikan semua pengamatan jala dalam aplikasi. Ini dapat dicapai melalui API sistem Kesadaran Spasial yang bermanfaat, ResumeObservers() dan SuspendObservers().

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

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

Menghitung dan mengakses jala

Mengakses jala dapat dilakukan per Pengamat dan kemudian menghitung melalui jala yang diketahui oleh Mesh Observer melalui IMixedRealitySpatialAwarenessMeshObserver API.

Jika berjalan di editor, seseorang dapat menggunakan AssetDatabase.CreateAsset() untuk menyimpan Mesh objek ke file aset.

Jika berjalan di perangkat, ada banyak plugin komunitas dan penyimpanan yang tersedia untuk menserialisasikan MeshFilter data ke dalam jenis file model (Contoh OBJ).

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

Menampilkan dan menyembunyikan jala spasial

Dimungkinkan untuk menyembunyikan/menampilkan jala secara terprogram menggunakan kode sampel di bawah ini:

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

Mendaftar untuk peristiwa pengamatan jala

Komponen dapat mengimplementasikan IMixedRealitySpatialAwarenessObservationHandler<SpatialAwarenessMeshObject> dan kemudian mendaftar dengan sistem Kesadaran Spasial untuk menerima peristiwa Pengamatan Mesh.

DemoSpatialMeshHandler Skrip (Aset/MRTK/Contoh/Demo/SpatialAwareness/Scripts) adalah contoh yang berguna dan titik awal untuk mendengarkan peristiwa pengamat Mesh.

Ini adalah contoh yang disederhanakan dari skrip DemoSpatialMeshHandler dan peristiwa pengamatan Mesh mendengarkan.

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

Lihat juga