Interaktív elem [Kísérleti] – MRTK2

Egyszerűsített központosított belépési pont az MRTK bemeneti rendszeréhez. Állapotkezelési módszereket, eseménykezelést és az állapotbeállítási logikát tartalmazza az alapvető interakciós állapotokhoz.

Az Interaktív elem egy kísérleti funkció, amelyet a Unity 2019.3 és újabb verzió támogat, mivel a Unity 2019.3: A referencia szerializálása funkcióját használja.

Interaktív elemfelügyelő

A lejátszási módban az Interaktív elemfelügyelő vizuális visszajelzést küld, amely jelzi, hogy az aktuális állapot aktív-e. Ha egy állapot aktív, ciánkék színnel lesznek kiemelve. Ha az állapot nem aktív, a szín nem változik. Az ellenőr állapotai melletti számok az állapotértékek, ha az állapot aktív, akkor az érték 1, ha az állapot nem aktív, az érték 0.

Interaktív elem virtuális kézhasználattal

Alapvető állapotok

Az interaktív elem alapvető állapotokat tartalmaz, és támogatja az egyéni állapotok hozzáadását. Az alapállapot olyan, amely már rendelkezik az állapotbeállítási logikával a-ben BaseInteractiveElement. Az alábbi lista az aktuális bemeneti alapú magállapotokat tartalmazza:

Aktuális alapvető állapotok

Közeli és távoli interakció alapvető állapotai:

Közel interakció alapvető állapotai:

Távoli interakció alapállapotai:

Egyéb alapvető állapotok:

Alapvető állapot hozzáadása az Inspector használatával

  1. Lépjen az Add Core State (Alapállapot hozzáadása ) elemre az interaktív elem felügyelőjében.

    Alapállapot hozzáadása az Inspector használatával

  2. Válassza az Állapot kiválasztása gombot a hozzáadni kívánt alapállapot kiválasztásához. A menüben lévő állapotok interakciótípus szerint vannak rendezve.

    Alapállapot hozzáadása az Inspectoren keresztül, kiválasztott állapottal

  3. Nyissa meg az Eseménykonfiguráció hajtogatást az állapothoz társított események és tulajdonságok megtekintéséhez.

    Alapállapot hozzáadása az Inspectoren keresztül eseménykonfigurációval

Alapvető állapot hozzáadása szkripttel

AddNewState(stateName) A metódussal adjon hozzá egy alapvető állapotot. Az elérhető alapállapotnevek listájához használja az enumerálást CoreInteractionState .

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

interactiveElement.AddNewState("SelectFar");

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

Államok belső struktúrája

Az Interaktív elem állapotainak típusa InteractionState. Az an InteractionState a következő tulajdonságokat tartalmazza:

  • Név: Az állapot neve.
  • Érték: Az állapotérték. Ha az állapot be van kapcsolva, az állapot értéke 1. Ha az állapot ki van kapcsolva, az állapot értéke 0.
  • Aktív: Azt jelzi, hogy az állapot jelenleg aktív-e. Az Aktív tulajdonság értéke igaz, ha az állapot be van kapcsolva, hamis, ha az állapot ki van kapcsolva.
  • Interakció típusa: Az állapot interakciótípusa az az interakciótípus, amelynek az állapotot szánják.
    • None: Nem támogatja a bemeneti interakciók semmilyen formáját.
    • Near: Közel interakció támogatása. A bemenet közel interakciónak minősül, ha egy csuklós kéz közvetlen kapcsolatban áll egy másik játékobjektummal, azaz a csuklós kéz pozíciója közel van a játékobjektum világűrben elfoglalt helyéhez.
    • Far: Távoli interakció támogatása. A bemenet távoli interakciónak minősül, ha nincs szükség közvetlen kapcsolatra a játékobjektummal. A vezérlő sugarán vagy tekinteten keresztüli bevitel például távoli interakciós bemenetnek számít.
    • NearAndFar: A közel- és távoli interakciók támogatását is magában foglalja.
    • Other: Mutatófüggetlen interakció támogatása.
  • Eseménykonfiguráció: Az állapot eseménykonfigurációja a szerializált eseményprofil belépési pontja.

Ezen tulajdonságok mindegyike belsőleg van beállítva az State Manager interaktív elemben. Az állapotok módosításához használja a következő segítő módszereket:

