Etkileşimli Öğe [Deneysel]

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

Interactive Element, Unity 2019.3'te ve Unity 2019.3'te yeni bir özellik kullanılırken desteklenen deneysel bir özelliktir: Başvuru serileştirme.

Etkileşimli Öğe Denetçisi

Etkileşimli Öğe denetçisi, oynatma modu sırasında geçerli durumun etkin olup olmadığını belirten görsel geri bildirim sağlar. Bir durum etkinse, siyan rengiyle vurgulanır. Durum etkin değilse renk değişmez. Denetçide durumların yanındaki sayılar durum değerleridir; durum etkinse değer 1, durum etkin değil ise değer 0'dır.

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

Temel Eyaletler

Etkileşimli Öğe temel durumları içerir ve özel durumların eklerini destekler. Çekirdek durum, içinde tanımlanan durum ayarı mantığına sahip olan bir BaseInteractiveElement durumdur. Aşağıda, geçerli giriş odaklı çekirdek durumlarının listesi ve ardından yer almaktadır:

Geçerli Çekirdek Eyaletler

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

Yakın Etkileşim Çekirdek Durumları:

Uzak Etkileşim Temel Durumları:

Diğer Temel Eyaletler:

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

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

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

  2. Eklemek istediğiniz çekirdek durumu seçmek için Durumu Seç düğmesini seçin. Menüdeki eyaletler etkileşim türüne göre sıralanmış.

    Durum seçili durumdayken 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ı açın.

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

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

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

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

interactiveElement.AddNewState("SelectFar");

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

İç Yapı Durumları

Interactive Öğesi'nin durumları InteractionState türündedir. , InteractionState aşağıdaki özellikleri içerir:

  • Ad: Eyaletin adı.
  • Değer: Durum değeri. Durum açıksa, durum değeri 1'tir. Durum kapalı ise durum değeri 0'dır.
  • Etkin: Durumunun etkin olup olmadığı. Durum etkin olduğunda Etkin özelliğinin değeri true, durum kapalıysa false olur.
  • Etkileşim Türü: Bir durumun Etkileşim Türü, bir durumun amaçlanan etkileşim t t dır.
    • None: Herhangi bir giriş etkileşimini desteklemez.
    • Near: Yakın etkileşim desteği. Giriş, ifade edilen bir el başka bir oyun nesnesiyle doğrudan temas halinde olduğunda(yani ifade edilen el, dünya alanı içinde oyun nesnesinin konumuna yakın olduğunda) neredeyse etkileşim olarak kabul edilir.
    • Far: Uzak etkileşim desteği. Giriş, oyun nesnesiyle doğrudan iletişim gerekli değilken uzak etkileşim olarak kabul edilir. Örneğin, denetleyici ray veya bakış aracılığıyla yapılan 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ı: Bir durum için olay yapılandırması, serileştirilmiş olaylar profili giriş noktasıdır.

Bu özelliklerin hepsi Etkileşimli Öğe'de bulunan State Manager içinde dahili olarak ayarlanır. Durumları değiştirme 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 durum için olay yapılandırmasını almak, durumun kendisine özgü bir durumdur. Her çekirdek durumunun, her çekirdek durumunu açıklayan bölümler altında özetlenen belirli bir olay yapılandırma türü vardır.

Bir eyaletin olay yapılandırmasını almaya genelleştirilmiş bir örnek şu şekildedir:

// 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 mevcuttur. Bu durum yalnızca diğer tüm eyaletler etkin değilken etkin olur. Başka bir durum etkin hale gelirse, Varsayılan durum dahili olarak kapalı olarak ayarlanır.

Bir Etkileşimli Öğe, durum listesinde varsayılan ve Odak durumları ile başlatılır. Varsayılan durum 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 gelindiğinde karma gerçeklik olarak düşünebilirsiniz, yakın ve uzak bir etkileşim durumu. Odak durumu için yakın ve uzak etkileşim arasındaki ayırt edici faktör, geçerli etkin işaretçi t terektir. Odak durumu için işaretçi türü, İşaretçi İşaretçisi ise etkileşim yakın etkileşim olarak kabul edilir. Birincil işaretçi, Temel İşaretçisi yoksa etkileşim uzak etkileşim olarak kabul edilir. Odak durumu varsayılan olarak Etkileşimli Öğe'de mevcuttur.

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

