Aracılığıyla paylaş


Interactive Element [Experimental] — MRTK2

MRTK giriş sistemine basitleştirilmiş bir merkezi giriş noktası. Durum yönetimi yöntemlerini, olay yönetimini ve Çekirdek Etkileşim Durumları için durum ayarı mantığını içerir.

Interactive Element, Unity 2019.3'te desteklenen deneysel bir özelliktir ve Unity 2019.3: Serileştirme Başvurusu'nda yeni bir özellik kullanır.

Etkileşimli Öğe Denetçisi

Yürütme modu sırasında Etkileşimli Öğe denetçisi, geçerli durumun etkin olup olmadığını gösteren görsel geri bildirim sağlar. Bir durum etkinse, mavi renkle vurgulanır. Durum etkin değilse, renk değiştirilmez. Denetçideki durumların yanındaki sayılar durum değerleridir; durum etkinse değer 1'dir, durum etkin değilse değer 0'dır.

Sanal el etkileşimi ile Etkileşimli Öğe

Çekirdek Durumlar

Etkileşimli Öğe temel durumları içerir ve özel durumların eklenmesini destekler. Çekirdek durum, içinde zaten durum ayarı mantığı tanımlanmış BaseInteractiveElementolan durumdur. Giriş temelli çekirdek durumlarının listesi aşağıdadır:

Geçerli Çekirdek Durumlar

Yakın ve Uzak Etkileşim Çekirdek Durumları:

Yakın Etkileşim Çekirdek Durumları:

Uzak Etkileşim Çekirdek Durumları:

Diğer Çekirdek Durumlar:

Denetçi aracılığıyla Çekirdek Durum Ekleme

  1. Etkileşimli Öğe denetçisinde Çekirdek Durum Ekle'ye gidin.

    Denetçi aracılığıyla Çekirdek Durum ekleme

  2. Eklenecek temel durumu seçmek için Durum Seç düğmesini seçin. Menüdeki durumlar etkileşim türüne göre sıralanır.

    Durum seçiliyken Denetçi aracılığıyla Çekirdek Durum ekleme

  3. Durumla ilişkili olayları ve özellikleri görüntülemek için Olay Yapılandırması katlama'sını açın.

    Olay yapılandırmasıyla Denetçi aracılığıyla Çekirdek Durum ekleme

Betik Aracılığıyla Çekirdek Durum Ekleme

AddNewState(stateName) Çekirdek durumu eklemek için yöntemini kullanın. Kullanılabilir çekirdek durum adlarının listesi için sabit listesini kullanın CoreInteractionState .

// Add by name or add by CoreInteractionState enum to string

interactiveElement.AddNewState("SelectFar");

interactiveElement.AddNewState(CoreInteractionState.SelectFar.ToString());

Durumlar İç Yapısı

Interactive Element'teki durumlar türündedir InteractionState. aşağıdaki InteractionState özellikleri içerir:

  • Ad: Durumun adı.
  • Değer: Durum değeri. Durum açıksa, durum değeri 1 olur. Durum kapalıysa, durum değeri 0 olur.
  • Etkin: Durumun şu anda etkin olup olmadığı. Durum açıkken Active özelliğinin değeri true, durum kapalıysa false değeridir.
  • Etkileşim Türü: Bir durumun Etkileşim Türü, bir durumun amaçlandığı etkileşim türüdür.
    • None: Herhangi bir giriş etkileşimi biçimini desteklemez.
    • Near: Etkileşim desteğine yakın. Bir el başka bir oyun nesnesiyle doğrudan temas ettiğinde, yani ifade edilen elin dünya uzayında oyun nesnesinin konumuna yakın olduğu durumlarda giriş etkileşime yakın olarak kabul edilir.
    • Far: Uzak etkileşim desteği. Giriş, oyun nesnesiyle doğrudan temas gerekli olmadığında uzak etkileşim olarak kabul edilir. Örneğin, denetleyici rayı veya bakış yoluyla giriş, uzak etkileşim girişi olarak kabul edilir.
    • NearAndFar: Hem yakın hem de uzak etkileşim desteğini kapsar.
    • Other: İşaretçiden bağımsız etkileşim desteği.
  • Olay Yapılandırması: Durum için olay yapılandırması, serileştirilmiş olaylar profili giriş noktasıdır.

Bu özelliklerin tümü, Etkileşimli Öğe'de State Manager bulunan içinde dahili olarak ayarlanır. Durumların değiştirilmesi için aşağıdaki yardımcı yöntemleri kullanın:

