Element interaktywny [eksperymentalny]

Uproszczony scentralizowany punkt wejścia do systemu wejściowego MRTK. Zawiera metody zarządzania stanem, zarządzanie zdarzeniami i logikę ustawień stanu dla podstawowych stanów interakcji.

Element interaktywny to funkcja eksperymentalna obsługiwana w a unity 2019.3 i nowszej, ponieważ wykorzystuje nową funkcję aparatu Unity 2019.3: serializowanieodwołania .

Interactive Element Inspector

W trybie odtwarzania inspektor elementów interaktywnych udostępnia wizualną opinię, która wskazuje, czy bieżący stan jest aktywny. Jeśli stan jest aktywny, zostanie wyróżniony za pomocą koloru koloru koloru cygowego. Jeśli stan nie jest aktywny, kolor nie jest zmieniany. Liczby obok stanów inspektora są wartościami stanu, jeśli stan jest aktywny, a wartość to 1, jeśli stan nie jest aktywny, wartość wynosi 0.

Element interaktywny z interakcją z rękami wirtualnymi

Stany podstawowe

Element interaktywny zawiera stany podstawowe i obsługuje dodawanie stanów niestandardowych. Stan podstawowy to taki, który ma już logikę ustawienia stanu zdefiniowaną w BaseInteractiveElement . Poniżej znajduje się lista bieżących podstawowych stanów opartych na danych wejściowych:

Bieżące stany podstawowe

Stany podstawowe bliskich i dalekosieć interakcji:

Stany podstawowe bliskich interakcji:

Podstawowe stany o wiele interakcji:

Inne stany podstawowe:

How to Add a Core State via Inspector

  1. Przejdź do tematu Add Core State in the inspector for Interactive Element (Dodaj stan podstawowy w inspektorze elementu interaktywnego).

    Dodawanie stanu podstawowego za pomocą inspektora

  2. Wybierz przycisk Wybierz stan, aby wybrać stan podstawowy do dodania. Stany w menu są sortowane według typu interakcji.

    Dodawanie stanu podstawowego za pośrednictwem inspektora z wybranym stanem

  3. Otwórz składaną konfigurację zdarzeń, aby wyświetlić zdarzenia i właściwości skojarzone ze stanem.

    Dodawanie stanu podstawowego za pośrednictwem inspektora z konfiguracją zdarzeń

How to Add a Core State via Script

Użyj AddNewState(stateName) metody , aby dodać stan podstawowy. Aby uzyskać listę dostępnych podstawowych nazw stanu, użyj CoreInteractionState wyli roku.

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

interactiveElement.AddNewState("SelectFar");

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

Wewnętrzna struktura stanów

Stany w elemencie interaktywnym są typu InteractionState . Element InteractionState zawiera następujące właściwości:

  • Nazwa: nazwa stanu.
  • Wartość: wartość stanu. Jeśli stan jest wł., wartość stanu to 1. Jeśli stan jest wyłączony, wartość stanu wynosi 0.
  • Aktywny: określa, czy stan jest obecnie aktywny. Wartość właściwości Active ma wartość true, gdy stan jest wł., wartość false, jeśli stan jest wyłączony.
  • Typ interakcji: Typ interakcji stanu to typ interakcji, dla których jest przeznaczony stan.
    • None: nie obsługuje żadnej formy interakcji danych wejściowych.
    • Near: obsługa niemal interakcji. Dane wejściowe są uznawane za zbliżone do interakcji, gdy mówiona ręka ma bezpośredni kontakt z innym obiektem gry, tj. pozycja wyrażana ręki znajduje się blisko pozycji obiektu gry w świecie.
    • Far: Obsługa interakcji z najdalejszą ich obsługą. Dane wejściowe są uznawane za dalekosiądną interakcję, gdy bezpośredni kontakt z obiektem gry nie jest wymagany. Na przykład dane wejściowe za pośrednictwem promienia kontrolera lub spojrzenia są uznawane za dane wejściowe o daleko interakcji.
    • NearAndFar: obejmuje obsługę zarówno bliskich, jak i dalekosiądnych interakcji.
    • Other: obsługa interakcji niezależnej od wskaźnika.
  • Konfiguracja zdarzeń: konfiguracja zdarzenia dla stanu jest punkt wejścia profilu zdarzeń serializacji.