Focus State Inspector  Inpsector'da odak durumu

<a name="getting-focus-state-events">Odak Durumu Olaylarını Alma

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

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

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

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

Yakın Odak ve Odak Uzak Davranışı

Sanal el etkileşimiyle yakın ve uzak odak

Yakın Durumda Odaklan

Odak Yakını durumu, bir odak olayı ortaya çıkarken, birincil işaretçi ise Neredeyse etkileşimin göstergesi olan Temel İşaretçi olduğunda ayarlanır.

Yakın Durum Davranışına Odaklan  Sanal el etkileşimi ile yakın durumlara odaklanma

Yakın Durum Denetçisi'ne Odaklan  Denetçide bileşene yakın odaklanma

<a name="getting-focusnear-state-events">FocusNear Durum Olaylarını Alma

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

FocusEvents focusNearEvents = interactiveElement.GetStateEvents<FocusEvents>(&quot;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

Odak Uzak durumu, birincil işaretçiYir işaretçisi değilken ayarlanır. Örneğin, varsayılan denetleyici ray 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şimiyle uzak odak durumu

Focus Far State Inspector  Denetçide odak noktası bileşeni

<a name="getting-focus-far-state-events">Odak Uzak Durum Olaylarını Alma

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

FocusEvents focusFarEvents = interactiveElement.GetStateEvents<FocusEvents>(&quot;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, bir ifade nesneyi doğrudan nesneye dokunduğunda ayarlanan yakın etkileşim durumudur. Doğrudan dokunma, bir yandan gelen dizin Finger nesnesinin dünya konumuna çok yakın olduğu anlamına gelir. Varsayılan olarak, NearInteractionTouchableVolume durum listesine dokunma durumu eklenirse, nesneye bir bileşen iliştirilir. NearInteractionTouchableVolume NearInteractionTouchable Dokunma olaylarını algılamak için bir veya bileşeninin varlığı gereklidir. Ve arasındaki fark NearInteractionTouchableVolume , NearInteractionTouchable NearInteractionTouchableVolume nesnenin Collider dayalı bir dokunma algıladığında ve NearInteractionTouchable düzlemin tanımlı alanı içinde Touch 'ı algılar.

Dokunma durumu davranışı  Sanal el etkileşimi ile dokunma durumu

Dokunma durumu denetçisi  Denetçide dokunma durumu bileşeni

<a name="getting-touch-state-events">Dokunma durumu olaylarını alma

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

TouchEvents touchEvents = interactiveElement.GetStateEvents<TouchEvents>(&quot;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 durum seçin

En uzak durum seç, ortaya çıkacak bir durumdur IMixedRealityPointerHandler . Bu durum, en çok etkileşim tıklamalarını (AIR-TAP) algılayan ve varsayılan denetleyici Ray işaretçisi veya GGV işaretçisi gibi en fazla etkileşim işaretçisi kullanımı üzerinden tutmakta olan bir etkileşim durumudur. En uzak durum, adlı olay yapılandırması kapsamındaki bir seçeneğe sahiptir Global . GlobalDoğruysa, IMixedRealityPointerHandler genel giriş işleyicisi olarak kaydedilir. Bir işleyici genel olarak kaydedilmişse, giriş sistem olaylarının tetiklenmesi için bir nesneye odaklanmak gerekli değildir. Örneğin, bir Kullanıcı herhangi bir zamanda, odak içindeki nesneden bağımsız olarak, her zaman bir hava dokur/seçim hareketi hakkında bilgi almak isterse, Global true olarak ayarlayın.

En uzak durum davranışını seçin  Sanal el etkileşimi ile en uzak seçin

En uzak durum denetçisi  ' ni seçin Denetçide uzak bileşen ' i seçin

<a name="getting-select-far-state-events">Seçme ve durum olaylarını alma

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

SelectFarEvents selectFarEvents = interactiveElement.GetStateEvents<SelectFarEvents>(&quot;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 bir çok etkileşim (uzak durum Seç) tarafından tetiklenir. Bu durum dahili olarak açık, OnClicked olayını çağırır ve hemen Kapalı durumuna geçti.

Not

Durum etkinliğine dayalı Inspector 'daki görsel geri bildirimler, oturum açık ve hemen kapalı olduğundan tıklatılan durum için mevcut değil.

Tıklanan durum davranışı  Sanal el etkileşimleri ile tıklandı durumu

Tıklanan durum denetçisi  Inspector 'da durum bileşeni ' ne tıklayın

Yakın ve en tıklanan durum örneği
Tıklanan durum, yöntemi kullanılarak ek giriş noktaları aracılığıyla tetiklenebilir interactiveElement.TriggerClickedState() . Örneğin, bir Kullanıcı yakın etkileşim dokunarak bir nesneye bir tıklama tetiklemeyi istiyorsa, TriggerClickedState() yöntemi dokunma durumuna dinleyici olarak ekler.

Sanal el etkileşimlerine sahip yakın ve uzak durum

<a name="getting-clicked-state-events">Tıklanan durum olaylarını alma

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

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

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

Aç ve Kapat durumuna geç

Açma ve kapatma durumları bir çifdir ve iki durumlu davranış için her ikisi de bulunmalıdır. Varsayılan olarak, Iki durumlu açma ve kapatma durumları, bir uzak tıklama (uzak durum Seç) aracılığıyla tetiklenir. Varsayılan olarak, geçiş kapalı durumu başlangıç durumunda etkindir, yani iki durumlu düğme kapalı olarak başlatılır. Bir kullanıcı başlangıç durumunda etkin durumuna geç ' i istiyorsa, geçiş durumu ' nu IsSelectedOnStart doğru olarak ayarlayın.

Toggleon ve kapalı durum davranışı  Sanal el etkileşimleri ile aç ve Kapat

Toggleon ve kapalı durum denetçisi  Denetçide bileşeni değiştirme

Yakın ve çok durumlu durumlar örneği
Tıklanmış duruma benzer şekilde, durumlu durum ayarı yöntemi kullanılarak birden çok giriş noktasına sahip olabilir interactiveElement.SetToggleStates() . Örneğin, bir Kullanıcı, geçiş durumlarını ayarlamak için ek bir giriş noktası olarak dokunma istiyorsa, SetToggleStates() yöntemi dokunma durumundaki olaylardan birine ekler.

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

<a name="getting-toggle-on-and-toggle-off-state-events">Geçiş ve kapalı durum olaylarını alma

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>(&quot;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ük durumu

Konuşma anahtar sözcük durumu, karma gerçeklik konuşma profilinde tanımlanan anahtar sözcükleri dinler. Çalışma zamanı öncesinde konuşma komutu profilinde yeni anahtar kelimesinin kaydedilmesi gerekır (aşağıdaki adımlar).

Konuşma anahtar sözcük durumu davranışı  Sanal etkileşime sahip konuşma anahtar sözcüğü

Konuşma anahtar sözcük durumu denetçisi  Inspector 'da konuşma anahtar sözcük bileşeni

Not

Konuşma anahtar sözcük durumu, yukarıdaki GIF 'teki F5 tuşuna basılarak düzenleyicide tetiklenir. Konuşma için düzenleyici testinde ayarlama aşağıdaki adımları izleyerek açıklanmıştır.

Konuşma komutu/anahtar sözcük kaydetme

  1. Mixedrealitytoolkit oyun nesnesini seçin

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

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

  4. Giriş profilindeki konuşma bölümüne gidin ve konuşma profilini kopyalayın

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

  5. Yeni konuşma Ekle komutunu 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 için izin vermek üzere KeyCode 'u 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ük durumu Denetçisi ' ne dönü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 profilinde az önce kaydedilen yeni anahtar sözcüğü girin

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

Konuşma anahtar sözcük durumunu düzenleyicide test etmek için, konuşma anahtar sözcüğü tanınan olayının benzetimini yapmak üzere 6. adımda (F5) tanımlanan KeyCode ' a basın.

Konuşma anahtar sözcük durumu 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

Inspector aracılığıyla özel durum oluşturma

Inspector aracılığıyla oluşturulan özel durum, varsayılan durum olayı yapılandırması ile 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 için Inspector 'da özel durum oluşturma sayfasına gidin.

    Özel durum oluşturma

  2. Yeni durumun adını girin. Bu ad benzersiz olmalıdır ve mevcut çekirdek durumlarıyla 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 Ekle

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

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

<a name="how-to-create-a-custom-state-via-script">Komut dosyası aracılığıyla özel durum oluşturma

interactiveElement.AddNewState(&quot;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 bir olay yapılandırmasıyla özel durum oluşturma

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

Aşağıdaki adımlarda, özel durum olayı yapılandırması ve alıcı dosyaları oluşturma hakkında varolan bir örnek gösterilmektedir.

  1. Bir durum adı düşünün. Bu ad benzersiz olmalıdır ve mevcut çekirdek durumlarıyla aynı olamaz. Bu örneğin amaçları doğrultusunda, durum adı klavye olacak.

  2. Durum adı + "alıcı" ve durum adı + "olaylar" 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ı ' nı izlemelidir.

    Klavye durumu betikleri

  3. Dosya içeriğiyle ilgili daha fazla ayrıntı için bkz. KeyboardEvents. cs ve Keyboardahize. cs dosyaları. Yeni olay yapılandırma sınıflarının öğesinden devralması BaseInteractionEventConfiguration ve yeni olay alıcı sınıflarının devralması gerekir BaseEventReceiver . Klavye durumunun durum ayarı örnekleri CustomStateSettingExample.cs dosyasında bulunur.

  4. Durum adını kullanarak durumu etkileşimli öğeye ekleyin, olay yapılandırması ve olay alıcı dosyaları mevcutsa durum adı tanınır. Özel olay yapılandırma dosyasındaki Özellikler denetçisinde görüntülenmelidir.

    Etkileşimli öğede bilinen etkileşimli öğe  özel durumuna özel durum ekleme

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

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

Örnek sahne

Etkileşimli öğe + durum Görselleştiricisinin örnek sahneyi şurada bulabilirsiniz: MRTK\SDK\Experimental\InteractiveElement\Examples\InteractiveElementExampleScene.unity

Etkileşimli öğe ve durum Görselleştirici ile örnek sahne

Sıkıştırılabilir düğmesi

Örnek sahne, ve adlı Prefabs CompressableButton CompressableButtonToggle ' i içerir, bu Prefabs, PressableButtonHoloLens2 etkileşimli öğe ve durum görselleştiricisi kullanılarak oluşturulan düğmelerin davranışını yansıtır. CompressableButtonBileşen şu anda PressableButton + PressableButtonHoloLens2 BaseInteractiveElement temel sınıf olarak ile bir birleşimidir.

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 animasyon ekler. Bu bileşen, animasyon varlıkları oluşturur, bunları MixedRealityToolkit. generated klasörüne koyar ve hedef oyun nesnesine Animatable özellikleri ekleyerek Basitleştirilmiş animasyon ana kare ayarını sağlar. Durumlar arasında animasyon geçişlerini etkinleştirmek için bir Animator denetleyici varlığı oluşturulur ve ilişkili parametrelerle ve tüm durum geçişleri ile varsayılan bir 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ştirici içindeki Yeni animasyon klipleri oluştur düğmesine basıldığında, yeni animasyon klibi varlıkları etkileşimli öğedeki durum adlarına göre oluşturulur ve MixedRealityToolkit. generated klasörüne yerleştirilir. Her durum kapsayıcısındaki animasyon klibi özelliği ilişkili animasyon klibine ayarlanır.

Durum görselleştiricisi bileşenindeki animasyon klipleri

Animasyon klipleri arasındaki kesintisiz geçişleri yönetmek için bir Animator durum makinesi de oluşturulur. Varsayılan olarak, durum makinesi etkileşimli öğedeki herhangi bir durum arasında geçiş yapmasına izin vermek için herhangi bir durumu kullanır.

Animator 'da tetiklenen durum Görselleştiriciler her durum için de oluşturulur, tetikleyici parametreleri bir animasyon tetiklemek Için durum görselleştiricide kullanılır.

Unity durum makinesi

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

Durum görselleştiricisi, Inspector 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ştiricisini Kullanma

  1. Küp oluşturma

  2. Etkileşimli öğe Ekle

  3. Durum görselleştiricisi Ekle

  4. Yeni animasyon klipleri oluştur ' u seçin

    Yeni animasyon klipleri oluşturma

    Görselleştirici ve etkileşimli öğe bileşenlerinde oluşturulan animasyon klipleri gösteriliyor

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

    Durum görselleştiricisi hedefi ekleniyor

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

    Durum görselleştiricisi hedefi ayarlanıyor

  7. Küp Animatable özelliklerini kataşımına göre açın

  8. Animatable özelliği açılan menüsünü seçin ve renk ' i seçin

    Durum görselleştiricisi rengini ayarlama

  9. Color Animatable özelliğini Ekle seçeneğini belirleyin

    Görselleştiricisi Color Animatable özelliğini seçme

  10. Renk seçin

    Renk tekerleğindeki Görselleştirici rengi seçme

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

    Sanal el etkileşimi ile geçiş rengi değişiklik örneği

Animatable özellikleri

Animatable özelliklerinin birincil amacı, animasyon klibi ana kare ayarını basitleştirmektir. bir kullanıcı Unity animasyon sistemini biliyor ve oluşturulan animasyon kliplerinde doğrudan ana kareleri ayarlamayı tercih edebiliyorlarsa, bir hedef nesnesine animatable özellikleri ekleyemez ve klibi Unity 'nin animasyon penceresinde (Windows > animasyon > animasyon) açamazsınız.

Animasyon için Animatable özelliklerini kullanıyorsanız, eğri türü easeInOut olarak ayarlanır.

Geçerli Animatable özellikleri:

Ölçek boşluğu

Ölçek boşluğu Animatable özelliği nesnenin geçerli ölçeğini alır ve tanımlanan sapmayı ekler.

Sanal el etkileşimi ile ölçek ölçeği

Konum konumu

Konum kayması Animatable özelliği nesnenin geçerli konumunu alır ve tanımlanan sapmayı ekler.

Sanal el etkileşimi ile konum konumu

Renk

Color Animatable özelliği, malzemenin bir ana renk özelliği varsa, malzemenin ana rengini temsil eder. Bu özellik, material._Color özelliği hareketlendirir.

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

Gölgelendirici rengi

Gölgelendirici rengi Animatable özelliği, Color 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, ana malzeme rengi olmayan Fill_Color adlı bir gölgelendirici rengi özelliğinin canlandırdığını gösterir. Malzeme denetçisindeki değişen değerleri gözlemleyin.

Sanal el etkileşimi ile gölge rengi

Gölgelendirici float

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 'de, metalik ö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 'de döşeme (ana 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 gölgelendirici özellik adlarını bulma

  1. Pencere > animasyon > animasyonuna gidin

  2. Hiyerarşide durum Görselleştirici ile nesnenin seçildiğinden emin olun

  3. Animasyon penceresinde herhangi bir animasyon klibini seçin

  4. Özellik Ekle' yi seçin, kafes oluşturucuyu açık olarak açın

    Animator penceresinde animasyon özelliği ekleme

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

    Animator penceresindeki kafes Oluşturucu animasyon özellikleri

Ayrıca bkz.