Durum Ayarı Yardımcı Yöntemleri

// Get the InteractionState
interactiveElement.GetState("StateName");

// Set a state value to 1/on
interactiveElement.SetStateOn("StateName");

// Set a state value to 0/off
interactiveElement.SetStateOff("StateName");

// Check if a state is present in the state list
interactiveElement.IsStatePresent("StateName");

// Check whether or not a state is active
interactiveElement.IsStateActive("StateName");

// Add a new state to the state list
interactiveElement.AddNewState("StateName");

// Remove a state from the state list
interactiveElement.RemoveState("StateName");

Bir durumun olay yapılandırmasını almak duruma özgüdür. Her çekirdek durumu, her çekirdek durumu açıklayan bölümlerin altında özetlenen belirli bir olay yapılandırma türüne sahiptir.

Bir durumun olay yapılandırmasını almanın genelleştirilmiş bir örneği aşağıda verilmiştir:

// T varies depending on the core state - the specific T's are specified under each of the core state sections
T stateNameEvents = interactiveElement.GetStateEvents<T>("StateName");

Varsayılan Durum

Varsayılan durum her zaman Etkileşimli Öğede bulunur. Bu durum yalnızca diğer tüm durumlar etkin olmadığında etkin olur. Başka bir durum etkin hale gelirse, Varsayılan durum dahili olarak kapalı olarak ayarlanır.

Durum listesinde Varsayılan ve Odak durumları mevcut olan Etkileşimli Öğe başlatılır. Varsayılan durumun her zaman durum listesinde mevcut olması gerekir.

Varsayılan Durum Olaylarını Alma

Varsayılan Durum için olay yapılandırma türü: StateEvents

StateEvents defaultEvents = interactiveElement.GetStateEvents<StateEvents>("Default");

defaultEvents.OnStateOn.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Default State On");
});

defaultEvents.OnStateOff.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Default State Off");
});

Odak Durumu

Odak durumu, üzerine gelinmeye eşdeğer karma gerçeklik olarak düşünülebilecek yakın ve uzak bir etkileşim durumudur. Odak durumu için yakın ve uzak etkileşim arasındaki ayırt edici faktör geçerli etkin işaretçi türüdür. Odak durumunun işaretçi türü Dürtme İşaretçisi ise etkileşime yakın kabul edilir. Birincil işaretçi Dürtme İşaretçisi değilse, etkileşim uzak etkileşim olarak kabul edilir. Odak durumu varsayılan olarak Etkileşimli Öğe'de bulunur.

Odak Durumu DavranışıSanal el etkileşimi ile odak durumu

Inpsector'da Odak Durumu Denetçisi Odak durumu

Odak Durumu Olaylarını Alma

Odak Durumu için olay yapılandırma türü: FocusEvents

FocusEvents focusEvents = interactiveElement.GetStateEvents<FocusEvents>("Focus");

focusEvents.OnFocusOn.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Focus On");
});

focusEvents.OnFocusOff.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Focus Off");
});

Odak Yakın ve Odak Uzak Davranışı

Sanal el etkileşimi ile yakın ve uzaklara odaklanın

Duruma Yakın Odak

Odak Yakın durumu, bir odak olayı tetiklendiğinde ayarlanır ve birincil işaretçi, yakın etkileşimin göstergesi olan Poke işaretçisidir.

Duruma Yakın Odak DavranışıSanal el etkileşimi ile duruma yakın odak

Durum Denetçisine YakınOdak Denetçideki bileşenin yakınında

FocusNear Durum Olaylarını Alma

FocusNear Durumu için olay yapılandırma türü: FocusEvents

FocusEvents focusNearEvents = interactiveElement.GetStateEvents<FocusEvents>("FocusNear");

focusNearEvents.OnFocusOn.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Near Interaction Focus On");
});

focusNearEvents.OnFocusOff.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Near Interaction Focus Off");
});

Odak Uzak Durumu

Birincil işaretçi Dürt işaretçisi olmadığında Odak Uzak durumu ayarlanır. Örneğin, varsayılan denetleyici ışın işaretçisi ve GGV (Bakış, Hareket, Ses) işaretçisi uzak etkileşim işaretçileri olarak kabul edilir.

Odak Uzak Durum DavranışıSanal el etkileşimi ile uzak odak durumu

