Interaktives Element [Experimentell] — MRTK2
Ein vereinfachter zentralisierter Einstiegspunkt zum 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 Funktion nutzt, die neu in Unity 2019.3: Serialisieren referenz ist.
Interaktiver Elementinspektor
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 Zyanfarbe 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, 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, in dem bereits die Zustandseinstellungslogik in BaseInteractiveElement
definiert ist. Im Folgenden finden Sie eine Liste der aktuellen eingabegesteuerten Kernzustände:
Aktueller Kernstatus
Nah- und Ferninteraktionskernzustände:
Near Interaction Core-Zustände:
Ferninteraktions-Kernzustände:
Andere Kernzustände:
Hinzufügen eines Kernzustands über den Inspektor
Navigieren Sie im Inspektor für interaktives Element zu Kernzustand 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 Ausklappen der 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 für eine Liste der verfügbaren Namen des Kernzustands die CoreInteractionState
Enumeration.
// 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 Statuswert 1. Wenn der Zustand deaktiviert ist, ist der Statuswert 0.
- Aktiv: Gibt an, ob der Status aktuell 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. Eingabe wird als interaktionsnah betrachtet, wenn eine artikulierte Hand direkten Kontakt mit einem anderen Spielobjekt hat, d. h. die Position der artikulierten Hand ist nahe an der Position des Spielobjekts im Weltraum.Far
: Unterstützung der Ferninteraktion. Eingaben gelten als weit entfernte Interaktion, wenn kein direkter Kontakt mit dem Spielobjekt erforderlich ist. Beispielsweise wird die Eingabe über Controllerstrahl oder Blick als Ferninteraktionseingabe betrachtet.NearAndFar
: Umfasst die Unterstützung von Nah- und Ferninteraktionen.Other
: Unterstützung der unabhängigen Interaktion mit Zeigern.
- 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 bezieht sich auf den Zustand selbst. Jeder Kernzustand verfügt über einen bestimmten Ereigniskonfigurationstyp, der unten in den Abschnitten beschrieben wird, die jeden Kernzustand 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");
Standardzustand
Der Standardzustand ist in einem interaktiven 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 deaktiviert festgelegt.
Ein interaktives Element wird mit den Status Standard und Fokus 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 Hovern 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 weit entfernte Interaktion betrachtet. Der Fokuszustand ist standardmäßig im interaktiven Element vorhanden.
Fokuszustand Verhalten
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 Fokus-Near-Zustand wird festgelegt, wenn ein Fokusereignis ausgelöst wird, und der primäre Zeiger ist der Poke-Zeiger, ein Hinweis auf eine nahe Interaktion.
Focus 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 Fokus far-Zustand wird festgelegt, wenn der primäre Zeiger nicht der Poke-Zeiger ist. Beispielsweise werden der Standardstrahlzeiger des Controllers und der GGV-Zeiger (Blick, Geste, Stimme) als weit entfernte Interaktionszeiger betrachtet.
Focus Far State Behavior
Fokus Far State Inspector
Abrufen von Fokus-Fernzustandsereignissen
Ereigniskonfigurationstyp für den FocusFar-Zustand: 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 Touch-Zustand ist ein Nahezu-Interaktionszustand, der festgelegt wird, wenn eine handgelenkte Hand das Objekt direkt berührt. Eine direkte Berührung bedeutet, dass sich der Zeigefinger der Hand sehr nahe an der Weltposition des Objekts befindet. 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 erkannt wird und NearInteractionTouchable
die Berührung innerhalb eines definierten Bereichs einer Ebene erkannt wird.
Touchzustandsverhalten
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");
});
Fernen Zustand auswählen
Der Zustand "Weit auswählen" ist die IMixedRealityPointerHandler
angezeigte. Bei diesem Zustand handelt es sich um einen fernen Interaktionszustand, der das Klicken der fernen Interaktion (Luft tippen) erkennt und durch die Verwendung von fernen Interaktionszeigern wie dem Standard-Controllerstrahlzeiger oder dem GGV-Zeiger hält. Der Zustand "Weit auswählen" enthält eine Option unter dem Ausklappungsklappout der Ereigniskonfiguration mit dem Namen Global
. Wenn Global
true ist, wird der IMixedRealityPointerHandler
als 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 Luft tippen/auswählen-Geste unabhängig vom Objekt im Fokus ausgeführt wird, legen Sie auf true fest Global
.
Fernzustandsverhalten auswählen
Wählen Sie Far State Inspector (Far State Inspector) aus.
Abrufen ausgewählter Fernzustandsereignisse
Ereigniskonfigurationstyp für den SelectFar-Zustand: 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 Status Clicked wird standardmäßig durch einen Ferninteraktionsklick (Far-Zustand auswählen) ausgelöst. Dieser Zustand wird intern auf Ein aktiviert, ruft das OnClicked-Ereignis auf und wird dann sofort auf deaktiviert.
Hinweis
Das visuelle Feedback im Inspektor basierend auf der Zustandsaktivität ist für den Zustand Geklickt nicht vorhanden, da es sofort aktiviert und dann deaktiviert wird.
Geklicktes Zustandsverhalten
Klicken Sie auf Zustandsinspektor.
Beispiel für "Nah- und Fern"-Zustand
Der angeklickte Zustand kann mithilfe der interactiveElement.TriggerClickedState()
-Methode über zusätzliche Einstiegspunkte ausgelöst werden. Wenn ein Benutzer beispielsweise eine berührungsnahe Interaktion wünscht, um auch einen Klick auf ein Objekt auszulösen, fügt er die TriggerClickedState()
Methode als Listener im Touchzustand hinzu.
Get Clicked State Events (Get Clicked State Events)
Ereigniskonfigurationstyp für den Angeklickten Zustand: ClickedEvents
ClickedEvents clickedEvent = interactiveElement.GetStateEvents<ClickedEvents>("Clicked");
clickedEvent.OnClicked.AddListener(() =>
{
Debug.Log($"{gameObject.name} Clicked");
});
Ein- und Ausschalten des Zustands
Die Zustände Ein- und Ausschalten sind ein Paar, und beide müssen für das Umschaltverhalten vorhanden sein. Standardmäßig werden die Zustände Ein- und Ausschalten durch einen Klick mit der fernen Interaktion ausgelöst (Far-Zustand auswählen). Standardmäßig ist der Zustand "Aus umschalten" beim Start aktiv, was bedeutet, dass der Umschalter mit deaktiviert initialisiert wird. Wenn ein Benutzer möchte, dass der Zustand "Ein umschalten" beim Start aktiv sein soll, legen Sie im Zustand Ein umschalten auf true fest IsSelectedOnStart
.
Ein- und Ausschalten des Zustandsverhaltens
Ein- und Ausschalten der Zustandsinspektor-Komponente
Beispiel für Nah- und Fern-Umschaltzustände
Ähnlich wie beim Zustand Geklickt kann die Einstellung zum Umschalten des Zustands mehrere Einstiegspunkte mit der interactiveElement.SetToggleStates()
-Methode aufweisen. Wenn ein Benutzer beispielsweise touch 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.
Ein- und Ausschalten von 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-Schlüsselwortstatusverhalten
Speech-Schlüsselwortzustandsinspektor
Hinweis
Der Speech-Schlüsselwortzustand wurde im Editor durch Drücken der F5-Taste in der gif oben ausgelöst. Die Einrichtung in Editortests für Sprache finden Sie in den folgenden Schritten.
Registrieren eines Sprachbefehls/Schlüsselworts
Wählen Sie das MixedRealityToolkit-Spielobjekt aus.
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 Den Befehl "Neue Sprache hinzufügen" aus.
Geben Sie die neue Schlüsselwort (keyword) ein. Optional: Ändern Sie keyCode in F5 (oder einen anderen KeyCode), um tests im Editor zu ermöglichen.
Zurück zum Zustandsinspektor des Interactive Element Speech-Schlüsselworts, und wählen Sie Schlüsselwort hinzufügen aus.
Geben Sie die neue Schlüsselwort (keyword) ein, die soeben im Speech-Profil registriert wurde.
Um den Speech-Schlüsselwortstatus im Editor zu testen, drücken Sie den KeyCode, der in Schritt 6 (F5) definiert wurde, um die Spracherkennung Schlüsselwort (keyword) erkanntes Ereignis zu simulieren.
Abrufen von Speech-Schlüsselwortzustandsereignissen
Ereigniskonfigurationstyp für den SpeechKeyword-Zustand: 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 Benutzerdefiniertem 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
StateEvents
initialisiert, die dieOnStateOn
Ereignisse undOnStateOff
enthä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 befinden sich 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. Für die Zwecke dieses Beispiels lautet der Zustandsname 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 Statusnamen + Ereignis/Empfänger-Konvention folgen.
Weitere Informationen zum Dateiinhalt finden Sie in den Dateien KeyboardEvents.cs und KeyboardReceiver.cs. Neue Ereigniskonfigurationsklassen müssen von erben
BaseInteractionEventConfiguration
, und neue Ereignisempfängerklassen müssen von erbenBaseEventReceiver
. Beispiele für Zustandseinstellungen für den Tastaturzustand befinden sich in derCustomStateSettingExample.cs
Datei.Fügen Sie den Status dem interaktiven Element 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 den folgenden 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 namens CompressableButton
und CompressableButtonToggle
, diese Prefabs Spiegel das Verhalten der PressableButtonHoloLens2
Schaltflächen, die mithilfe des interaktiven Elements und der Zustandsschnellansicht erstellt werden.
Die CompressableButton
Komponente ist derzeit eine Kombination von PressableButton
+ PressableButtonHoloLens2
mit BaseInteractiveElement
als Basisklasse.
Zustandsvisualisierer [Experimentell]
Die State Visualizer-Komponente fügt einem Objekt Animationen basierend auf den in einer verknüpften Interactive Element-Komponente definierten Zuständen hinzu. Diese Komponente erstellt Animationsobjekte, platziert sie im Ordner MixedRealityToolkit.Generated und ermöglicht eine vereinfachte Einstellung des Animations-Keyframes, indem einem Zielspielobjekt Animatable-Eigenschaften hinzugefügt werden. Um Animationsübergänge zwischen Zuständen zu aktivieren, wird ein Animator Controller-Objekt erstellt und ein Standardzustandscomputer mit zugeordneten Parametern und allen Zustandsübergängen generiert. Der Zustandscomputer kann im Animatorfenster von Unity angezeigt werden.
Zustandsvisualisierer und Unity-Animationssystem
Die State Visualizer nutzt derzeit das Unity Animation System.
Wenn die Schaltfläche Neue Animationsclips generieren in der Zustandsschnellansicht gedrückt wird, werden neue Animationsclipressourcen basierend auf den Statusnamen in Interactive Element generiert und im Ordner MixedRealityToolkit.Generated abgelegt. Die Animation Clip-Eigenschaft in jedem Zustandscontainer ist auf den zugeordneten Animationsclip festgelegt.
Ein Animatorstatuscomputer wird auch generiert, um reibungslose Übergänge zwischen Animationsclips zu verwalten. Standardmäßig verwendet der Zustandscomputer den Beliebigen Zustand , um Übergänge zwischen einem beliebigen Zustand im interaktiven Element zuzulassen.
Im Animator ausgelöste Zustandsvisualisierer werden ebenfalls für jeden Zustand generiert. Die Triggerparameter werden in der Zustandsschnellansicht verwendet, um eine Animation auszulösen.
Runtime-Einschränkungen
Die Zustandsvisualisierung muss einem Objekt über den Inspector hinzugefügt werden und kann nicht über ein Skript hinzugefügt werden. Die Eigenschaften, die den AnimatorStateMachine/AnimationController ändern, sind in einem Editornamespace (UnityEditor.Animations
) enthalten, der beim Erstellen der App entfernt wird.
Verwenden der Zustandsvisualisierer
Erstellen eines Cubes
Interaktives Element anfügen
Anfügen von Zustandsvisualisierer
Wählen Sie Neue Animationsclips generieren aus.
Wählen Sie im Container Fokuszustand die Option Ziel hinzufügen aus.
Ziehen Sie das aktuelle Spielobjekt in das Zielfeld.
Öffnen des Foldouts cube animatable Properties
Wählen Sie das Dropdownmenü Animatable-Eigenschaft aus, und wählen Sie Farbe aus.
Wählen Sie Hinzufügen der Color Animatable-Eigenschaft aus.
Farbe auswählen
Drücken Sie "Wiedergabe", und beobachten Sie die Übergangsfarbe.
Eigenschaften, die animiert werden können
Der Hauptzweck der animatable Properties besteht darin, die Einstellung des Animationsclip-Keyframes zu vereinfachen. Wenn ein Benutzer mit dem Unity Animation System vertraut ist und keyframes lieber direkt für die generierten Animationsclips festlegen möchte, kann er einfach keine Animatable-Eigenschaften zu einem Zielobjekt hinzufügen und den Clip im Animationsfenster von Unity (Windows-Animation >> animation) öffnen.
Wenn Sie die Animatable-Eigenschaften für die Animation verwenden, wird der Kurventyp auf EaseInOut festgelegt.
Aktuelle Animatable-Eigenschaften:
Offset skalieren
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.
Color
Die Color Animatable-Eigenschaft stellt die Standard Farbe eines Materials dar, wenn das Material über eine Standard Color-Eigenschaft 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. Die folgende GIF veranschaulicht das Animieren einer Shaderfarbeigenschaft namens Fill_Color, die nicht die Standard Materialfarbe ist. 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. Beachten Sie in der 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. Sehen Sie sich in der gif unten die sich ändernden Werte im Materialinspektor für die Eigenschaft Tiling (Main Tex_ST) an.
So finden Sie Namen für abstellbare Shadereigenschaften
Navigieren Sie zur Animation des Fensters >>
Stellen Sie sicher, dass das Objekt mit der Zustandsansicht in der Hierarchie ausgewählt ist.
Wählen Sie einen beliebigen Animationsclip im Animationsfenster aus.
Wählen Sie Eigenschaft hinzufügen aus, und öffnen Sie das Ausklappen des Gitterrenderers.
Diese Liste enthält die Namen aller Animatable-Eigenschaftsnamen.