Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein vereinfachter zentraler Einstiegspunkt in das MRTK-Eingabesystem. Enthält Zustandsverwaltungsmethoden, Ereignisverwaltung und die Zustandseinstellungslogik für Kerninteraktionszustände.
Interactive Element ist ein experimentelles Feature, das in Unity 2019.3 und höher unterstützt wird, da es eine neue Funktion in Unity 2019.3 nutzt: Serialisierungsreferenz.
Interaktive Elementprüfung
Während des Wiedergabemodus liefert der Interaktive Elementinspektor visuelles Feedback, das angibt, ob der aktuelle Zustand aktiv ist oder nicht. Wenn ein Zustand aktiv ist, wird er mit einer Cyan-Farbe hervorgehoben. Wenn der Zustand nicht aktiv ist, wird die Farbe nicht geändert. Die Zahlen neben den Zuständen im Inspektor sind die Zustandswerte. Wenn der Zustand aktiv ist, ist der Wert 1, und wenn der Zustand nicht aktiv ist, ist der Wert 0.
Kernzustände
Interactive Element enthält Kernzustände und unterstützt das Hinzufügen von benutzerdefinierten Zuständen. Bei einem Kernzustand handelt es sich um einen Zustand, für den die Zustandseinstellungslogik bereits in BaseInteractiveElementdefiniert ist. Im Folgenden finden Sie eine Liste der aktuellen eingabegesteuerten Kernzustände:
Aktuelle Kernzustände
Nah- und Ferninteraktionskernzustände:
Near Interaction Core-Zustände:
Hauptzustände der Ferninteraktion:
Andere Kernzustände:
Hinzufügen eines Kernzustands über den Inspektor
Navigieren Sie im Inspektor für interaktives Element zu Kernstatus hinzufügen .
Wählen Sie die Schaltfläche Zustand auswählen aus, um den hinzuzufügenden Kernzustand auszuwählen. Die Zustände im Menü sind nach Interaktionstyp sortiert.
Öffnen Sie das Foldout Ereigniskonfiguration, um die Ereignisse und Eigenschaften anzuzeigen, die dem Zustand zugeordnet sind.
Hinzufügen eines Kernzustands per Skript
Verwenden Sie die AddNewState(stateName) -Methode, um einen Kernzustand hinzuzufügen. Verwenden Sie die Enumeration, um eine Liste der verfügbaren Kernzustandsnamen zu erhalten CoreInteractionState .
// Add by name or add by CoreInteractionState enum to string
interactiveElement.AddNewState("SelectFar");
interactiveElement.AddNewState(CoreInteractionState.SelectFar.ToString());
Zustandsinterne Struktur
Die Zustände in Interactive Element sind vom Typ InteractionState. Ein InteractionState enthält die folgenden Eigenschaften:
- Name: Der Name des Zustands.
- Wert: Der Zustandswert. Wenn der Zustand aktiviert ist, ist der Zustandswert 1. Wenn der Zustand deaktiviert ist, ist der Zustandswert 0.
- Aktiv: Gibt an, ob der Zustand derzeit aktiv ist. Der Wert für die Active-Eigenschaft ist true, wenn der Zustand aktiviert ist, false, wenn der Zustand deaktiviert ist.
-
Interaktionstyp: Der Interaktionstyp eines Zustands ist der Typ der Interaktion, für die ein Zustand vorgesehen ist.
-
None: Unterstützt keine Form der Eingabeinteraktion. -
Near: Unterstützung nahezuer Interaktion. Eingaben werden in der Nähe einer Interaktion betrachtet, wenn eine artikulierte Hand direkten Kontakt mit einem anderen Spielobjekt hat, d. h. die Position, in der sich die artikulierte Hand in der Nähe der Position des Spielobjekts im Weltraum befindet. -
Far: Unterstützung der Ferninteraktion. Die Eingabe wird als Ferninteraktion betrachtet, wenn kein direkter Kontakt mit dem Spielobjekt erforderlich ist. Beispielsweise wird die Eingabe über Controllerstrahl oder Anvisieren als Ferninteraktionseingabe betrachtet. -
NearAndFar: Umfasst die Unterstützung von Nah- und Ferninteraktionen. -
Other: Unterstützung für eine zeigerunabhängige Interaktion.
-
- Ereigniskonfiguration: Die Ereigniskonfiguration für einen Zustand ist der Einstiegspunkt des serialisierten Ereignisprofils.
Alle diese Eigenschaften werden intern in der State Manager in Interactive Element enthaltenen festgelegt. Verwenden Sie zum Ändern von Zuständen die folgenden Hilfsmethoden:
Hilfsmethoden für Zustandseinstellungen
// 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");
Das Abrufen der Ereigniskonfiguration eines Zustands ist spezifisch für den Zustand selbst. Jeder Kernzustand verfügt über einen bestimmten Ereigniskonfigurationstyp, der unten in den Abschnitten beschrieben wird, die die einzelnen Kernzustände beschreiben.
Hier ist ein generalisiertes Beispiel für das Abrufen der Ereigniskonfiguration eines Zustands:
// 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");
Standardmäßiger Status
Der Standardzustand ist für ein interaktives Element immer vorhanden. Dieser Zustand ist nur aktiv, wenn alle anderen Zustände nicht aktiv sind. Wenn ein anderer Zustand aktiv wird, wird der Standardzustand intern auf Off festgelegt.
Ein interaktives Element wird mit den Status Default und Focus initialisiert, die in der Statusliste vorhanden sind. Der Standardzustand muss immer in der Statusliste vorhanden sein.
Abrufen von Standardzustandsereignissen
Ereigniskonfigurationstyp für den Standardzustand: 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");
});
Fokuszustand
Der Fokuszustand ist ein Nah- und Ferninteraktionszustand, der als Mixed Reality-Äquivalent zum Zeigen betrachtet werden kann. Der Unterscheidungsfaktor zwischen Nah- und Ferninteraktion für den Fokuszustand ist der aktuelle aktive Zeigertyp. Wenn der Zeigertyp für den Fokuszustand der Poke-Zeiger ist, wird die Interaktion als interaktionsnah betrachtet. Wenn der primäre Zeiger nicht der Poke-Zeiger ist, wird die Interaktion als Ferninteraktion betrachtet. Der Fokuszustand ist standardmäßig im interaktiven Element vorhanden.
Fokuszustandsverhalten
Fokuszustandsinspektor
Abrufen von Fokuszustandsereignissen
Ereigniskonfigurationstyp für den Fokuszustand: 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");
});
Verhalten von "Focus Near" und "Focus Far"
Fokus in Der Nähe des Zustands
Der Status "Focus Near" wird festgelegt, wenn ein Fokusereignis ausgelöst wird, und der primäre Zeiger ist der Poke-Zeiger, ein Hinweis auf eine Naheinteraktion.
Fokus near State Behavior
Fokus in der Nähe des Zustandsinspektors
Abrufen von FocusNear State-Ereignissen
Ereigniskonfigurationstyp für den FocusNear-Zustand: 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");
});
Fokus Far State
Der Status "Fokus weit" wird festgelegt, wenn der primäre Zeiger nicht der Poke-Zeiger ist. Beispielsweise werden der Standardstrahlzeiger des Controllers und der GGV-Zeiger (Anvisieren, Geste, Stimme) als Ferninteraktionszeiger betrachtet.
Fokus-Fernzustandsverhalten
Fokus-Fern-Inspektor-Komponente
Abrufen von Fokus-Fernzustandsereignissen
Ereigniskonfigurationstyp für den FocusFar-Status: 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");
});
Touchzustand
Der Touchzustand ist ein Nahezu-Interaktionszustand, der festgelegt wird, wenn eine artikulierte Hand das Objekt direkt berührt. Eine direkte Berührung bedeutet, dass der Zeigefinger der artikulierten Hand sehr nah an der Weltposition des Objekts liegt. Standardmäßig wird eine NearInteractionTouchableVolume Komponente an das Objekt angefügt, wenn der Zustandsliste touch hinzugefügt wird. Das Vorhandensein einer NearInteractionTouchableVolume - oder NearInteractionTouchable -Komponente ist erforderlich, um Touchereignisse zu erkennen. Der Unterschied zwischen NearInteractionTouchableVolume und NearInteractionTouchable besteht darin, dass NearInteractionTouchableVolume eine Berührung basierend auf dem Collider des Objekts erkennt und NearInteractionTouchabledie Berührung innerhalb eines definierten Bereichs einer Ebene erkennt.
Verhalten des Touchzustands
Touchzustandsinspektor
Abrufen von Touchzustandsereignissen
Ereigniskonfigurationstyp für den Touchzustand: 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");
});
Wählen Sie Far State aus.
Der Zustand "Weit auswählen" ist die IMixedRealityPointerHandler angezeigte. Bei diesem Zustand handelt es sich um einen Ferninteraktionszustand, der entfernte Interaktionsklicks (Luft-Tippen) erkennt und durch die Verwendung von Ferninteraktionszeigern wie dem Standardmäßigen Controllerstrahlzeiger oder dem GGV-Zeiger hält. Der Zustand "Weit auswählen" verfügt unter dem Ereigniskonfigurations-Foldout über eine Option namens Global. Wenn Global true ist, wird als IMixedRealityPointerHandler globaler Eingabehandler registriert. Der Fokus auf ein Objekt ist nicht erforderlich, um Eingabesystemereignisse auszulösen, wenn ein Handler als global registriert ist. Wenn ein Benutzer beispielsweise wissen möchte, wann immer die Air-Tap/Select-Geste unabhängig vom Objekt im Fokus ausgeführt wird, legen Sie auf true fest Global .
Wählen Sie Far State Behavior (Verhalten des fernen Zustands
Wählen Sie die Komponente "Far State Inspector Select far" (Fernen Zustandsinspektor
aus.
Abrufen von Select Far State-Ereignissen
Ereigniskonfigurationstyp für selectFar State: 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");
});
Geklickter Zustand
Der Zustand "Geklickt" wird standardmäßig durch einen Ferninteraktionsklick (Select Far state) ausgelöst. Dieser Zustand wird intern auf Ein umgeschaltet, ruft das OnClicked-Ereignis auf und wird dann sofort auf "Deaktiviert" umgeschaltet.
Hinweis
Das visuelle Feedback im Inspektor basierend auf der Zustandsaktivität ist für den Zustand Geklickt nicht vorhanden, da er sofort aktiviert und dann deaktiviert wird.
Verhalten des geklickten
.
Klicken auf Zustandsinspektor
.
Beispiel für den Zustand "Nah- und Fernklick"
Der Angeklickte Zustand kann mithilfe der interactiveElement.TriggerClickedState() -Methode über zusätzliche Einstiegspunkte ausgelöst werden. Wenn ein Benutzer z. B. eine Interaktion nahe der Interaktion möchte, um auch einen Klick auf ein Objekt auszulösen, würde er die TriggerClickedState() -Methode als Listener im Touchzustand hinzufügen.
Get Clicked State-Ereignisse
Ereigniskonfigurationstyp für den Zustand , auf den geklickt wurde: ClickedEvents
ClickedEvents clickedEvent = interactiveElement.GetStateEvents<ClickedEvents>("Clicked");
clickedEvent.OnClicked.AddListener(() =>
{
Debug.Log($"{gameObject.name} Clicked");
});
Ein- und Aus-Zustand umschalten
Die Zustände Ein und Aus umschalten sind ein Paar, und beide müssen für das Umschaltverhalten vorhanden sein. Standardmäßig werden die Zustände Ein und Aus umschalten durch einen Entfernten Interaktionsklick (Select Far state) ausgelöst. Standardmäßig ist der Zustand "Aus umschalten" beim Start aktiv, was bedeutet, dass der Umschalter auf "Aus" initialisiert wird. Wenn ein Benutzer möchte, dass der Zustand Ein umschalten beim Start aktiv ist, legen Sie im Zustand Ein umschalten auf true fest IsSelectedOnStart .
ToggleOn und Toggle Off State Behavior
ToggleOn und Toggle Off State Inspector
Beispiel für Nah- und Fern-Umschaltzustände
Ähnlich wie beim Zustand Geklickt kann die Einstellung zum Umschalten des Zustands mithilfe der interactiveElement.SetToggleStates() -Methode mehrere Einstiegspunkte aufweisen. Wenn ein Benutzer beispielsweise Toucheingabe als zusätzlichen Einstiegspunkt zum Festlegen der Umschaltzustände verwenden möchte, fügt er die SetToggleStates() -Methode einem der Ereignisse im Touch-Zustand hinzu.
Abrufen von Ein- und Aus-Zustandsereignissen
Ereigniskonfigurationstyp für den ToggleOn-Zustand: ToggleOnEvents
Ereigniskonfigurationstyp für den ToggleOff-Zustand: 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");
});
Speech-Schlüsselwortstatus
Der Speech-Schlüsselwortzustand lauscht auf die schlüsselwörter, die im Mixed Reality Speech-Profil definiert sind. Alle neuen Schlüsselwort (keyword) MÜSSEN vor der Laufzeit im Sprachbefehlsprofil registriert werden (schritte unten).
Speech Keyword State Behavior
Speech Keyword State Inspector
Hinweis
Der Speech-Schlüsselwortzustand wurde im Editor durch Drücken der F5-Taste im obigen GIF ausgelöst. Das Einrichten von Sprachtests im Editor wird in den folgenden Schritten beschrieben.
Registrieren eines Sprachbefehls/Schlüsselworts
Auswählen des MixedRealityToolkit-Spielobjekts
Wählen Sie Kopieren und Anpassen des aktuellen Profils aus.
Navigieren Sie zum Abschnitt Eingabe, und wählen Sie Klonen aus, um die Änderung des Eingabeprofils zu aktivieren.
Scrollen Sie im Eingabeprofil nach unten zum Abschnitt Speech, und klonen Sie das Sprachprofil.
Wählen Sie "Add a New Speech Command" (Neuen Sprachbefehl hinzufügen) aus.
Geben Sie den neuen Schlüsselwort (keyword) ein. Optional: Ändern Sie keyCode in F5 (oder einen anderen KeyCode), um Tests im Editor zu ermöglichen.
Zurück zum Schlüsselwort-Zustandsinspektor für interaktive Elemente, und wählen Sie Schlüsselwort hinzufügen aus.
Geben Sie den neuen Schlüsselwort (keyword) ein, der soeben im Sprachprofil registriert wurde.
Um den Status des Speech-Schlüsselworts im Editor zu testen, drücken Sie den keyCode, der in Schritt 6 (F5) definiert wurde, um das Spracherkennungsereignis Schlüsselwort (keyword) zu simulieren.
Abrufen von Speech-Schlüsselwortzustandsereignissen
Ereigniskonfigurationstyp für den SpeechKeyword-Status: 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");
});
Benutzerdefinierte Zustände
Erstellen eines benutzerdefinierten Zustands über den Inspektor
Der über den Inspektor erstellte benutzerdefinierte Zustand wird mit der Standardzustandsereigniskonfiguration initialisiert. Die Standardereigniskonfiguration für einen benutzerdefinierten Zustand ist vom Typ StateEvents und enthält die Ereignisse OnStateOn und OnStateOff.
Navigieren Sie im Inspektor für interaktives Element zu Benutzerdefinierten Zustand erstellen .
Geben Sie den Namen des neuen Zustands ein. Dieser Name muss eindeutig sein und darf nicht mit den vorhandenen Kernzuständen übereinstimmen.
Wählen Sie Zustandsname festlegen aus, um der Statusliste hinzuzufügen.
Dieser benutzerdefinierte Zustand wird mit der Standardereigniskonfiguration
StateEventsinitialisiert, die dieOnStateOnEreignisse undOnStateOffenthält. Informationen zum Erstellen einer benutzerdefinierten Ereigniskonfiguration für einen neuen Zustand finden Sie unter Erstellen eines benutzerdefinierten Zustands mit einer benutzerdefinierten Ereigniskonfiguration.
Erstellen eines benutzerdefinierten Zustands per Skript
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");
});
Erstellen eines benutzerdefinierten Zustands mit einer benutzerdefinierten Ereigniskonfiguration
Beispieldateien für einen benutzerdefinierten Zustand namens Tastatur finden Sie hier: MRTK\SDK\Experimental\InteractiveElement\Examples\Scripts\CustomStateExample
Die folgenden Schritte durchlaufen ein vorhandenes Beispiel zum Erstellen einer benutzerdefinierten Zustandsereigniskonfiguration und Empfängerdateien.
Stellen Sie sich einen Zustandsnamen vor. Dieser Name muss eindeutig sein und darf nicht mit den vorhandenen Kernzuständen übereinstimmen. In diesem Beispiel lautet der Statusname Tastatur.
Erstellen Sie zwei .cs Dateien mit dem Namen Zustandsname + "Empfänger" und Zustandsname + "Ereignisse". Die Benennung dieser Dateien wird intern berücksichtigt und muss dem Zustandsnamen und der Ereignis-/Empfängerkonvention folgen.
Weitere Informationen zum Dateiinhalt finden Sie in den KeyboardEvents.cs- und KeyboardReceiver.cs-Dateien. Neue Ereigniskonfigurationsklassen müssen von erben
BaseInteractionEventConfiguration, und neue Ereignisempfängerklassen müssen vonBaseEventReceivererben. Beispiele für die Zustandseinstellung für den Tastaturzustand befinden sich in derCustomStateSettingExample.csDatei.Fügen Sie dem interaktiven Element den Zustand mithilfe des Statusnamens hinzu. Der Statusname wird erkannt, wenn Ereigniskonfigurations- und Ereignisempfängerdateien vorhanden sind. Die Eigenschaften in der benutzerdefinierten Ereigniskonfigurationsdatei sollten im Inspektor angezeigt werden.
Weitere Beispiele für Ereigniskonfigurations- und Ereignisempfängerdateien finden Sie in den Dateien unter diesen Pfaden:
- MRTK\SDK\Experimental\InteractiveElement\InteractiveElement\Events\EventConfigurations
- MRTK\SDK\Experimental\InteractiveElement\InteractiveElement\Events\EventReceivers
Beispielszene
Die Beispielszene für interactive Element + State Visualizer befindet sich hier: MRTK\SDK\Experimental\InteractiveElement\Examples\InteractiveElementExampleScene.unity
Komprimierbare Schaltfläche
Die Beispielszene enthält Prefabs mit den Namen CompressableButton und CompressableButtonToggle, diese Prefabs Spiegel das Verhalten der PressableButtonHoloLens2 Schaltflächen, die mithilfe von Interactive Element und der Zustandsschnellansicht erstellt werden.
Die CompressableButton Komponente ist derzeit eine Kombination von PressableButton + PressableButtonHoloLens2 mit BaseInteractiveElementals Basisklasse.
Zustandsschnellansicht [Experimentell]
Die Komponente Zustandsschnellansicht fügt Animationen zu einem Objekt hinzu, die auf den in einer verknüpften Interactive Element-Komponente definierten Zuständen basieren. Diese Komponente erstellt Animationsobjekte, platziert sie im Ordner MixedRealityToolkit.Generated und ermöglicht eine vereinfachte Einstellung des Animations-Keyframes durch Hinzufügen von Animatable-Eigenschaften zu einem Zielspielobjekt. Um Animationsübergänge zwischen Zuständen zu aktivieren, wird ein AnimatorController-Objekt erstellt, und ein Standardzustandsautomat wird mit zugeordneten Parametern und allen Zustandsübergängen generiert. Der Zustandsautomat kann im Animator-Fenster von Unity angezeigt werden.
Zustandsschnellansicht und Unity-Animationssystem
Die Zustandsschnellansicht nutzt derzeit das Unity-Animationssystem.
Wenn die Schaltfläche Neue Animationsclips generieren in der Zustandsschnellansicht gedrückt wird, werden neue Animationsclipobjekte basierend auf den Zustandsnamen in Interactive Element generiert und im Ordner MixedRealityToolkit.Generated platziert. Die Animationsclip-Eigenschaft in jedem Zustandscontainer wird auf den zugeordneten Animationsclip festgelegt.
Ein Animatorzustandsautomat wird auch generiert, um reibungslose Übergänge zwischen Animationsclips zu verwalten. Standardmäßig verwendet der Zustandsautomat den Beliebigen Zustand , um Übergänge zwischen einem beliebigen Zustand in Interactive Element zuzulassen.
Zustandsschnellansichten, die im Animator ausgelöst werden, werden auch für jeden Zustand generiert. Die Triggerparameter werden in der Zustandsschnellansicht verwendet, um eine Animation auszulösen.
Laufzeitbeschränkungen
Die Zustandsschnellansicht muss einem Objekt über den Inspector hinzugefügt werden und kann nicht über ein Skript hinzugefügt werden. Die Eigenschaften, die animatorStateMachine/AnimationController ändern, sind in einem Editor-Namespace (UnityEditor.Animations) enthalten, der beim Erstellen der App entfernt wird.
Verwenden der Zustandsschnellansicht
Erstellen eines Cubes
Interaktives Element anfügen
Anfügen von Zustandsschnellansichten
Wählen Sie Neue Animationsclips generieren aus.
Wählen Sie im Container Fokuszustand die Option Ziel hinzufügen aus.
Ziehen des aktuellen Spielobjekts in das Zielfeld
Öffnen des Faltungsklapps für cube animierbare Eigenschaften
Wählen Sie das Dropdownmenü Animatable-Eigenschaft und dann Farbe aus.
Wählen Sie Add the Color Animatable Property (Color Animatable-Eigenschaft hinzufügen) aus.
Auswählen einer Farbe
Drücken Sie "Wiedergabe", und beobachten Sie die Übergangsfarbänderung.
Animierbare Eigenschaften
Der Hauptzweck der animierbaren Eigenschaften besteht darin, die Keyframeeinstellung für Animationsclips zu vereinfachen. Wenn ein Benutzer mit dem Unity-Animationssystem vertraut ist und es vorzieht, Keyframes direkt für die generierten Animationsclips festzulegen, kann er einfach keine Animatable-Eigenschaften zu einem Zielobjekt hinzufügen und den Clip im Animationsfenster von Unity (Windows-Animation >> ) öffnen.
Wenn Sie die Animatable-Eigenschaften für Animationen verwenden, wird der Kurventyp auf EaseInOut festgelegt.
Aktuelle animierbare Eigenschaften:
Skalierungsoffset
Die Scale Offset Animatable-Eigenschaft übernimmt die aktuelle Skalierung des Objekts und fügt den definierten Offset hinzu.
Positionsoffset
Die Position Offset Animatable-Eigenschaft übernimmt die aktuelle Position des Objekts und fügt den definierten Offset hinzu.
Farbe
Die Color Animatable-Eigenschaft stellt die Standard Farbe eines Materials dar, wenn das Material über eine Standard Farbeigenschaft verfügt. Diese Eigenschaft animiert die material._Color Eigenschaft.
Shaderfarbe
Die Shader Color Animatable-Eigenschaft bezieht sich auf eine Shadereigenschaft vom Typ Color. Für alle Shadereigenschaften ist ein Eigenschaftsname erforderlich. Das folgende GIF zeigt das Animieren einer Shaderfarbeigenschaft namens Fill_Color, die nicht der Standard Materialfarbe entspricht. Beobachten Sie die sich ändernden Werte im Materialinspektor.
Shader Float
Die Shader Float Animatable-Eigenschaft bezieht sich auf eine Shadereigenschaft vom Typ float. Für alle Shadereigenschaften ist ein Eigenschaftsname erforderlich. Beobachten Sie im gif unten die sich ändernden Werte im Materialinspektor für die Metallic-Eigenschaft.
Shadervektor
Die Shader Vector Animatable-Eigenschaft bezieht sich auf eine Shadereigenschaft vom Typ Vector4. Für alle Shadereigenschaften ist ein Eigenschaftsname erforderlich. Beachten Sie in der gif-Datei unten die sich ändernden Werte im Materialinspektor für die Eigenschaft Tiling (Main Tex_ST).
Gewusst wie: Suchen nach animierbaren Shadereigenschaftennamen
Navigieren Sie zu Fensteranimation >> .
Stellen Sie sicher, dass das Objekt mit der Zustandsschnellansicht in der Hierarchie ausgewählt ist.
Auswählen eines beliebigen Animationsclips im Animationsfenster
Wählen Sie Eigenschaft hinzufügen aus, und öffnen Sie die Gitterrenderer-Ausklappung.
Diese Liste enthält die Namen aller Animatable-Eigenschaftsnamen.