Wszystkie te właściwości są ustawiane wewnętrznie w elemencie State Manager zawartym w elemencie interaktywnym. W celu modyfikacji stanów użyj następujących metod pomocnika:

Metody pomocnika ustawień stanu

// 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");

Pobieranie konfiguracji zdarzenia stanu jest specyficzne dla samego stanu. Każdy stan podstawowy ma określony typ konfiguracji zdarzeń, który został opisany poniżej w sekcjach opisujących każdy stan podstawowy.

Oto uogólniony przykład uzyskiwania konfiguracji zdarzeń stanu:

// 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");

Stan domyślny

Domyślny stan jest zawsze obecny w elemencie interaktywnym. Ten stan będzie aktywny tylko wtedy, gdy wszystkie inne stany nie są aktywne. Jeśli jakikolwiek inny stan stanie się aktywny, stan Domyślny zostanie wewnętrznie wyłączony.

Element interakcyjny jest inicjowany z domyślnymi stanami i fokusem na liście stanów. Stan Domyślny zawsze musi być obecny na liście stanu.

Pobieranie domyślnych zdarzeń stanu

Typ konfiguracji zdarzenia dla stanu domyślnego: 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");
});

Stan koncentracji uwagi

Stan koncentracji uwagi jest stanem blisko i najdalej interakcji, który można uważać za rzeczywistość mieszaną równoważną zatrzymaniu wskaźnika myszy. Czynnik odróżniający niemal i daleko interakcji dla stanu koncentracji uwagi jest bieżący aktywny typ wskaźnika. Jeśli typ wskaźnika dla stanu koncentracji uwagi to Wskaźnik poke, interakcja jest uznawana za prawie interakcję. Jeśli podstawowy wskaźnik nie jest wskaźnikiem poke, interakcja jest uznawana za dalekosiąc. Stan fokusu jest domyślnie obecny w elemencie interaktywnym.

Zachowanie stanu fokusu  Focus state with virtual hand interaction (Stan koncentracji uwagi z interakcją z rękami wirtualnymi)

Focus State Inspector  Stan fokusu w inpsector

<a name="getting-focus-state-events">Pobieranie zdarzeń stanu fokusu

Typ konfiguracji zdarzenia dla stanu koncentracji uwagi: 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");
});

Focus Near vs Focus Far Behavior

Koncentruj się blisko i daleko dzięki interakcji za pomocą ręki wirtualnej

Ustawianie fokusu w pobliżu stanu

Stan koncentracji uwagi Blisko jest ustawiany, gdy zostanie podniesione zdarzenie fokusu, a podstawowym wskaźnikiem jest wskaźnik poke, co wskazuje na niemal interakcję.

Zachowanie koncentracji uwagi w pobliżu stanu  Koncentruj się w pobliżu stanu za pomocą interakcji z rękami wirtualnymi

Focus Near State Inspector  Fokus blisko składnika w inspektorze

<a name="getting-focusnear-state-events">Pobieranie fokusuD zdarzenia stanu koncentracji uwagi

Typ konfiguracji zdarzenia dla stanu FocusNear: 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");
});

Focus Far State

Stan Focus Far jest ustawiany, gdy wskaźnik podstawowy nie jest wskaźnikiem Poke. Na przykład domyślny wskaźnik promienia kontrolera i wskaźnik GGV (Spojrzenie, Gest, Głos) są uznawane za wskaźniki o wielu interakcjach.

Zachowanie stanu koncentracji uwagi  Focus state far with virtual hand interaction (Znacznie skupić się na stanie za pomocą interakcji z rękami wirtualnymi)