Focus Far State InspectorFocus far component in the Inspector

Uzak Durum Olaylarına Odaklanma

FocusFar Durumu için olay yapılandırma türü: FocusEvents

FocusEvents focusFarEvents = interactiveElement.GetStateEvents<FocusEvents>("FocusFar");

focusFarEvents.OnFocusOn.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Focus On");
});

focusFarEvents.OnFocusOff.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Focus Off");
});

Dokunma Durumu

Dokunma durumu, ifade edilmiş bir el nesneye doğrudan dokunduğunda ayarlanan yakın bir etkileşim durumudur. Doğrudan dokunma, ifade edilen elin işaret parmağının nesnenin dünya konumuna çok yakın olduğu anlamına gelir. Varsayılan olarak, Dokunma durumu durum listesine eklenirse nesneye bir NearInteractionTouchableVolume bileşen eklenir. Bir veya NearInteractionTouchable bileşeninin NearInteractionTouchableVolume varlığı, Dokunma olaylarını algılamak için gereklidir. ile NearInteractionTouchable arasındaki NearInteractionTouchableVolume fark, NearInteractionTouchableVolume nesnenin çarpıştırıcısını temel alan bir dokunmayı algılaması ve NearInteractionTouchablebir düzlemin tanımlı bir alanı içindeki dokunmayı algılamasıdır.

Dokunma Durumu DavranışıSanal el etkileşimi ile dokunma durumu

Dokunmatik Durum DenetçisiDenetçideki Dokunma durumu bileşeni

Dokunma Durumu Olaylarını Alma

Dokunma Durumu için olay yapılandırma türü: TouchEvents

TouchEvents touchEvents = interactiveElement.GetStateEvents<TouchEvents>("Touch");

touchEvents.OnTouchStarted.AddListener((touchData) =>
{
    Debug.Log($"{gameObject.name} Touch Started");
});

touchEvents.OnTouchCompleted.AddListener((touchData) =>
{
    Debug.Log($"{gameObject.name} Touch Completed");
});

touchEvents.OnTouchUpdated.AddListener((touchData) =>
{
    Debug.Log($"{gameObject.name} Touch Updated");
});

Uzak Eyalet'i seçin

Uzak Seç durumu IMixedRealityPointerHandler görüntülenir. Bu durum, uzak etkileşim tıklamasını (havadan dokunma) algılayan ve varsayılan denetleyici ışın işaretçisi veya GGV işaretçisi gibi uzak etkileşim işaretçilerinin kullanımı boyunca tutan uzak etkileşim durumudur. Uzak Seç durumunda, olay yapılandırmasının katlandığında adlı Globalbir seçeneği vardır. true Global ise, IMixedRealityPointerHandler genel giriş işleyicisi olarak kaydedilir. İşleyici genel olarak kaydedildiyse giriş sistemi olaylarını tetikleme amacıyla bir nesneye odaklanmak gerekmez. Örneğin, bir kullanıcı odaktaki nesneden bağımsız olarak hava dokunma/seçme hareketinin ne zaman gerçekleştirildiğini öğrenmek isterse true olarak ayarlayın Global .

Uzak Durum DavranışıSanal el etkileşimi ile uzakları seçin seçeneğini belirleyin

Uzak DurumDenetçisi'ni seçin Denetçide uzak bileşeni seçin

Uzak Durum Olaylarını Seçme

SelectFar Durumu için olay yapılandırma türü: SelectFarEvents

SelectFarEvents selectFarEvents = interactiveElement.GetStateEvents<SelectFarEvents>("SelectFar");

selectFarEvents.OnSelectUp.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Pointer Up");
});

selectFarEvents.OnSelectDown.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Pointer Down");
});

selectFarEvents.OnSelectHold.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Pointer Hold");
});

selectFarEvents.OnSelectClicked.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Pointer Clicked");
});

Tıklanan Durum

Tıklanan durum, varsayılan olarak uzak etkileşim tıklaması (Uzak durumu seç) tarafından tetikler. Bu durum dahili olarak açık durumuna geçirilir, OnClicked olayını çağırır ve ardından hemen kapatılır.

Not

Durum etkinliğini temel alan denetçideki görsel geri bildirim Tıklanan durum için mevcut değildir çünkü hemen açılıp kapatılır.

Tıklanan Durum DavranışıSanal el etkileşimleriyle tıklanan durum

Tıklanan Durum DenetçisiDenetçide durum bileşenine tıklayın

