Aracılığıyla paylaş


Unity'de izleme kaybı

Cihaz kendini dünyada bulamıyorsa, uygulama "kayıp izleme" ile karşılaşır. Unity varsayılan olarak 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 giriş 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 durur. 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ıklayarak ve 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çin Proje Ayarları>Oynatıcısını> Düzenle>Evrensel Windows Platformu ayarlar sekmesi>Giriş Görüntüsü>Windows Holographic'e gitmeniz ve "İzleme Kaybı 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çlı izlemeyi algılamak için bir olay (WorldManager.OnPositionalLocatorStateChanged) ve geçerli durumu sorgulamak için bir özellik (WorldManager.state) 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 tümü gövde kilitli görünür.

İzleme değişikliklerini kendiniz işlerken, her çerçevenin state özelliğini yoklamanız veya OnPositionalLocatorStateChanged olayını işlemeniz gerekir.

Yoklamanın Karşılaştırması

En önemli durum PositionalLocatorState.Active'dir ve bu da izlemenin tamamen işlevsel olduğu anlamına gelir. Diğer tüm eyaletler ana kamerada yalnızca döndürme deltalarına neden olur. Örneğin:

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.