Focus Far State Inspector  Skoncentruj się na składniku o wiele koncentracji w inspektorze

<a name="getting-focus-far-state-events">Pobieranie zdarzeń o stanie o koncentracji uwagi

Typ konfiguracji zdarzenia dla stanu FocusFar: 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");
});

Stan dotknięcia

Stan Dotknięcie to stan blisko interakcji, który jest ustawiany, gdy wyrazowa ręka bezpośrednio dotyka obiektu. Bezpośredni dotyk oznacza, że palcem wskazującym ręka jest bardzo blisko pozycji obiektu na świecie. Domyślnie składnik NearInteractionTouchableVolume jest dołączany do obiektu, jeśli stan Touch zostanie dodany do listy stanu. Obecność składnika lub NearInteractionTouchableVolume jest NearInteractionTouchable wymagana do wykrywania zdarzeń touch. Różnica między i polega na tym, że wykrywa dotyk na podstawie kolidowania obiektu i wykrywa dotyk w zdefiniowanym NearInteractionTouchableVolume NearInteractionTouchable obszarze NearInteractionTouchableVolume NearInteractionTouchable płaszczyzny.

Zachowanie stanu dotknięcia  Stan dotykowy z interakcją z rękami wirtualnymi

Touch State Inspector  Składnik stanu dotykowego w inspektorze

<a name="getting-touch-state-events">Pobieranie zdarzeń stanu dotykowego

Typ konfiguracji zdarzenia dla stanu touch: 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");
});

Wybierz pozycję Stan odsuwu

Stan Wybierz daleko jest IMixedRealityPointerHandler na powierzchni. Ten stan jest stanem dalekosekwowej interakcji, który wykrywa naciśnięcie w powietrzu (naciśnięcie w powietrzu) i używa wskaźników interakcji, takich jak domyślny wskaźnik promienia kontrolera lub wskaźnik GGV. Stan Wybierz daleko ma opcję w obszarze konfiguracji zdarzenia o nazwie Global . Jeśli Global ma wartość true, wartość jest IMixedRealityPointerHandler rejestrowana jako globalna procedura obsługi danych wejściowych. Skoncentrowanie się na obiekcie nie jest wymagane do wyzwalania wejściowych zdarzeń systemowych, jeśli program obsługi jest zarejestrowany jako globalny. Jeśli na przykład użytkownik chce wiedzieć za każdym razem, gdy gest naciśnięcia/wybrania w powietrzu jest wykonywany niezależnie od obiektu w fokusie, ustaw Global wartość true.

Wybierz pozycję Zachowanie stanu odsuwu  Wybierz daleko z interakcją z dłonią wirtualną

Wybierz pozycję Far State Inspector  Wybieranie składnika far w inspektorze

<a name="getting-select-far-state-events">Pobieranie zdarzeń o stanie dalekosiądowym

Typ konfiguracji zdarzenia dla stanu SelectFar: 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");
});

Kliknął stan

Stan Kliknął jest domyślnie wyzwalany przez kliknięcie o wiele interakcji (wybierz stan Daleko). Ten stan jest wewnętrznie włączony, wywołuje zdarzenie OnClicked, a następnie jest natychmiast wyłączany.

Uwaga

Wizualna opinia w inspektorze oparta na działaniu stanu nie jest obecna dla stanu Kliknął, ponieważ jest włączana, a następnie natychmiast wyłączana.

Zachowanie stanu kliknięcia  Stan kliknięcia z interakcjami z rękami wirtualnymi

Kliknął pozycję State Inspector  Kliknij składnik stanu w inspektorze

Przykład stanu blisko i najdalej kliknął
Stan kliknięcia można wyzwolić za pośrednictwem dodatkowych punktów wejścia przy użyciu interactiveElement.TriggerClickedState() metody . Jeśli na przykład użytkownik chce, aby dotyk w pobliżu interakcji wyzwalał również kliknięcie obiektu, doda metodę jako odbiornik w TriggerClickedState() stanie dotknięcia.