Állapotbeállítás segédmeterei

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

Az állapot eseménykonfigurációjának lekérése önmagára vonatkozik. Minden egyes alapvető állapot egy adott eseménykonfigurációs típussal rendelkezik, amely az egyes alapvető állapotokat leíró szakaszokban található.

Íme egy általános példa egy állapot eseménykonfigurációjának lekérésére:

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

Alapértelmezett állapot

Az Alapértelmezett állapot mindig jelen van egy interaktív elemen. Ez az állapot csak akkor lesz aktív, ha az összes többi állapot nem aktív. Ha bármely más állapot aktívvá válik, az Alapértelmezett állapot belsőleg ki lesz kapcsolva.

Az interaktív elemek inicializálása az állapotlistában található Alapértelmezett és Fókusz állapotokkal történik. Az Alapértelmezett állapotnak mindig szerepelnie kell az állapotlistában.

Alapértelmezett állapotesemények beolvasása

Az alapértelmezett állapot eseménykonfigurációs típusa: 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");
});

Fókusz állapota

A Fókusz állapot egy közel- és távoli interakciós állapot, amely a rámutatással egyenértékű vegyes valóságnak tekinthető. A Fókusz állapot közeli és távoli interakciója közötti különbség az aktuális aktív mutatótípus. Ha a Fókusz állapot mutatótípusa a Poke-mutató, akkor az interakció közel interakciónak minősül. Ha az elsődleges mutató nem a Poke-mutató, akkor az interakció távoli interakciónak minősül. A Fókusz állapot alapértelmezés szerint jelen van az Interaktív elemben.

Fókuszállapotviselkedése A fókusz állapota virtuális kézművelettel

Fókuszállapot-felügyelőFókusz állapota az Inpsectorban

Fókuszállapot-események beolvasása

A fókuszállapot eseménykonfigurációs típusa: 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");
});

Fókusz közelről és fókusz távolról viselkedés

Közel- és távoli fókusz a virtuális kéz interakciójával

Fókusz közeli állapotban

A Fókusz közel állapota akkor van beállítva, ha fókuszeseményt emelnek ki, és az elsődleges mutató a Poke-mutató, amely a közel interakciót jelzi.

Focus Near State BehaviorA fókusz közel állapothoz a virtuális kéz interakciójával

Focus Near State InspectorFocus near component in the Inspector

Fókusz lekéréseÚj állapotesemények

A FocusNear állapot eseménykonfigurációs típusa: 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");
});

Fókusz távoli állapota

A Fókusz távolsága állapot akkor van beállítva, ha az elsődleges mutató nem a Poke-mutató. Az alapértelmezett vezérlő sugármutatója és a GGV (Tekintet, Kézmozdulat, Hang) mutató például távoli interakciós mutatóknak minősül.

Focus Far State BehaviorA fókusz állapota távolról a virtuális kéz interakciójával

Focus Far State InspectorFocus far component in the Inspector

Fókusz távoli állapot eseményeinek lekérése

A FocusFar state eseménykonfigurációs típusa: 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");
});

Érintéses állapot

Az Érintés állapot egy közel interakciós állapot, amely akkor van beállítva, ha egy csuklós kéz közvetlenül megérinti az objektumot. A közvetlen érintés azt jelenti, hogy a csuklós kéz mutatóujja nagyon közel van az objektum világpozíciójához. Alapértelmezés szerint egy NearInteractionTouchableVolume összetevő lesz csatolva az objektumhoz, ha az Érintés állapot hozzá van adva az állapotlistához. Az érintéses események észleléséhez szükség van egy NearInteractionTouchableVolume vagy NearInteractionTouchable összetevő jelenlétére. A különbség az és NearInteractionTouchable az közöttNearInteractionTouchableVolume, hogy NearInteractionTouchableVolume észleli az érintést az objektum ütközője alapján, és NearInteractionTouchableészleli az érintést egy sík meghatározott területén belül.

Érintésállapotviselkedése Érintésállapot virtuális kézművelettel

Touch State InspectorTouch state összetevő az Inspector-ben

Érintésállapot-események lekérése

A Touch State eseménykonfigurációs típusa: 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");
});

Távoli állapot kiválasztása

