Memindahkan Mode Platform di Unity
Memindahkan Mode Platform memungkinkan HoloLens 2 untuk bekerja dengan benar pada platform yang bergerak seperti kapal, platform oli, dan kendaraan lainnya.
Pelajari selengkapnya tentang Mode Platform Pemindahan
Gambaran Umum Konseptual
Agar sistem realitas campuran berfungsi dengan benar, headset harus dilacak relatif terhadap lingkungan. Pelacakan relatif ini memungkinkan grafik dirender sededingin itu sehingga mereka tampak kepada pengguna headset terkunci dengan kokoh di lingkungan. Pelacakan biasanya dicapai dengan menggabungkan pose yang dihitung menggunakan kamera dan pengukuran dari Inertial Measurement Unit (IMU). Metode ini berfungsi dengan baik ketika lingkungan berada dalam bingkai referensi inertial. Efek kecil, seperti gerakan planet, biasanya diabaikan.
Ketika lingkungan tidak berada dalam bingkai referensi inertial, sistem pelacakan kepala normal akan gagal. Fitur Mode Platform Bergerak memecahkan masalah ini dengan memperhitungkan gerakan lingkungan relatif terhadap bingkai inertial. Dengan demikian, ketika dalam Mode Platform Bergerak, HoloLens 2 dapat merender hologram yang tampak tetap pada lingkungan, bahkan jika lingkungan adalah kapal yang mengintai!
Bagaimana cara mengaktifkan Mode Platform Bergerak?
Untuk mengaktifkan berbagai kasus penggunaan, berbagai metode telah disediakan untuk mengaktifkan Mode Platform Bergerak. Penting bagi Anda untuk mempertimbangkan metode mana yang harus dipilih dengan hati-hati. Pertanyaan utama yang perlu diajukan adalah: Siapa yang tahu apakah HoloLens 2 saat ini berada dalam platform yang bergerak? Lihat tabel berikut ini misalnya:
Siapa yang tahu apakah HL2 berada dalam platform bergerak | Metode terbaik untuk mengatur Mode Platform Bergerak | Keuntungan | Biaya |
---|---|---|---|
Administrator Sistem | Manajemen Perangkat Seluler | Pengguna tidak perlu terlibat. Aplikasi apa pun akan berfungsi tanpa modifikasi. Perangkat dapat dilindungi agar tidak memasuki mode yang salah. | Pengguna dan Aplikasi tidak dapat mengubah mode. |
Pengguna Akhir | Aplikasi Pengaturan | Pengguna seringkali paling berpengetahuan tentang kapan dan di mana mereka menggunakan perangkat. Aplikasi apa pun akan berfungsi tanpa modifikasi. | Pengguna mungkin tidak tahu mode ada. |
Aplikasi | Gunakan SDK yang dijelaskan dalam artikel ini. | Petunjuk spesifik kasus penggunaan dapat digunakan untuk menukar mode ketika lingkungan tidak dapat diketahui sebelumnya. Menghapus persyaratan bahwa pengguna harus membuat keputusan ini dan mengubah mode dalam pengaturan. | Aplikasi yang dirancang dengan buruk dapat memberikan pengalaman yang sangat buruk, dan meninggalkan perangkat dalam mode yang tidak terduga. |
Praktik terbaik untuk Mode Platform Bergerak
Utama | Deskripsi |
---|---|
Menghormati pilihan pengguna | Anda harus menawarkan pilihan kepada pengguna sebelum mengubah mode untuk mereka, dan Anda harus terus menghormati pilihan tersebut untuk runtime aplikasi |
Memberikan peringatan kepada pengguna | Hindari segera mengubah mode saat memulai/melanjutkan aplikasi. Ini menyajikan pengalaman pengguna yang buruk, karena pengguna mungkin tidak tahu mengapa perangkat kehilangan pelacakan. |
Meminimalkan mode perubahan | Saat mengubah pengaturan Mode Platform Bergerak, perangkat akan kehilangan pelacakan, menyebabkan pengalaman pengguna yang negatif. Oleh karena itu disarankan agar Anda meminimalkan frekuensi yang Anda ubah modenya. Idealnya mode hanya akan diubah jika perangkat beralih dari lingkungan stasioner ke yang bergerak, atau sebaliknya. |
Jika tidak yakin tentang lingkungan, gunakan Mode Platform Pemindahan | Mode Platform Bergerak dapat berfungsi di lingkungan stasioner dan yang bergerak. Algoritma pelacakan reguler hanya berfungsi di lingkungan stasioner, jadi jika Anda tidak yakin tentang apakah lingkungan bergerak, memilih Mode Platform Bergerak dapat menjadi pilihan yang lebih aman. |
Jangan gunakan Mode Platform Bergerak di lingkungan stasioner yang diketahui | Mode Platform Pemindahan berkinerja kurang baik daripada mode standar di lingkungan stasioner. Ini adalah degradasi kecil, meskipun akan terlihat oleh sebagian besar pengguna. |
Pertimbangkan mode apa yang akan membiarkan perangkat berada | SDK ini memungkinkan pengembang untuk merancang pengalaman yang kuat di seluruh boot perangkat. Pertimbangkan apakah perangkat akan berada di platform bergerak lain kali saat booting, dan biarkan perangkat dalam mode yang sesuai. |
Di mana saya bisa mendapatkan SDK?
Moving Platform SDK mendukung proyeksi bahasa untuk C# dan C++, memungkinkan pengembang mengembangkan aplikasi untuk platform Win32 atau UWP. Unduh dan instal SDK dengan Mixed Reality Feature Tool.
Bagaimana cara menggunakan SDK ini
Setelah menginstal SDK, Anda dapat menyiapkan skrip anda untuk menggunakan MovingPlatformManger sebagai berikut:
// Top of file
using Microsoft.MixedReality.MovingPlatform;
// Code body
m_movingPlatformManager = new MovingPlatformManager();
Membaca mode saat ini
Nilai mode saat ini dapat dibaca sebagai berikut:
MovingPlatformMode currentMode = m_movingPlatformManager.Mode;
MovingPlatformMode adalah enum yang didefinisikan sebagai berikut:
public enum MovingPlatformMode
{
Standard, // The legacy mode that devices use out-of-the-box.
MovingPlatformOptimized // Allows tracking on moving platforms.
}
Perangkat yang tidak memiliki Mode Platform Bergerak yang tersedia, seperti perangkat VR dan HoloLens 1, akan selalu menampilkan 'Standar'.
Mengatur mode
Anda dapat mengatur nilai Mode Platform Bergerak sebagai berikut:
bool success = m_movingPlatformManager.TrySetMode(MovingPlatformMode.MovingPlatformOptimized);
TrySetMode akan mengembalikan true jika mode perangkat sekarang cocok dengan mode yang diminta. Jika mode sudah dalam keadaan yang diinginkan, tidak ada yang akan dilakukan dan perangkat tidak akan kehilangan pelacakan.
Panggilan balik pada perubahan mode
Terkadang, mungkin berguna untuk mengetahui apakah aplikasi lain, atau pengguna, telah mengubah nilai Mode Platform Bergerak. Anda dapat melakukan ini sebagai berikut.
// Code Body
m_movingPlatformManager.ModeChanged += CallbackOnMPMChanged;
...
void CallbackOnMPMChanged(object sender, MovingPlatformEventArgs args)
{
movingPlatformModeChanged = true;
movingPlatformModeValue = args.ModeEntered;
}
...
void Update()
{
// It's not reccomended to do work in the callback.
if (movingPlatformModeChanged)
{
movingPlatformModeChanged = false;
// Do some work
}
}
Memeriksa apakah mode dapat diatur
Terkadang berguna untuk mengetahui apakah mode dapat diatur sebelum mencoba mengubahnya. Misalnya, jika Anda ingin tahu apakah ada nilai dalam menanyakan preferensi mereka kepada pengguna. Anda dapat menemukan apakah mode platform pemindahan dapat diatur dengan fungsi IsSetModeSupported:
bool supported = m_movingPlatformManager.IsSetModeSupported();
Fungsi ini akan mengembalikan true jika perangkat dapat mengubah mode, dan false jika tidak memungkinkan. Fungsi ini memperhitungkan kebijakan Mobile Manajemen Perangkat (MDM). Misalnya, jika MDM memaksa MovingPlatformMode ke "On", maka fungsi ini akan mengembalikan false.
Skrip demo
Skrip ini menunjukkan semua elemen penting SDK di satu tempat. Contohnya tidak mengikuti praktik terbaik yang ditunjukkan di atas.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft.MixedReality.MovingPlatform;
using System;
public class MovingPlatformDemo : MonoBehaviour
{
public GameObject cube; // A simple cube to display colors.
private MovingPlatformManager m_movingPlatformManager;
private Renderer cubeRenderer;
private bool movingPlatformModeChanged;
private MovingPlatformMode movingPlatformModeValue;
// Start is called before the first frame update
void Start()
{
m_movingPlatformManager = new MovingPlatformManager();
cubeRenderer = cube.GetComponent<Renderer>();
// Get initial value of mode,
// Just this mechanism would be adequate if a one time check is acceptable.
MovingPlatformMode initialMovingPlatformMode = m_movingPlatformManager.Mode;
// Find if It's possible to change the mode.
bool isSettable = m_movingPlatformManager.IsSetModeSupported();
// Here you would add some use case specific logic using initialMovingPlatformMode and isSettable
// to decide if you should ask the user if they want to change the mode.
// To set the mode.
bool success = m_movingPlatformManager.TrySetMode(MovingPlatformMode.MovingPlatformOptimized);
// Visual indicator of current state: Green = Moving Platform Optimized, Red = Regular.
SetColourFromState(m_movingPlatformManager.Mode, cubeRenderer);
// We set a callback to be notified if there's a change in mode. This is typically optional.
m_movingPlatformManager.ModeChanged += CallbackOnMPMChanged;
movingPlatformModeChanged = false;
}
// Update is called once per frame
void Update()
{
// This must be done in the UI thread.
if (movingPlatformModeChanged)
{
movingPlatformModeChanged = false;
SetColourFromState(movingPlatformModeValue, cubeRenderer);
}
}
// Sets renderer to:
// Green = Moving Platform Mode Enabled
// Red = Moving Platform Mode Disabled
void SetColourFromState(MovingPlatformMode mode, Renderer thisRend)
{
if (mode == MovingPlatformMode.MovingPlatformOptimized)
{
thisRend.material.color = new Color(0f, 1f, 0f, 1f);
}
else
{
thisRend.material.color = new Color(1f, 0f, 0f, 1f);
}
}
void CallbackOnMPMChanged(object sender, MovingPlatformEventArgs args)
{
movingPlatformModeChanged = true;
movingPlatformModeValue = args.ModeEntered;
}
}