Niemal i daleko w stanach interakcji z rękami wirtualnymi

<a name="getting-clicked-state-events">Pobieranie klikowanych zdarzeń stanu

Typ konfiguracji zdarzenia dla stanu kliknął: ClickedEvents

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

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

Przełącz wł. i wyłącz stan

Stany Przełącznik wł. i Wył. są parą i oba muszą być obecne w celu zachowania przełącznika. Domyślnie stany Toggle On (Włącz) i Toggle Off (Wyłącz) są wyzwalane za pośrednictwem przycisku interakcji o wiele (wybierz stan Daleko). Domyślnie stan Wyłącz przełącznika jest aktywny podczas uruchamiania, co oznacza, że przełącznik zostanie zainicjowany jako wyłączony. Jeśli użytkownik chce, aby stan Przełącz wł. był aktywny na początku, w stanie Włącz ustaw IsSelectedOnStart wartość true.

ToggleOn and Toggle Off State Behavior (Przełączanie i wyłączanie zachowania stanu)  Przełączanie i wyłączanie przy użyciu interakcji za pomocą ręki wirtualnej

PrzełącznikiOn i Toggle Off State Inspector  Przełączanie składnika w inspektorze

Przykład blisko i najdalej przełącznych stanów
Podobnie jak w przypadku stanu Kliknął, ustawienie stanu przełączania może mieć wiele punktów wejścia przy użyciu interactiveElement.SetToggleStates() metody . Jeśli na przykład użytkownik chce, aby dotyk był dodatkowym punktem wejścia w celu ustawienia stanu przełącznika, dodaje metodę do jednego ze zdarzeń SetToggleStates() w stanie Touch.

Niemal i daleko przełącznik z interakcjami za pomocą ręki wirtualnej

<a name="getting-toggle-on-and-toggle-off-state-events">Getting Toggle On and Toggle Off State Events

Typ konfiguracji zdarzenia dla stanu ToggleOn: ToggleOnEvents
Typ konfiguracji zdarzenia dla stanu przełączania: 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");
});

Stan słowa kluczowego mowy

Stan słowa kluczowego mowy nasłuchuje słów kluczowych zdefiniowanych w Mixed Reality mowy. Każde nowe słowo kluczowe MUSI zostać zarejestrowane w profilu polecenia mowy przed środowiskiem uruchomieniowym (kroki poniżej).

Zachowanie stanu słowa kluczowego mowy  Słowo kluczowe mowy z wirtualną interakcją

Speech Keyword State Inspector  Składnik słowa kluczowego mowy w inspektorze

Uwaga

Stan słowa kluczowego mowy został wyzwolony w edytorze przez naciśnięcie klawisza F5 w powyższym pliku GIF. Konfigurowanie testowania mowy w edytorze zostało opisane w poniższych krokach.

How to Register a Speech Command/Keyword

  1. Wybieranie obiektu gry MixedRealityToolkit

  2. Wybierz pozycję Kopiuj i dostosuj bieżący profil

  3. Przejdź do sekcji Dane wejściowe i wybierz pozycję Klonuj, aby włączyć modyfikację profilu wejściowego

  4. Przewiń w dół do sekcji Mowa w profilu wejściowym i sklonuj profil mowy

    Profil słowa kluczowego mowy w obiekcie gry MRTK

  5. Wybieranie polecenia Dodaj nową mowę

    Dodawanie nowego słowa kluczowego mowy w profilu MRTK

  6. Wprowadź nowe słowo kluczowe. Opcjonalnie: zmień kod klucza na F5 (lub inny kod klucza), aby umożliwić testowanie w edytorze.

    Konfigurowanie słowa kluczowego mowy w profilu MRTK

  7. Wstecz do inspektora stanu słowa kluczowego mowy elementu interakcyjnego i wybierz pozycję Dodaj słowo kluczowe

    Dodawanie słowa kluczowego do składnika elementu interakcyjnego

    Walidacja i rejestracja słów kluczowych

  8. Wprowadź nowe słowo kluczowe, które zostało właśnie zarejestrowane w profilu mowy

    Wprowadzanie nowego słowa kluczowego mowy