A Select Far (Távolság kiválasztása) állapot a IMixedRealityPointerHandler felületre kerül. Ez az állapot egy távoli interakciós állapot, amely észleli a távoli interakció kattintását (légkondentálás), és a távoli interakciós mutatók, például az alapértelmezett vezérlő sugármutatója vagy a GGV-mutató használatával tartja a kapcsolatot. A Távoli állapot kiválasztása lehetőség az eseménykonfiguráció összecsukási területén Globaltalálható. Ha Global igaz, akkor a IMixedRealityPointerHandler globális beviteli kezelőként van regisztrálva. Ha egy kezelő globálisként van regisztrálva, nem kell objektumra összpontosítania a bemeneti rendszer eseményeinek aktiválásához. Ha például egy felhasználó tudni szeretné, hogy a fókuszban lévő objektumtól függetlenül bármikor végrehajtja-e a légi koppintás/kijelölés kézmozdulatot, állítsa true (igaz) értékre Global .

Távoli állapotviselkedésének kiválasztása Távoli kijelölés virtuális kézművelettel

Válassza a Far State InspectorSelect far component in the Inspector (Távoli állapotfelügyelő kiválasztása) lehetőséget.

Távoli állapot eseményeinek kiválasztása

A SelectFar állapot eseménykonfigurációs típusa: 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");
});

Kattintson az Állapot gombra

A Kattintott állapotot alapértelmezés szerint egy távoli interakció (Távoli állapot kiválasztása) váltja ki. Ez az állapot belsőleg be van kapcsolva, meghívja az OnClicked eseményt, majd azonnal ki van kapcsolva.

Megjegyzés

Az ellenőr állapottevékenységen alapuló vizuális visszajelzése nem jelenik meg a Kattintott állapothoz, mert azonnal be- és kikapcsol.

Kattintson az Állapot viselkedéseElemre kattintott állapot virtuális kézműveletekkel

Kattintson a State Inspector (Állapotfelügyelő) elemre, majd kattintson az Inspector állapotösszetevőjére

Példa a közelben és a távolra kattintott állapotra
A kattintott állapot további belépési pontokon keresztül aktiválható a interactiveElement.TriggerClickedState() metódussal. Ha például egy felhasználó egy közeli interakciós érintést szeretne egy objektumra való kattintás aktiválásához, akkor a TriggerClickedState() metódust figyelőként adja hozzá érintéses állapotban.

Közel- és távoli állapot virtuális kézműveletekkel

A kattintott állapotesemények lekérése

A Kattintott állapot eseménykonfigurációs típusa: ClickedEvents

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

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

Be- és kikapcsolási állapot

A Be és a Ki váltó állapot egy pár, és mindkettőnek jelen kell lennie a váltó viselkedéshez. Alapértelmezés szerint a Váltógomb be- és kikapcsolása egy távoli interakciós kattintással aktiválódik (Távoli állapot kiválasztása). Alapértelmezés szerint a Kikapcsolás állapot aktív az indításkor, ami azt jelenti, hogy a kapcsolót ki értékre inicializálja a rendszer. Ha egy felhasználó azt szeretné, hogy a Váltógomb bekapcsolva állapot aktív legyen az indításkor, akkor a Be váltó állapotban állítsa true (igaz) értékre IsSelectedOnStart .

Az Állapot viselkedésének ki- és bekapcsolása virtuális kézműveletekkel

Az Inspector ToggleOn és Toggle Off State Inspectorváltóösszetevője

Példa a közeli és a távoli váltóállapotra
A Kattintott állapothoz hasonlóan a váltóállapot-beállítás több belépési ponttal is rendelkezhet a interactiveElement.SetToggleStates() metódus használatával. Ha például egy felhasználó további belépési pontként szeretné beállítani az érintést a váltóállapotok beállításához, akkor a SetToggleStates() metódust az Érintés állapot egyik eseményéhez adja hozzá.

Közel- és távoli váltókapcsoló virtuális kézműveletekkel

Az állapotesemények be- és kikapcsolása

A ToggleOn állapot eseménykonfigurációs típusa: ToggleOnEvents
A ToggleOff állapot eseménykonfigurációs típusa: 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");
});

Beszéd kulcsszó állapota

