Unity 'de kayıp izleme

Cihaz dünyanın kendisini bulamıyorsa, uygulama "izleme kaybı" deneyimidir. Varsayılan olarak, Unity güncelleştirme döngüsünü duraklatır ve Kullanıcı için bir giriş görüntüsü görüntüler, hiçbir zaman izleme kaybedilir. İzleme bir kez alındıktan sonra, giriş görüntüsü kaybolur ve güncelleştirme döngüsü devam eder.

Alternatif olarak, Kullanıcı ayarı kaldırarak bu geçişi el ile işleyebilir. Tüm içerik, işleme hiçbir şey yapılmadığında, izleme kaybı sırasında gövde kilitli hale gelir.

Varsayılan Işleme

Güncelleştirme döngüsü ve tüm iletiler ve olaylar, varsayılan olarak izleme kayıp süresi boyunca durur. Aynı zamanda, kullanıcıya bir görüntü görüntülenir. bu görüntüyü, düzenle->Ayarlar->oynatıcı, giriş resmi ' ne tıklayarak ve Holographic izleme kayıp görüntüsünü ayarlayarak özelleştirebilirsiniz.

El ile Işleme

izleme kaybını el ile işlemek için, > Project Ayarlar > oynatıcı > Evrensel Windows Platformu ayarlar sekmesi > giriş resmi > Windows Holographic ve "izleme kaybını duraklat ve resmi göster" onay kutusunun işaretini kaldırmanız gerekir. Bu tarihten sonra, izleme değişikliklerini aşağıda belirtilen API 'lerle işlemeniz gerekir.

Ad alanı: UnityEngine. xr. wsa
Tür: worldmanager

  • World Manager, kayıp/kazanılan (worldmanager. OnPositionalLocatorStateChanged) izleme durumunu ve geçerli durumu sorgulamak için bir özelliği (worldmanager. State) algılayan bir olay sunar
  • İzleme durumu etkin olmadığında, Kullanıcı çevirdiğinde bile kamera sanal dünyada çevrilmek üzere görünmez. Nesneler artık herhangi bir fiziksel konuma karşılık gelmez ve hepsi gövde kilitli olarak görünür.

İzleme değişikliklerini kendi kendinize işlerken, her kare için durum özelliğini yoklamak veya Onpositionallocatorstatechanged olayını işlemek gerekir.

Yoklama

En önemli durum, Positionallocatorstate. ACTIVE şeklindedir, bu da izlemenin tamamen işlevsel olduğu anlamına gelir. Diğer herhangi bir durum, ana kameraya yalnızca rotasyonlu değişimleri ile sonuçlanır. Örnek:

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

OnPositionalLocatorStateChanged olayını işleme

Daha rahat, geçişleri işlemek için Onpositionallocatorstatechanged öğesine de abone olabilirsiniz:

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

Ayrıca bkz.