Aby przetestować stan słowa kluczowego mowy w edytorze, naciśnij kod klucza zdefiniowany w kroku 6 (F5), aby zasymulować zdarzenie rozpoznanego słowa kluczowego mowy.

Pobieranie zdarzeń stanu słowa kluczowego mowy

Typ konfiguracji zdarzenia dla stanu SpeechKeyword: 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"); 
});

Stany niestandardowe

How to Create a Custom State via Inspector

Stan niestandardowy utworzony za pośrednictwem inspektora zostanie zainicjowany przy użyciu domyślnej konfiguracji zdarzeń stanu. Domyślna konfiguracja zdarzeń dla stanu niestandardowego jest typu i StateEvents zawiera zdarzenia OnStateOn i OnStateOff.

  1. Przejdź do tematu Create Custom State in the inspector for Interactive Element (Utwórz stan niestandardowy w inspektorze elementu interaktywnego).

    Tworzenie stanu niestandardowego

  2. Wprowadź nazwę nowego stanu. Ta nazwa musi być unikatowa i nie może być taka sama jak istniejące stany podstawowe.

    Wprowadzanie nazwy nowego stanu niestandardowego

  3. Wybierz pozycję Ustaw nazwę stanu, aby dodać ją do listy stanu.

    Dodawanie stanu niestandardowego do listy stanu

    Ten stan niestandardowy jest inicjowany z domyślną StateEvents konfiguracją zdarzeń, która zawiera OnStateOn zdarzenia i OnStateOff . Aby utworzyć niestandardową konfigurację zdarzeń dla nowego stanu, zobacz: Tworzenie stanu niestandardowego za pomocą niestandardowej konfiguracji zdarzeń.

    Nowy stan wyświetlany w składniku elementu interakcyjnego

<a name="how-to-create-a-custom-state-via-script">How to Create a Custom State via Script

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");
});

Tworzenie stanu niestandardowego za pomocą niestandardowej konfiguracji zdarzeń

Przykładowe pliki dla stanu niestandardowego o nazwie Klawiatura znajdują się tutaj: MRTK\SDK\Experimental\InteractiveElement\Examples\Scripts\CustomStateExample

W poniższych krokach przedstawiono istniejący przykład tworzenia niestandardowej konfiguracji zdarzeń stanu i plików odbiorcy.

  1. Pomyśl o nazwie stanu. Ta nazwa musi być unikatowa i nie może być taka sama jak istniejące stany podstawowe. Na potrzeby tego przykładu nazwa stanu to Klawiatura.

  2. Utwórz dwa pliki cs o nazwach state name + "Receiver" i state name + "Events". Nazwy tych plików są brane pod uwagę wewnętrznie i muszą być zgodne z konwencją nazwa stanu + zdarzenie/odbiornik.

    Skrypty stanu klawiatury

  3. Zobacz pliki KeyboardEvents.cs i KeyboardReceiver.cs, aby uzyskać więcej informacji na temat zawartości pliku. Nowe klasy konfiguracji zdarzeń muszą dziedziczyć z klasy , BaseInteractionEventConfiguration a nowe klasy odbiornika zdarzeń muszą dziedziczyć z klasy BaseEventReceiver . Przykłady ustawienia stanu dla stanu klawiatury znajdują się w CustomStateSettingExample.cs pliku.

  4. Dodaj stan do elementu interaktywnego przy użyciu nazwy stanu. Nazwa stanu zostanie rozpoznana, jeśli istnieją pliki konfiguracji zdarzenia i odbiorcy zdarzeń. Właściwości w pliku konfiguracji zdarzeń niestandardowych powinny pojawić się w inspektorze.

    Dodawanie stanu niestandardowego do elementu  interaktywnego Stan niestandardowy rozpoznawany w elemencie interaktywnym

  5. Więcej przykładów konfiguracji zdarzeń i plików odbiorcy zdarzeń można znaleźć w plikach w tych ścieżkach:

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