A Speech Kulcsszó állapot figyeli az Mixed Reality Speech Profile-ben meghatározott kulcsszavakat. Minden új kulcsszót regisztrálni kell a speech parancsprofilban a futtatókörnyezet előtt (az alábbi lépések).

Speech Keyword State BehaviorSpeech kulcsszó virtuális interakcióval

Speech Keyword State InspectorSpeech kulcsszóösszetevő az Inspector-ben

Megjegyzés

A Speech Kulcsszó állapot a szerkesztőben a fenti gif F5 billentyű lenyomásával aktiválódott. A beszédszerkesztő tesztelésének beállítását az alábbi lépések ismertetik.

Beszédparancs/kulcsszó regisztrálása

  1. Válassza ki a MixedRealityToolkit játékobjektumot

  2. Válassza az aktuális profil másolása és testreszabása lehetőséget

  3. Lépjen a Bemenet szakaszra, és válassza a Klónozás lehetőséget a Bemeneti profil módosításának engedélyezéséhez

  4. Görgessen le a Beszéd szakaszhoz a Bemeneti profilban, és klónozza a Beszédprofilt

    Beszéd kulcsszóprofil az MRTK játékobjektumban

  5. Válassza az Add a New Speech Command (Új beszédfelismerés hozzáadása) parancsot

    Új beszéd kulcsszó hozzáadása az MRTK-profilhoz

  6. Adja meg az új kulcsszót. Nem kötelező: Módosítsa a KeyCode-ot F5 -ra (vagy egy másik KeyCode-ra), hogy lehetővé tegye a tesztelést a szerkesztőben.

    Beszéd kulcsszó konfigurálása az MRTK-profilban

  7. Vissza az Interactive Element Speech Kulcsszó állapotfelügyelőhöz, és válassza a Kulcsszó hozzáadása lehetőséget

    Kulcsszó hozzáadása interaktív elemösszetevőhöz

    Kulcsszóérvényesítés és -regisztráció

  8. Adja meg az új kulcsszót, amely most lett regisztrálva a Beszédprofilban

    Új beszédfelismerési kulcsszó megadása

A speech kulcsszó állapotának a szerkesztőben való teszteléséhez nyomja le a 6. lépésben (F5) meghatározott KeyCode billentyűt a beszéd kulcsszó által felismert esemény szimulálásához.

Beszéd kulcsszóállapot-eseményeinek lekérése

A SpeechKeyword állapot eseménykonfigurációs típusa: 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"); 
});

Egyéni állapotok

Egyéni állapot létrehozása az Inspector használatával

Az inspector használatával létrehozott egyéni állapot az alapértelmezett állapotesemény-konfigurációval lesz inicializálva. Az egyéni állapot alapértelmezett eseménykonfigurációja típus StateEvents , és tartalmazza az OnStateOn és az OnStateOff eseményeket.

  1. Lépjen az Egyéni állapot létrehozása elemre az interaktív elem felügyelőjében.

    Egyéni állapot létrehozása

  2. Adja meg az új állapot nevét. Ennek a névnek egyedinek kell lennie, és nem lehet ugyanaz, mint a meglévő magállapotok.

    Új egyéni állapot nevének megadása

  3. Válassza az Államnév beállítása lehetőséget az állapotlistához való hozzáadáshoz.

    Egyéni állapot hozzáadása az állapotlistához

    Ez az egyéni állapot az és eseményeket tartalmazó OnStateOnOnStateOff alapértelmezett StateEvents eseménykonfigurációval van inicializálva. Egyéni eseménykonfiguráció új állapothoz való létrehozásához lásd: Egyéni állapot létrehozása egyéni eseménykonfigurációval.

    Az interaktív elem összetevőben megjelenő új állapot

Egyéni állapot létrehozása szkripttel

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

Egyéni állapot létrehozása egyéni eseménykonfigurációval

A Billentyűzet nevű egyéni állapot példafájljai itt találhatók: MRTK\SDK\Experimental\InteractiveElement\Examples\Scripts\CustomStateExample

