Giriş olayları

Aşağıdaki liste, özel bir Monodavranış bileşeni tarafından uygulanacak tüm kullanılabilir giriş olayı arabirimlerini özetler. Bu arabirimler, Kullanıcı giriş etkileşimleri temelinde özel uygulama mantığını işlemek için MRTK giriş sistemi tarafından çağırılır. İşaretçi girişi olayları aşağıdaki standart giriş olayı türlerinden biraz farklı şekilde işlenir.

Önemli

Varsayılan olarak, bir komut dosyası yalnızca odak içindeki bir oyun nesnesinin işaretçisi veya üst öğesi tarafından odak bulunan Oyunnesne ise giriş olayları alır.

İşleyici Ekinlikler Description
IMixedRealitySourceStateHandler Kaynak algılandı/kayboldu Bir giriş kaynağı algılandığında/kaybolduğunda, bir ifade edildiğinde ya da kaybedildiği sırada tetiklenir.
IMixedRealitySourcePoseHandler Kaynak pozu değişti Kaynak pozda değiştiğinde harekete geçirilir. Kaynak pozu, giriş kaynağının genel poznu temsil eder. Altı DOF denetleyicinin tutamacı veya işaretçi pozları gibi belirli pozlar aracılığıyla elde edilebilir IMixedRealityInputHandler<MixedRealityPose> .
IMixedRealityInputHandler Giriş/yukarı Düğmeler gibi ikili girişlerdeki değişiklikler üzerine getirilir.
IMixedRealityInputHandler<T> Giriş değiştirildi Verilen türdeki girişlerde yapılan değişiklikler üzerine getirilir. T aşağıdaki değerleri alabilir:
- - (ör analog tetikleyiciyi döndürür)
- - (ör. oyun yüzeyi parmak kolu yönünü döndürür)
- - (örneğin, izlenen cihazın dönüş konumu)
- - (izlenen cihazın yönünü döndürür)
- - (ör. tam olarak izlenen cihaz döndürür)
IMixedRealitySpeechHandler Konuşma anahtar sözcüğü tanınmıyor Konuşma komutları profilindeyapılandırılan anahtar sözcüklerden birinin tanınabilmesi için yükseltildi.
IMixedRealityDictationHandler Etme
Z
Sonuç
Tamamla
Hata
Dikte etme oturumunun sonuçlarını raporlamak için dikte sistemleri tarafından oluşturulur.
IMixedRealityGestureHandler Hareket olayları:
Başlarken
Güncelleştirildi
Tamamlandı
İptal edildi
Hareket algılaması üzerine getirilir.
IMixedRealityGestureHandler<T> Hareket güncelleştirildi/tamamlandı Verilen türdeki ek verileri içeren hareketlerin algılanması sırasında oluşturuldu. Tiçin olası değerler hakkında ayrıntılı bilgi için bkz. hareket olayları .
IMixedRealityHandJointHandler Bir yandan güncellenmiş Her ne zaman bir yandan, el ile oluşturulan yan denetleyiciler tarafından oluşturulur.
IMixedRealityHandMeshHandler El ağı güncelleştirildi Bir el ağ güncelleştirildikten sonra oluşturulan yan denetleyiciler tarafından oluşturuldu.
IMixedRealityInputActionHandler Başlatılan işlem/bitiş Eylemlerle eşlenen girişler için eylem başlangıcını ve bitişini belirten yükseltme.

Giriş olayları eylemde

Komut dosyası düzeyinde, yukarıdaki tabloda gösterilen olay işleyici arabirimlerinden biri çalıştırılarak giriş olayları tüketilebilir. Bir giriş olayı Kullanıcı etkileşimi aracılığıyla tetiklendiğinde, aşağıdakiler gerçekleşir:

  1. MRTK giriş sistemi, bir giriş olayının oluştuğunu algılar.
  2. MRTK giriş sistemi, giriş olayının ilgili arabirim işlevini tüm kayıtlı genel giriş işleyicilerine tetikleyen
  3. Giriş sistemine kayıtlı her etkin işaretçi için:
    1. Giriş sistemi, geçerli işaretçi için hangi Oyunnesne odağa sahip olduğunu belirler.
    2. Giriş sistemi, tüm eşleşen bileşenler için odaklanmış oyun nesnesi üzerinde ilgili arabirim işlevini başlatmak üzere Unity 'nin olay sistemini kullanır.
    3. Herhangi bir noktada bir giriş olayı kullanılmış olarak işaretlenmişse, işlem sona acaktır ve daha fazla gameobjects geri çağırmaları almaz.
      • Örnek: IMixedRealitySpeechHandler bir konuşma komutu tanındığında arabirimi uygulayan bileşenlere arama yapılır.
      • Note: geçerli GameObject üzerinde istenen arabirimle eşleşen hiçbir bileşen bulunamazsa, Unity olay sistemi üst oyun nesnesini aramak üzere balon oluşturacak.
  4. Kayıtlı bir genel giriş işleyicisi yoksa ve eşleşen bileşen/arabirim ile hiçbir GameObject bulunmazsa, giriş sistemi her geri dönüş kayıtlı giriş işleyicisini çağırır

Not

İşaretçi girişi olayları , yukarıda listelenen giriş olayı arabirimlerinden biraz farklı bir şekilde işlenir. Özellikle, işaretçi giriş olayları yalnızca, giriş olayını ve tüm genel giriş işleyicilerini tetikleyen işaretçiye odaklanılmış olan GameObject tarafından işlenir. Normal giriş olayları, tüm etkin işaretçiler için odak içindeki GameObjects tarafından işlenir.

Giriş olayı arabirimi örneği