Yakın ve Çok Tıklanan Durum Örneği
Tıklanan durum, yöntemi kullanılarak interactiveElement.TriggerClickedState() ek giriş noktaları aracılığıyla tetiklenebilir. Örneğin, bir kullanıcı bir nesneye tıklamayı tetikleyecek yakın bir etkileşim dokunuşu istiyorsa, dokunma durumunda dinleyici olarak yöntemini ekler TriggerClickedState() .

Sanal el etkileşimleriyle yakın ve uzak durum

Tıklanan Durum Olaylarını Alma

Tıklanan Durum için olay yapılandırma türü: ClickedEvents

ClickedEvents clickedEvent = interactiveElement.GetStateEvents<ClickedEvents>("Clicked");

clickedEvent.OnClicked.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Clicked");
});

Durumu Aç/Kapat ve Aç/Kapat

Açma/Kapatma ve Açma/Kapatma durumları bir çift olup iki durumlu düğme davranışı için her ikisinin de mevcut olması gerekir. Varsayılan olarak, Uzak etkileşim tıklaması (Uzak durumu seç) aracılığıyla Açık Aç/Kapat durumları tetiklenir. Varsayılan olarak, Açma/Kapama durumu başlangıçta etkindir ve bu da iki durumlu düğmenin kapalı olarak başlatılacağı anlamına gelir. Kullanıcı, Açık Geçiş durumunun başlangıçta etkin olmasını istiyorsa, Açık Durumda durumunda true olarak ayarlayın IsSelectedOnStart .

ToggleOn ve Toggle Off State BehaviorSanal el etkileşimleriyle açma ve kapatma

Denetçide ToggleOn ve Toggle Off State InspectorGeçiş bileşeni

Yakın ve Uzak Geçiş Durumları Örneği
Tıklanan duruma benzer şekilde, iki durumlu durum ayarının yöntemi kullanılarak interactiveElement.SetToggleStates() birden çok giriş noktası olabilir. Örneğin, bir kullanıcı geçiş durumlarını ayarlamak için ek bir giriş noktası olarak dokunmak isterse, dokunma durumundaki olaylardan birine yöntemini ekler SetToggleStates() .

Sanal el etkileşimleriyle yakın ve uzak geçiş

Durum Olaylarını Açma ve Kapatma

ToggleOn Durumu için olay yapılandırma türü: ToggleOnEvents
ToggleOff Durumu için olay yapılandırma türü: ToggleOffEvents

// Toggle On Events
ToggleOnEvents toggleOnEvent = interactiveElement.GetStateEvents<ToggleOnEvents>("ToggleOn");

toggleOnEvent.OnToggleOn.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Toggled On");
});

// Toggle Off Events
ToggleOffEvents toggleOffEvent = interactiveElement.GetStateEvents<ToggleOffEvents>("ToggleOff");

toggleOffEvent.OnToggleOff.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Toggled Off");
});

Konuşma Anahtar Sözcüğü Durumu

Konuşma Anahtar Sözcüğü durumu, Karma Gerçeklik Konuşma Profilinde tanımlanan anahtar sözcükleri dinler. Yeni anahtar sözcüklerin çalışma zamanından önce konuşma komut profiline kaydedilmesi GEREKİR (aşağıdaki adımlar).

Konuşma Anahtar Sözcüğü Durum DavranışıSanal etkileşimle konuşma anahtar sözcüğü

Konuşma Anahtar Sözcüğü Durum DenetçisiDenetçide konuşma anahtar sözcüğü bileşeni

Not

Konuşma Anahtar Sözcüğü durumu düzenleyicide yukarıdaki gif'teki F5 tuşuna basılarak tetiklendi. Konuşma için düzenleyici testinde ayarlama aşağıdaki adımlar özetlenmiştir.