Az alábbi lépések végigvezetnek egy meglévő példán egy egyéni állapotesemény-konfiguráció és -fogadófájlok létrehozására.

  1. Gondolj egy államnévre. Ennek a névnek egyedinek kell lennie, és nem lehet ugyanaz, mint a meglévő magállapotok. Ebben a példában az állapot neve Billentyűzet lesz.

  2. Hozzon létre két .cs fájlt state name + "Receiver" és state name + "Events" néven. Ezeknek a fájloknak az elnevezését belsőleg kell figyelembe venni, és az állapot neve + Esemény/Fogadó konvenciót kell követnie.

    Billentyűzetállapot-szkriptek

  3. A fájl tartalmáról további információt a KeyboardEvents.cs és a KeyboardReceiver.cs fájlban talál. Az új eseménykonfigurációs osztályoknak a-tól BaseInteractionEventConfiguration , az új eseményérzékelő osztályoknak pedig a-tól BaseEventReceiverkell örökölniük. A Billentyűzet állapot beállítására vonatkozó példák a CustomStateSettingExample.cs fájlban találhatók.

  4. Adja hozzá az állapotot az Interaktív elemhez az állapotnév használatával. Az állapot neve felismerhető, ha léteznek eseménykonfigurációs és eseményérzékelő-fájlok. Az egyéni eseménykonfigurációs fájl tulajdonságainak meg kell jelennie az ellenőrben.

    Egyéni állapot hozzáadása az interaktív elemhezAz interaktív elemben felismert egyéni állapot

  5. Az eseménykonfigurációra és az eseményérzékelő fájlokra az alábbi elérési utakon talál további példákat:

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

Példakép

Az Interactive Element + State Visualizer példajelenete itt található: MRTK\SDK\Experimental\InteractiveElement\Examples\InteractiveElementExampleScene.unity

Példajelenet interaktív elemekkel és állapotábrázolóval

Tömöríthető gomb

A példajelenet tartalmazza a és CompressableButtonTogglenevű CompressableButton előfabsokat, amelyek tükrözik a PressableButtonHoloLens2 gombok viselkedését, amelyek az Interaktív elem és az Állapotábrázoló használatával lettek létrehozva. Az CompressableButton összetevő jelenleg a és BaseInteractiveElementaz PressableButton + PressableButtonHoloLens2 alaposztály kombinációja.

Állapotábrázoló [Kísérleti]

A State Visualizer összetevő animációkat ad hozzá egy objektumhoz a csatolt interaktív elem összetevőben meghatározott állapotok alapján. Ez az összetevő animációs objektumokat hoz létre, elhelyezi őket a MixedRealityToolkit.Generated mappában, és lehetővé teszi az egyszerűsített animációs kulcskeret-beállítást animálható tulajdonságok céljáték-objektumhoz való hozzáadásával. Az állapotok közötti animációs áttűnés engedélyezéséhez létrejön egy Animator Controller objektum, és létrejön egy alapértelmezett állapotgép a társított paraméterekkel és az állapotáttűnésekkel. Az állapotgép megtekinthető a Unity Animator ablakában.

Állapotábrázoló és Unity animációs rendszer

A State Visualizer jelenleg a Unity animációs rendszert használja.

Amikor lenyomja az Új animációk létrehozása gombot az Állapotábrázolóban, a rendszer új animációklip-objektumokat hoz létre az Interaktív elem állapotnevei alapján, és a MixedRealityToolkit.Generated mappába kerül. Az egyes állapottárolók Animációklip tulajdonsága a társított animációs klipre van állítva.

Animációs klipek az állapotábrázoló összetevőben

Animator State Machine is létrejön, hogy kezelje az animációs klipek közötti zökkenőmentes átmeneteket. Alapértelmezés szerint az állapotgép a Bármely állapotot használja az interaktív elem bármely állapota közötti átmenetek engedélyezéséhez.

Az animátorban aktivált állapotábrázolók is létrejönnek az egyes állapotokhoz, az eseményindító paramétereit pedig az Állapotábrázoló használja az animáció aktiválásához.

Unity állapotgép

A Runtime korlátozásai

Az Állapotábrázolót hozzá kell adni egy objektumhoz az Inspector használatával, és nem adhatók hozzá szkripttel. Az AnimatorStateMachine/AnimationController tulajdonságot módosító tulajdonságok egy szerkesztőnévtérben (UnityEditor.Animations) találhatók, amely az alkalmazás létrehozásakor törlődik.

