Share via


Giriş olayları — MRTK2

Aşağıdaki listede, özel bir MonoBehaviour bileşeni tarafından uygulanacak tüm kullanılabilir giriş olayı arabirimleri özetlenmiştir. Bu arabirimler, kullanıcı giriş etkileşimlerine göre özel uygulama mantığını işlemek için MRTK giriş sistemi tarafından çağrılacaktır. İşaretçi giriş olayları , aşağıdaki standart giriş olayı türlerinden biraz farklı işlenir.

Önemli

Varsayılan olarak, bir betik yalnızca odaktaki GameObject işaretçisi veya odaktaki GameObject'in üst öğesi tarafından odaktaki GameObject olduğunda giriş olaylarını alır.

İşleyici Ekinlikler Description
IMixedRealitySourceStateHandler Kaynak Algılandı / Kayboldu Bir giriş kaynağı algılandığında/kaybolduğunda, örneğin eklemli bir elin algılandığında veya izini kaybettiğinde yükseltilir.
IMixedRealitySourcePoseHandler Kaynak Pozu Değiştirildi Kaynak poz değişikliklerinde yükseltildi. Kaynak poz, giriş kaynağının genel pozunu temsil eder. Altı DOF denetleyicisindeki kavrama veya işaretçi pozu gibi belirli pozlar aracılığıyla IMixedRealityInputHandler<MixedRealityPose>elde edilebilir.
IMixedRealityInputHandler Aşağı / Yukarı Giriş Düğmeler gibi ikili girişlerde yapılan değişikliklere göre oluşturulur.
IMixedRealityInputHandler<T> Giriş Değiştirildi Verilen türdeki girişlerde yapılan değişikliklere göre oluşturulur. Aşağıdaki değerleri alamaz:
- float (örn. analog tetikleyici döndürür)
- Vector2 (örn. oyun çubuğu kontrol çubuğu yönünü döndürür)
- Vector3 (örn. izlenen cihazın dönüş konumu)
- Quaternion (örn. izlenen cihazın yönünü döndürür)
- MixedRealityPose (örneğin, tam olarak izlenen cihaz döndürür)
IMixedRealitySpeechHandler Konuşma Anahtar Sözcüğü Tanındı Konuşma Komutları Profilinde yapılandırılan anahtar sözcüklerden birinin tanınması üzerine yükseltildi.
IMixedRealityDictationHandler Dikte
Hipotez
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 yükseltildi.
IMixedRealityGestureHandler<T> Hareket Güncelleştirildi / Tamamlandı Verilen türdeki ek verileri içeren hareketlerin algılanmasıyla oluşturulur. T için olası değerler hakkında ayrıntılı bilgi için bkz. hareket olayları.
IMixedRealityHandJointHandler El Eklemleri Güncellendi El eklemleri güncelleştirildiğinde eklemli el kumandaları tarafından yükseltilir.
IMixedRealityHandMeshHandler Hand Mesh Güncelleştirildi El örgüleri güncelleştirildiğinde eklemlenmiş el kumandaları tarafından yükseltilir.
IMixedRealityInputActionHandler Eylem Başlatıldı / Sona Erdi Eylemlere eşlenen girişler için eylem başlangıcını ve sonunu göstermek için yükseltin.

Eylemdeki olayları giriş

Betik düzeyinde, giriş olayları yukarıdaki tabloda gösterilen olay işleyicisi arabirimlerinden biri uygulanarak kullanılabilir. Kullanıcı etkileşimi aracılığıyla bir giriş olayı tetiklendiğinde, aşağıdakiler gerçekleşir:

  1. MRTK giriş sistemi bir giriş olayının gerçekleştiğini algılar.
  2. MRTK giriş sistemi, giriş olayının ilgili arabirim işlevini tüm kayıtlı genel giriş işleyicilerine tetikler
  3. Giriş sistemine kayıtlı her etkin işaretçi için:
    1. Giriş sistemi, geçerli işaretçi için hangi GameObject'in odakta olduğunu belirler.
    2. Giriş sistemi , unity'nin olay sistemini kullanarak odaklanmış GameObject'te eşleşen tüm bileşenler için ilgili arabirim işlevini tetikler.
    3. Herhangi bir noktada bir giriş olayı kullanıldı olarak işaretlendiyse, işlem sona erer ve başka GameObjects geri çağırma almaz.
      • Örnek: Arabirimi IMixedRealitySpeechHandler uygulayan bileşenler, konuşma komutu tanındığında aranacaktır.
      • Not: Unity olay sistemi, geçerli GameObject'te istenen arabirimle eşleşen hiçbir bileşen bulunamazsa üst GameObject'te arama yapmak için kabarcık oluşturur.
  4. Hiçbir genel giriş işleyicisi kaydedilmemişse ve eşleşen bir bileşen/arabirim ile GameObject bulunamazsa, giriş sistemi her geri dönüş kayıtlı giriş işleyicisini çağırır

Not

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

Giriş olayı arabirimi örneği

Aşağıdaki kod arabiriminin IMixedRealitySpeechHandler kullanımını gösterir. Kullanıcı bu ShowHideSpeechHandler sınıfla bir GameObject'e odaklanırken "daha küçük" veya "daha büyük" sözcüklerini söylediğinde, GameObject kendisini yarı veya iki kat daha fazla ölçeklendirir.

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ı, istenen anahtar sözcüklerin MRTK Konuşma Komutları Profiline önceden kaydedilmesini gerektirir.

Genel giriş olaylarına kaydolma

Genel giriş olaylarını dinleyen ve hangi GameObject'in odakta olabileceğini dikkate almayan bir bileşen oluşturmak için bir bileşenin kendisini Giriş Sistemi'ne kaydetmesi gerekir. Kaydedildikten sonra, bu MonoBehaviour'un tüm örnekleri, şu anda odakta olan tüm GameObject'ler ve diğer genel kayıtlı dinleyicilerle birlikte giriş olaylarını alır.

Bir giriş olayı kullanıldı olarak işaretlendiyse, genel kayıtlı işleyicilerin tümü 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ına kaydolma

Geri dönüş giriş işleyicileri, kayıtlı genel giriş işleyicilerine benzer, ancak giriş olayı işleme için son çare olarak kabul edilir. Yalnızca hiçbir genel giriş işleyicisi bulunamadıysa ve hiçbir GameObject odakta değilse geri dönüş giriş işleyicilerinden yararlanılır.

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, arabirimdeki her işleve parametre olarak bir BaseInputEventData veri nesnesi sağlar. Bu olay veri nesnesi Unity'nin kendi AbstractEventDataöğesinden genişletir.

Bir giriş olayının ana hatlarıyla açıklandığı gibi yürütmesi boyunca yayılmasını durdurmak için, bir bileşen olayı kullanıldı olarak işaretlemek için çağrısı AbstractEventData.Use() yapabilir. Bu, genel giriş işleyicileri dışında diğer Tüm GameObject'lerin geçerli giriş olayını almasını durdurur.

Not

yöntemini çağıran Use() bir bileşen, diğer GameObject'lerin bunu almasını durdurur. Ancak, geçerli GameObject üzerindeki diğer bileşenler giriş olayını almaya devam eder ve ilgili arabirim işlevlerini tetikler.

Ayrıca bkz.