Konuşma Komutu/Anahtar Sözcüğü Kaydetme

  1. MixedRealityToolkit oyun nesnesini seçin

  2. Kopyala ve Geçerli profili özelleştir'i seçin

  3. Giriş bölümüne gidin ve Giriş profilinin değiştirilmesini etkinleştirmek için Kopyala'yı seçin

  4. Giriş profilinde aşağı kaydırarak Konuşma bölümüne gelin ve Konuşma Profilini kopyalayın

    MRTK oyun nesnesinde konuşma anahtar sözcüğü profili

  5. Yeni Konuşma Komutu Ekle'yi seçin

    MRTK profiline yeni bir konuşma anahtar sözcüğü ekleme

  6. Yeni anahtar sözcüğü girin. İsteğe bağlı: Düzenleyicide test edilmesine izin vermek için KeyCode'ı F5 (veya başka bir KeyCode) olarak değiştirin.

    MRTK profilinde konuşma anahtar sözcüğünü yapılandırma

  7. Etkileşimli Öğe Konuşma Anahtar Sözcüğü durum denetçisine Geri dön ve Anahtar Sözcük Ekle'yi seçin

    Etkileşimli öğe bileşenine anahtar sözcük ekleme

    Anahtar sözcük doğrulama ve kayıt

  8. Konuşma Profiline yeni kaydedilen yeni anahtar sözcüğü girin

    Yeni konuşma anahtar sözcüğü girme

Düzenleyicide Konuşma Anahtar Sözcüğü durumunu test etmek için 6. adımda (F5) tanımlanan KeyCode tuşuna basarak konuşma anahtar sözcüğü tanınan olayının benzetimini yapın.

Konuşma Anahtar Sözcüğü Durum Olaylarını Alma

SpeechKeyword Durumu için olay yapılandırma türü: SpeechKeywordEvents

SpeechKeywordEvents speechKeywordEvents = interactiveElement.GetStateEvents<SpeechKeywordEvents>("SpeechKeyword");

speechKeywordEvents.OnAnySpeechKeywordRecognized.AddListener((speechEventData) =>
{
    Debug.Log($"{speechEventData.Command.Keyword} recognized");
});

// Get the "Change" Keyword event specifically
KeywordEvent keywordEvent = speechKeywordEvents.Keywords.Find((keyword) => keyword.Keyword == "Change");

keywordEvent.OnKeywordRecognized.AddListener(() =>
{ 
    Debug.Log("Change Keyword Recognized"); 
});

Özel Durumlar

Denetçi aracılığıyla Özel Durum Oluşturma

Denetçi aracılığıyla oluşturulan özel durum, varsayılan durum olay yapılandırmasıyla başlatılır. Özel durum için varsayılan olay yapılandırması türündedir StateEvents ve OnStateOn ve OnStateOff olaylarını içerir.

  1. Etkileşimli Öğe denetçisinde Özel Durum Oluştur'a gidin.

    Özel durum oluşturma

  2. Yeni durumun adını girin. Bu ad benzersiz olmalıdır ve mevcut çekirdek durumla aynı olamaz.

    Yeni bir özel durumun adını girme

  3. Durum listesine eklemek için Durum Adını Ayarla'yı seçin.

    Durum listesine özel durum ekleme

    Bu özel durum, ve OnStateOff olaylarını içeren OnStateOn varsayılan StateEvents olay yapılandırmasıyla başlatılır. Yeni bir durum için özel olay yapılandırması oluşturmak için bkz. Özel Olay Yapılandırması ile Özel Durum Oluşturma.

    Etkileşimli öğe bileşeninde gösterilen yeni durum

Betik Aracılığıyla Özel Durum Oluşturma

interactiveElement.AddNewState("MyNewState");

// A new state by default is initialized with a the default StateEvents configuration which contains the 
// OnStateOn and OnStateOff events

StateEvents myNewStateEvents = interactiveElement.GetStateEvents<StateEvents>("MyNewState");

myNewStateEvents.OnStateOn.AddListener(() =>
{
    Debug.Log($"MyNewState is On");
});

Özel Olay Yapılandırması ile Özel Durum Oluşturma

Klavye adlı özel durum için örnek dosyalar burada bulunur: MRTK\SDK\Experimental\InteractiveElement\Examples\Scripts\CustomStateExample

