Unity'de izleme kaybı

Cihaz kendisini dünyada bulamıyorsa, uygulama "izleme kaybı" yaşar. Varsayılan olarak Unity güncelleştirme döngüsünü duraklatır ve izleme kaybolduğunda kullanıcıya bir giriş görüntüsü görüntüler. İzleme yeniden elde edildikten sonra sıçrama görüntüsü kaybolur ve güncelleştirme döngüsü devam eder.

Alternatif olarak, kullanıcı ayarı geri çevirerek bu geçişi el ile işleyebilir. İşlemek için hiçbir şey yapılmazsa, izleme kaybı sırasında tüm içerik gövdeye kilitlenmiş gibi görünür.

Varsayılan İşleme

Güncelleştirme döngüsü ve tüm iletiler ve olaylar varsayılan olarak izleme kaybı süresince durdurulacaktır. Aynı zamanda, kullanıcıya bir görüntü görüntülenir. Edit-Settings-Player'a>> gidip Giriş Görüntüsü'ne tıklayıp Holografik İzleme Kaybı görüntüsünü ayarlayarak bu görüntüyü özelleştirebilirsiniz.

El ile İşleme

İzleme kaybını el ile işlemek içinProje Ayarları>Oynatıcısını>Düzenle>Evrensel Windows Platformu ayarlar sekmesine> GirişGörüntüsü>Windows Holographic'e gitmeniz ve "İzleme KaybıNda Duraklatma ve Görüntüyü Göster" seçeneğinin işaretini kaldırmanız gerekir. Bundan sonra, aşağıda belirtilen API'lerle değişiklikleri izlemeniz gerekir.

Ad Alanı:UnityEngine.XR.WSA
Tür:WorldManager

  • World Manager, kayıp/kazanılan izlemeyi algılamak için bir olayı (WorldManager.OnPositionalLocatorStateChanged) ve geçerli durumu (WorldManager.state) sorgulamak için bir özelliği kullanıma sunar
  • İzleme durumu etkin olmadığında, kullanıcı çeviri yaparken bile kamera sanal dünyada çevrilmiş gibi görünmez. Nesneler artık herhangi bir fiziksel konuma karşılık gelir ve hepsi gövde kilitli görünür.

İzleme değişikliklerini kendi başınıza işlerken, her karenin state özelliğini yoklamanız veya OnPositionalLocatorStateChanged olayını işlemeniz gerekir.

Yoklama

En önemli durum PositionalLocatorState.Active'tir ve bu da izlemenin tamamen işlevsel olduğu anlamına gelir. Diğer herhangi bir durum ana kameraya yalnızca dönme değişimleriyle 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 bir şekilde, geçişleri işlemek için OnPositionalLocatorStateChanged'e 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.