Bagikan melalui


Kehilangan pelacakan di Unity

Ketika perangkat tidak dapat menemukan dirinya sendiri di dunia, aplikasi mengalami "kehilangan pelacakan". Secara default, Unity akan menjeda perulangan pembaruan dan menampilkan citra percikan kepada pengguna kapan saja pelacakan hilang. Setelah pelacakan kembali, citra splash hilang dan perulangan pembaruan berlanjut.

Sebagai alternatif, pengguna dapat menangani transisi ini secara manual dengan memilih keluar dari pengaturan. Semua konten akan tampak terkunci selama kehilangan pelacakan jika tidak ada yang dilakukan untuk menanganinya.

Penanganan Default

Perulangan pembaruan dan semua pesan dan peristiwa akan berhenti selama durasi kehilangan pelacakan secara default. Pada saat yang sama, gambar akan ditampilkan kepada pengguna. Anda dapat menyesuaikan gambar ini dengan masuk ke Edit-Pengaturan-Pemutar>>, mengklik Splash Image, dan mengatur gambar Kehilangan Pelacakan Holografik.

Penanganan Manual

Untuk menangani kehilangan pelacakan secara manual, Anda perlu membuka Edit>Pemutar> Pengaturan>Proyek Platform Windows Universal tab>pengaturan Splash Image>Windows Holographic dan hapus centang "On Tracking Loss Pause and Show Image". Setelah itu, Anda perlu menangani perubahan pelacakan dengan API yang ditentukan di bawah ini.

Namespace: UnityEngine.XR.WSA
Jenis: WorldManager

  • Manajer Dunia mengekspos peristiwa untuk mendeteksi pelacakan hilang/diperoleh (WorldManager.OnPositionalLocatorStateChanged) dan properti untuk mengkueri status saat ini (WorldManager.state)
  • Ketika status pelacakan tidak aktif, kamera tidak akan tampak menerjemahkan di dunia virtual bahkan saat pengguna menerjemahkan. Objek tidak akan lagi sesuai dengan lokasi fisik apa pun dan semua akan tampak terkunci.

Saat menangani perubahan pelacakan sendiri, Anda perlu melakukan polling untuk properti status setiap bingkai atau menangani peristiwa OnPositionalLocatorStateChanged .

Polling

Status yang paling penting adalah PositionalLocatorState.Active, yang berarti pelacakan berfungsi penuh. Status lainnya hanya akan menghasilkan delta rotasi ke kamera utama. Contohnya:

void Update()
{
    switch (UnityEngine.XR.WSA.WorldManager.state)
    {
        case PositionalLocatorState.Active:
            // handle active
            break;
        case PositionalLocatorState.Activating:
        case PositionalLocatorState.Inhibited:
        case PositionalLocatorState.OrientationOnly:
        case PositionalLocatorState.Unavailable:
        default:
            // only rotational information is available
            break;
    }
}

Menangani peristiwa OnPositionalLocatorStateChanged

Lebih nyaman, Anda juga dapat berlangganan OnPositionalLocatorStateChanged untuk menangani transisi:

void Start()
{
    UnityEngine.XR.WSA.WorldManager.OnPositionalLocatorStateChanged += WorldManager_OnPositionalLocatorStateChanged;
}

private void WorldManager_OnPositionalLocatorStateChanged(PositionalLocatorState oldState, PositionalLocatorState newState)
{
    if (newState == PositionalLocatorState.Active)
    {
        // Handle becoming active
    }
    else
    {
        // Handle becoming rotational only
    }
}

Lihat juga