Aşağıdaki adımlar, özel durum olay yapılandırması ve alıcı dosyaları oluşturmanın mevcut örneğini gösterir.

  1. Bir eyalet adı düşünün. Bu ad benzersiz olmalıdır ve mevcut çekirdek durumla aynı olamaz. Bu örneğin amaçları doğrultusunda, durum adı Klavye olacaktır.

  2. State name + "Receiver" ve state name + "Events" adlı iki .cs dosyası oluşturun. Bu dosyaların adlandırılması dahili olarak dikkate alınır ve durum adı + Olay/Alıcı kuralına uygun olmalıdır.

    Klavye durumu betikleri

  3. Dosya içeriği hakkında daha fazla ayrıntı için KeyboardEvents.cs ve KeyboardReceiver.cs dosyalarına bakın. Yeni olay yapılandırma sınıflarının'dan BaseInteractionEventConfiguration devralması ve yeni olay alıcı sınıflarının 'dan BaseEventReceiverdevralması gerekir. Klavye durumunun durum ayarına ilişkin örnekler dosyada CustomStateSettingExample.cs bulunur.

  4. Durum adını kullanarak Durumu Etkileşimli Öğeye ekleyin, olay yapılandırması ve olay alıcı dosyaları varsa durum adı tanınır. Özel olay yapılandırma dosyasındaki özellikler denetçide görünmelidir.

    Etkileşimli öğeye özel durum ekleme Etkileşimli öğede tanınan özel durum

  5. Olay yapılandırması ve olay alıcı dosyaları hakkında daha fazla örnek için şu yollarda bulunan dosyalara bakın:

  • MRTK\SDK\Experimental\InteractiveElement\InteractiveElement\Events\EventConfigurations
  • MRTK\SDK\Experimental\InteractiveElement\InteractiveElement\Events\EventReceivers

Örnek Sahne

Etkileşimli Öğe + Durum Görselleştiricisi için örnek sahne burada bulunur: MRTK\SDK\Experimental\InteractiveElement\Examples\InteractiveElementExampleScene.unity

Etkileşimli Öğe ve Durum Görselleştiricisi ile örnek sahne

Sıkıştırılabilir Düğme

Örnek sahne, ve CompressableButtonToggleadlı CompressableButton prefab'leri içerir. Bu prefabs, Etkileşimli Öğe ve Durum Görselleştiricisi kullanılarak oluşturulmuş düğmelerin davranışını PressableButtonHoloLens2 yansıtır. Bileşen CompressableButton şu anda bir temel sınıf olarak ile BaseInteractiveElementbirleşimidir + PressableButtonPressableButtonHoloLens2.

Durum Görselleştiricisi [Deneysel]

Durum Görselleştiricisi bileşeni, bağlantılı Etkileşimli Öğe bileşeninde tanımlanan durumlara göre bir nesneye animasyonlar ekler. Bu bileşen animasyon varlıkları oluşturur, bunları MixedRealityToolkit.Generated klasörüne yerleştirir ve hedef oyun nesnesine Animatable özellikleri ekleyerek basitleştirilmiş animasyon ana karesi ayarını etkinleştirir. Durumlar arasında animasyon geçişlerini etkinleştirmek için bir Animator Denetleyicisi varlığı oluşturulur ve ilişkili parametrelerle ve tüm durum geçişleriyle varsayılan durum makinesi oluşturulur. Durum makinesi Unity'nin Animator penceresinde görüntülenebilir.

Durum Görselleştiricisi ve Unity Animasyon Sistemi

Durum Görselleştiricisi şu anda Unity Animasyon Sisteminden yararlanır.

Durum Görselleştiricisi'ndeki Yeni Animasyon Klipleri Oluştur düğmesine basıldığında, Etkileşimli Öğe'deki durum adları temel alınarak yeni animasyon klibi varlıkları oluşturulur ve MixedRealityToolkit.Generated klasörüne yerleştirilir. Her durum kapsayıcısında Animation Clip özelliği ilişkili animasyon klibine ayarlanır.

Durum görselleştirici bileşenindeki animasyon klipleri

Animasyon klipleri arasındaki sorunsuz geçişleri yönetmek için bir Animator Durum Makinesi de oluşturulur. Varsayılan olarak, durum makinesi Etkileşimli Öğe'deki herhangi bir durum arasında geçişlere izin vermek için Herhangi Bir Durumu kullanır.

Animator'da tetiklenen durum görselleştiricileri de her durum için oluşturulur, tetikleyici parametreleri Durum Görselleştiricisi'nde bir animasyonu tetikleme amacıyla kullanılır.

Unity durum makinesi

Çalışma Zamanı Sınırlamaları

Durum Görselleştiricisi, Denetçi aracılığıyla bir nesneye eklenmelidir ve betik aracılığıyla eklenemez. AnimatorStateMachine/AnimationController'ı değiştiren özellikler, uygulama oluşturulduğunda kaldırılan bir düzenleyici ad alanında (UnityEditor.Animations) bulunur.