Aşağıdaki kod arabirimin kullanımını gösterir IMixedRealitySpeechHandler . Kullanıcı bu sınıfla bir GameObject üzerine odaklanıldığında "daha küçük" veya "daha büyük" sözcüklerini söyyorsa ShowHideSpeechHandler , oyun nesnesi kendisini yarı veya iki katına çok daha ölçeklendirecektir.

public class ShowHideSpeechHandler : MonoBehaviour, IMixedRealitySpeechHandler
{
    ...

    void IMixedRealitySpeechHandler.OnSpeechKeywordRecognized(SpeechEventData eventData)
    {
        if (eventData.Command.Keyword == "smaller")
        {
            transform.localScale *= 0.5f;
        }
        else if (eventData.Command.Keyword == "bigger")
        {
            transform.localScale *= 2.0f;
        }
    }
}

Not

IMixedRealitySpeechHandler giriş olayları, IMixedRealitySpeechHandleristenen anahtar sözcüklerin önceden kaydedilmesini gerektirir.

Genel Giriş olaylarına kaydolun

Küresel giriş olaylarını dinleyen bir bileşen oluşturmak için, hangi GameObject 'in odağa dahil olabileceğini, bir bileşenin kendisini giriş sistemiyle kaydetmesi gerekir. Kaydedildikten sonra, bu monoya ait her türlü örnek, şu anda odağa sahip olan herhangi bir oyun nesnesiyle birlikte giriş olaylarını ve diğer Global kayıtlı dinleyicileri alır.

Bir giriş olayı kullanılmış olarak işaretlenmişse, genel kayıtlı işleyiciler hala geri çağırmaları almaya devam eder. Ancak, hiçbir odaklanmış GameObjects olayı almaz.

Genel Giriş kaydı örneği

public class GlobalHandListenerExample : MonoBehaviour,
    IMixedRealitySourceStateHandler, // Handle source detected and lost
    IMixedRealityHandJointHandler // handle joint position updates for hands
{
    private void OnEnable()
    {
        // Instruct Input System that we would like to receive all input events of type
        // IMixedRealitySourceStateHandler and IMixedRealityHandJointHandler
        CoreServices.InputSystem?.RegisterHandler<IMixedRealitySourceStateHandler>(this);
        CoreServices.InputSystem?.RegisterHandler<IMixedRealityHandJointHandler>(this);
    }

    private void OnDisable()
    {
        // This component is being destroyed
        // Instruct the Input System to disregard us for input event handling
        CoreServices.InputSystem?.UnregisterHandler<IMixedRealitySourceStateHandler>(this);
        CoreServices.InputSystem?.UnregisterHandler<IMixedRealityHandJointHandler>(this);
    }

    // IMixedRealitySourceStateHandler interface
    public void OnSourceDetected(SourceStateEventData eventData)
    {
        var hand = eventData.Controller as IMixedRealityHand;

        // Only react to articulated hand input sources
        if (hand != null)
        {
            Debug.Log("Source detected: " + hand.ControllerHandedness);
        }
    }

    public void OnSourceLost(SourceStateEventData eventData)
    {
        var hand = eventData.Controller as IMixedRealityHand;

        // Only react to articulated hand input sources
        if (hand != null)
        {
            Debug.Log("Source lost: " + hand.ControllerHandedness);
        }
    }

    public void OnHandJointsUpdated(
                InputEventData<IDictionary<TrackedHandJoint, MixedRealityPose>> eventData)
    {
        MixedRealityPose palmPose;
        if (eventData.InputData.TryGetValue(TrackedHandJoint.Palm, out palmPose))
        {
            Debug.Log("Hand Joint Palm Updated: " + palmPose.Position);
        }
    }
}

Geri dönüş giriş olayları için kaydolun

Geri dönüş giriş işleyicileri kayıtlı genel giriş işleyicilerine benzerdir, ancak giriş olayı işleme için son çare olarak değerlendirilir. Yalnızca genel giriş işleyicileri bulunmazsa ve odak içinde hiçbir GameObjects yoksa, geri dönüş giriş işleyicileri yararlanılabilir olur.

Geri dönüş giriş işleyicisi örneği

public class GlobalHandListenerExample : MonoBehaviour,
    IMixedRealitySourceStateHandler // Handle source detected and lost
{
    private void OnEnable()
    {
        CoreServices.InputSystem?.PushFallbackInputHandler(this);
    }

    private void OnDisable()
    {
        CoreServices.InputSystem?.PopFallbackInputHandler();
    }

    // IMixedRealitySourceStateHandler interface
    public void OnSourceDetected(SourceStateEventData eventData)
    {
        ...
    }

    public void OnSourceLost(SourceStateEventData eventData)
    {
        ...
    }
}

Giriş olaylarını durdurma

Her giriş olay arabirimi BaseInputEventData , arabirimdeki her işleve parametre olarak bir veri nesnesi sağlar. Bu olay veri nesnesi Unity 'nin kendi öğesinden genişletiliyor AbstractEventData .

Bir giriş olayının, ana hatlarıyla gösterildiği gibiyürütme yoluyla yayılmasını durdurmak için, bir bileşen olayı kullanılan olarak işaretlemek için çağrı yapabilir. Bu, diğer tüm oyun nesnelerinin geçerli giriş olayını almasını durduracak ve bu da genel giriş işleyicileri hariç olur.

Not

Yöntemi çağıran bir bileşen, Use() diğer GameObjects 'in almasını durdurur. Ancak, geçerli Oyunobject üzerindeki diğer bileşenler, giriş olayını almaya devam eder ve ilgili arabirim işlevlerini de tetikler.

Ayrıca bkz.