Az Állapotábrázoló használata

  1. Kocka létrehozása

  2. Interaktív elem csatolása

  3. Állapotábrázoló csatolása

  4. Válassza az Új animációk létrehozása elemet

    Új animációs klipek létrehozása

    Létrehozott animációs klipek megjelenítése a vizualizációban és az interaktív elemösszetevőkben

  5. A Fókusz állapottárolóban válassza a Cél hozzáadása lehetőséget

    Állapotábrázoló cél hozzáadása

  6. Az aktuális játékobjektum húzása a célmezőre

    Állapotábrázoló célbeállítása

  7. A Kocka animálható tulajdonságai hajtogatás megnyitása

  8. Válassza az Animatable tulajdonság legördülő menüt, és válassza a Szín lehetőséget

    Állapotábrázoló színének beállítása

  9. Válassza a Szín animálható tulajdonság hozzáadása lehetőséget

    A vizualizáció színét animálható tulajdonság kiválasztása

  10. Szín kiválasztása

    Vizualizáció színének kiválasztása a színkörből

  11. Nyomja le a Play billentyűt, és figyelje meg az átmeneti színváltozást

    Átmeneti színváltozási példa virtuális kézhasználattal

Animálható tulajdonságok

Az Animatable Properties (Animatable Properties) elsődleges célja az animációs clip keyframe beállítás egyszerűsítése. Ha egy felhasználó ismeri a Unity animációs rendszert, és inkább közvetlenül beállítaná a kulcskereteket a létrehozott animációs klipeken, akkor egyszerűen nem adhat animálható tulajdonságokat egy célobjektumhoz, és nem nyithatja meg a klipet a Unity Animáció ablakában (Windows > Animáció animáció > ).

Ha animálható tulajdonságokat használ az animációhoz, a görbe típusa a EaseInOut értékre van állítva.

Aktuális animálható tulajdonságok:

Eltolás méretezése

Az Eltolás méretezése animálható tulajdonság az objektum aktuális skáláját veszi fel, és hozzáadja a definiált eltolást.

Eltolás méretezése virtuális kézhasználattal

Pozíció eltolása

A Position Offset Animatable tulajdonság az objektum aktuális pozícióját veszi fel, és hozzáadja a definiált eltolást.

Pozícióeltolódás virtuális kézművelettel

Szín

A Szín animálható tulajdonság az anyag fő színét jelöli, ha az anyagnak van fő színtulajdonsága. Ez a tulajdonság animálja a tulajdonságot material._Color .

Fókuszszín módosítása virtuális kézhasználattal

Árnyékoló színe

A Shader Color Animatable tulajdonság egy szín típusú árnyékoló tulajdonságra utal. Minden árnyékolótulajdonsághoz meg kell adni egy tulajdonságnevet. Az alábbi gif egy Fill_Color nevű árnyékolószín-tulajdonság animálását mutatja be, amely nem a fő anyagszín. Figyelje meg az anyagvizsgáló változó értékeit.

Színárnyalat virtuális kézhasználattal

Shader Float

A Shader Float Animatable tulajdonság lebegőpontos típusú árnyékolótulajdonságra utal. Minden árnyékolótulajdonsághoz meg kell adni egy tulajdonságnevet. Az alábbi gif-ben figyelje meg a Fémes tulajdonság anyagfelügyelőjének változó értékeit.

Shader float with virtual hand interaction

Shader Vector

A Shader Vector Animatable tulajdonság a Vector4 típusú shader tulajdonságra hivatkozik. Minden árnyékolótulajdonsághoz meg kell adni egy tulajdonságnevet. Az alábbi gif-ben figyelje meg a Tiling (Main Tex_ST) tulajdonság anyagfelügyelőjének változó értékeit.

Shader vektor virtuális kéz interakcióval

Animatable Shader tulajdonságnevek keresése

  1. Navigáljon az Animáció > ablakhoz >

  2. Győződjön meg arról, hogy az Állapotábrázolóval rendelkező objektum ki van jelölve a hierarchiában

  3. Animációs klip kijelölése az Animáció ablakban

  4. Válassza az Add Property (Tulajdonság hozzáadása) lehetőséget, majd nyissa meg a Mesh Renderer foldout (Mesh Renderer foldout) lehetőséget.

    Animációs tulajdonság hozzáadása az Animator ablakban

  5. Ez a lista az animálható tulajdonságnevek nevét tartalmazza

    Mesh renderer animation properties in the Animator window

Lásd még