Durum Görselleştiricisi'ni kullanma

  1. Küp Oluşturma

  2. Etkileşimli Öğe Ekle

  3. Durum Görselleştiricisi Ekle

  4. Yeni Animasyon Klipleri Oluştur'a tıklayın

    Yeni animasyon klipleri oluşturma

    Oluşturulan animasyon kliplerini görselleştiricide ve etkileşimli öğe bileşenlerinde gösterme

  5. Odak durumu kapsayıcısında Hedef Ekle'yi seçin

    Durum görselleştirici hedefi ekleme

  6. Geçerli oyun nesnesini hedef alana sürükleyin

    Durum görselleştiricisi hedeflerini ayarlama

  7. Küp Animatable Özellikler katlamasını açma

  8. Animatable özellik açılan menüsünü ve ardından Renk'i seçin

    Durum görselleştiricisi rengini ayarlama

  9. Renk Animatable Özelliği Ekle'yi seçin

    Görselleştirici renk animatable özelliğini seçme

  10. Renk Seçin

    Renk tekerleğinden görselleştirici rengi seçme

  11. Oynat'a basın ve geçiş rengi değişikliğini gözlemleyin

    Sanal el etkileşimi ile geçişli renk değişikliği örneği

Animatable Özellikleri

Animatable Özellikleri'nin birincil amacı, animasyon klibi ana karesi ayarını basitleştirmektir. Bir kullanıcı Unity Animasyon Sistemi'ni biliyorsa ve oluşturulan animasyon kliplerinde doğrudan ana kareler ayarlamayı tercih ederse, hedef nesneye Animatable özellikleri ekleyemez ve klibi Unity'nin Animasyon penceresinde (Windows > Animasyon > Animasyonu) açamaz.

Animasyon için Animatable özellikleri kullanılıyorsa eğri türü EaseInOut olarak ayarlanır.

Geçerli Animatable Özellikleri:

Ölçek Uzaklığı

Ölçek Uzaklığı Animatable özelliği nesnenin geçerli ölçeğini alır ve tanımlı uzaklığı ekler.

Sanal el etkileşimi ile uzaklığı ölçeklendirme

Konum Uzaklığı

Konum Uzaklığı Animatable özelliği nesnenin geçerli konumunu alır ve tanımlı uzaklığı ekler.

Sanal el etkileşimi ile konum uzaklığı

Renk

Color Animatable özelliği, malzemenin ana renk özelliği varsa malzemenin ana rengini temsil eder. Bu özellik, özelliğe animasyon ekler material._Color .

Sanal el etkileşimi ile odak rengi değişikliği

Gölgelendirici Rengi

Gölgelendirici Rengi Animatable özelliği, tür renginin gölgelendirici özelliğine başvurur. Tüm gölgelendirici özellikleri için bir özellik adı gereklidir. Aşağıdaki gif, ana malzeme rengi olmayan Fill_Color adlı bir gölgelendirici renk özelliğinin gösterilmesini gösterir. Malzeme denetçisindeki değişen değerleri gözlemleyin.

Sanal el etkileşimi ile renk gölgelendirme

Gölgelendirici Kayan

Gölgelendirici Float Animatable özelliği float türünde bir gölgelendirici özelliğine başvurur. Tüm gölgelendirici özellikleri için bir özellik adı gereklidir. Aşağıdaki gif'te Metallic özelliği için malzeme denetçisindeki değişen değerleri gözlemleyin.

Sanal el etkileşimi ile gölgelendirici float

Gölgelendirici Vektör

Gölgelendirici Vektör Animatable özelliği Vector4 türünde bir gölgelendirici özelliğine başvurur. Tüm gölgelendirici özellikleri için bir özellik adı gereklidir. Aşağıdaki gif'te Tiling (Main Tex_ST) özelliği için malzeme denetçisindeki değişen değerleri gözlemleyin.

Sanal el etkileşimi ile gölgelendirici vektör

Animatable Shader Özellik Adlarını Bulma

  1. Pencere > Animasyonu Animasyonu'na > gidin

  2. Hiyerarşide Durum Görselleştiricisi'ne sahip nesnenin seçildiğinden emin olun

  3. Animasyon penceresinde herhangi bir animasyon klibi seçme

  4. Özellik Ekle'yi seçin, Mesh oluşturucu katlamasını açın

    Animator penceresine animasyon özelliği ekleme

  5. Bu liste tüm Animatable özellik adlarını içerir

    Animator penceresinde mesh işleyicisi animasyon özellikleri

Ayrıca bkz.