Przykładowa scena

Przykładowa scena elementu Interaktywnego i wizualizatora stanu znajduje się tutaj: MRTK\SDK\Experimental\InteractiveElement\Examples\InteractiveElementExampleScene.unity

Przykładowa scena z elementem interaktywnym i wizualizatorem stanu

Przycisk z kompresją

Przykładowa scena zawiera prefabrykaty o nazwach i , które odzwierciedlają zachowanie przycisków, które są konstruowane przy użyciu elementu interaktywnego i CompressableButton CompressableButtonToggle PressableButtonHoloLens2 wizualizatora stanu. Składnik CompressableButton jest obecnie kombinacją z jako PressableButton + PressableButtonHoloLens2 BaseInteractiveElement klasą bazową.

Wizualizator stanu [eksperymentalne]

Składnik State Visualizer dodaje animacje do obiektu na podstawie stanów zdefiniowanych w połączonym składniku elementu interaktywnego. Ten składnik tworzy zasoby animacji, umieszcza je w folderze MixedRealityToolkit.Generated i umożliwia uproszczone ustawienie ramki kluczowej animacji przez dodanie właściwości Animatable do docelowego obiektu gry. Aby włączyć przejścia animacji między stanami, tworzony jest zasób Kontrolera trwałych i domyślną maszynę stanu generowana ze skojarzonymi parametrami i dowolnymi przejściami stanu. Maszynę stanu można wyświetlić w oknie Aparatu Unity.

State Visualizer i system animacji aparatu Unity

Wizualizator stanu korzysta obecnie z systemu animacji aparatu Unity.

Po naciśnięciu przycisku Generuj nowe klipy animacji w wizualizatorze stanu nowe zasoby klipów animacji są generowane na podstawie nazw stanu w elemencie interaktywnym i umieszczane w folderze MixedRealityToolkit.Generated. Właściwość Klip animacji w każdym kontenerze stanu jest ustawiona na skojarzony klip animacji.

Klipy animacji w składniku wizualizatora stanu

Generowany jest również automat stanowy w celu zarządzania płynnymi przejściami między klipami animacji. Domyślnie maszyna stanu używa dowolnego stanu, aby zezwolić na przejścia między dowolnym stanem w elemencie interaktywnym.

Wizualizatory stanu wyzwalane w centrum są również generowane dla każdego stanu, a parametry wyzwalacza są używane w wizualizatorze stanu do wyzwalania animacji.

Maszyna stanu aparatu Unity

Ograniczenia środowiska uruchomieniowego

Wizualizator stanu musi zostać dodany do obiektu za pośrednictwem inspektora i nie można go dodać za pomocą skryptu. Właściwości modyfikujące kontrolerYStateMachine/AnimationController znajdują się w przestrzeni nazw edytora ( ), która jest usuwana podczas UnityEditor.Animations tworzenia aplikacji.

Jak używać wizualizatora stanu

  1. Tworzenie modułu

  2. Dołączanie elementu interaktywnego

  3. Dołączanie wizualizatora stanu

  4. Wybieranie opcji Generuj nowe klipy animacji

    Generowanie nowych klipów animacji

    Wyświetlanie wygenerowanych klipów animacji w wizualizatorze i elementach interaktywnych

  5. W kontenerze stanu fokusu wybierz pozycję Dodaj element docelowy

    Dodawanie obiektu docelowego wizualizatora stanu

  6. Przeciągnij bieżący obiekt gry do pola docelowego

    Ustawianie celu wizualizatora stanu

  7. Otwieranie składania właściwości z właściwościami animowanymi modułu

  8. Wybierz menu rozwijane właściwości Animatable i wybierz pozycję Kolor

    Ustawianie koloru wizualizatora stanu

  9. Wybierz pozycję Dodaj właściwość z właściwością z właściwością animowaną koloru

    Wybieranie właściwości z animowanym kolorem wizualizatora

  10. Wybieranie koloru

    Wybieranie koloru wizualizatora z kółka kolorów

  11. Naciśnij klawisz Play i obserwuj zmianę koloru przejściowego

    Przykład zmiany koloru przejściowego z interakcją z rękami wirtualnymi

Właściwości, które można animować

Głównym celem właściwości animowanych jest uproszczenie ustawienia ramki kluczowej klipu animacji. Jeśli użytkownik zna system animacji aparatu Unity i preferuje bezpośrednie ustawianie ramek kluczowych dla wygenerowanych klipów animacji, nie może po prostu dodać właściwości Animatable do obiektu docelowego i otworzyć klipu w oknie Animacja aparatu Unity (Windows > Animation > Animation).

W przypadku używania właściwości Animatable dla animacji typ krzywej jest ustawiany na EaseInOut.

Bieżące właściwości z właściwościami animowanymi:

Przesunięcie skali

Właściwość Scale Offset Animatable pobiera bieżącą skalę obiektu i dodaje zdefiniowane przesunięcie.

Skalowanie przesunięcia za pomocą interakcji z rękami wirtualnymi

Przesunięcie pozycji

Właściwość Position Offset Animatable przyjmuje bieżącą pozycję obiektu i dodaje zdefiniowane przesunięcie.

Przesunięcie położenia z interakcją z rękami wirtualnymi

Kolor

Właściwość Color Animatable reprezentuje główny kolor materiału, jeśli materiał ma główną właściwość koloru. Ta właściwość animowanie material._Color właściwości.

Zmiana koloru fokusu za pomocą interakcji z rękami wirtualnymi

Kolor cieniowania

Właściwość Animowanie koloru cieniowania odwołuje się do właściwości cieniowania koloru typu. Nazwa właściwości jest wymagana dla wszystkich właściwości modułu cieniowania. Poniższy plik GIF przedstawia animowanie właściwości koloru cieniowania o nazwie Fill_Color która nie jest głównym kolorem materiału. Obserwuj zmieniające się wartości w inspektorze materiału.

Kolor cieniowania z interakcją z rękami wirtualnymi

Float cieniowania

Właściwość Shader Float Animatable odwołuje się do właściwości cieniowania typu float. Nazwa właściwości jest wymagana dla wszystkich właściwości modułu cieniowania. W poniższym pliku gif obserwuj zmieniające się wartości w inspektorze materiału dla właściwości Właściwości Chyli.

Zmiennoprzecinkowa cieniowania z interakcją z rękami wirtualnymi

Wektor cieniowania

Właściwość Shader Vector Animatable odnosi się do właściwości cieniowania typu Vector4. Nazwa właściwości jest wymagana dla wszystkich właściwości modułu cieniowania. W poniższym pliku gif sprawdź zmieniające się wartości w inspektorze materiału dla właściwości Tiling (Main Tex_ST).

Wektor cieniowania z interakcją z rękami wirtualnymi

How to Find Animatable Shader Property Names

  1. Przejdź do okna > animacji > animacji

  2. Upewnij się, że w hierarchii wybrano obiekt z wizualizatorem stanu

  3. Wybieranie dowolnego klipu animacji w oknie Animacja

  4. Wybierz pozycję Dodaj właściwość, otwórz składanie programu renderowania siatki

    Dodawanie właściwości animacji w oknie Konsoli

  5. Ta lista zawiera nazwy wszystkich nazw właściwości Animatable

    Właściwości animacji renderatora siatki w oknie Przegnieć

Zobacz też