Elemento Interactivo [Experimental] — MRTK2

Un punto de entrada centralizado simplificado para el sistema de entrada MRTK. Contiene métodos de administración de estado, administración de eventos y lógica de configuración de estado para estados de interacción principales.

El elemento interactivo es una característica experimental compatible con Unity 2019.3 y hasta que usa una funcionalidad nueva para Unity 2019.3: Serializar referencia.

Inspector de elementos interactivos

Durante el modo de reproducción, el inspector de elementos interactivos proporciona comentarios visuales que indican si el estado actual está activo o no. Si un estado está activo, se resaltará con un color cian. Si el estado no está activo, el color no cambia. Los números situados junto a los estados del inspector son los valores de estado, si el estado está activo, el valor es 1, si el estado no está activo, el valor es 0.

Interactive Element with virtual hand interaction

Estados principales

El elemento interactivo contiene estados principales y admite la adición de estados personalizados. Un estado principal es uno que ya tiene la lógica de configuración de estado definida en BaseInteractiveElement. A continuación se muestra una lista de los estados principales controlados por entrada actuales:

Estados principales actuales

Estados principales de interacción cercana y lejana:

Estados principales de interacción cercana:

Estados principales de interacción lejana:

Otros estados principales:

Cómo agregar un estado básico a través de Inspector

  1. Vaya a Agregar estado básico en el inspector para el elemento interactivo.

    Add a Core State via Inspector

  2. Seleccione el botón Seleccionar estado para elegir el estado principal que se va a agregar. Los estados del menú se ordenan por tipo de interacción.

    Add a Core State via Inspector with state selected

  3. Abra el plegado Configuración de eventos para ver los eventos y las propiedades asociadas al estado.

    Add a Core State via Inspector with event configuration

Cómo agregar un estado básico mediante script

Use el AddNewState(stateName) método para agregar un estado básico. Para obtener una lista de los nombres de estado principales disponibles, use la CoreInteractionState enumeración .

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

interactiveElement.AddNewState("SelectFar");

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

Estructura interna de estados

Los estados de Interactive Element son de tipo InteractionState. Contiene InteractionState las siguientes propiedades:

  • Nombre: nombre del estado.
  • Valor: valor de estado. Si el estado está activado, el valor de estado es 1. Si el estado está desactivado, el valor de estado es 0.
  • Activo: indica si el estado está activo o no. El valor de la propiedad Active es true cuando el estado está activado, false si el estado está desactivado.
  • Tipo de interacción: el tipo de interacción de un estado es el tipo de interacción para el que está pensado un estado.
    • None: no admite ninguna forma de interacción de entrada.
    • Near: compatibilidad con la interacción cercana. La entrada se considera casi interacción cuando una mano articulada tiene contacto directo con otro objeto de juego, es decir, la posición en la que la mano articulada está cerca de la posición del objeto del juego en el espacio mundial.
    • Far: compatibilidad con la interacción lejana. La entrada se considera interacción lejana cuando no se requiere contacto directo con el objeto del juego. Por ejemplo, la entrada a través del rayo del controlador o la mirada se considera entrada de interacción lejana.
    • NearAndFar: abarca la compatibilidad con la interacción cercana y lejana.
    • Other: compatibilidad con la interacción independiente del puntero.
  • Configuración de eventos: la configuración de eventos de un estado es el punto de entrada del perfil de eventos serializados.

Todas estas propiedades se establecen internamente en el State Manager contenido de Interactive Element. Para modificar los estados, use los siguientes métodos auxiliares:

Métodos auxiliares de configuración de estado

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

La obtención de la configuración de eventos de un estado es específica del propio estado. Cada estado principal tiene un tipo de configuración de eventos específico que se describe a continuación en las secciones que describen cada estado principal.

Este es un ejemplo generalizado de cómo obtener la configuración de eventos de un estado:

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

Estado predeterminado

El estado Predeterminado siempre está presente en un elemento interactivo. Este estado solo estará activo cuando todos los demás estados no estén activos. Si algún otro estado se activa, el estado Predeterminado se establecerá internamente.

Un elemento interactivo se inicializa con los estados Default y Focus presentes en la lista de estados. El estado Predeterminado siempre debe estar presente en la lista de estados.

Obtención de eventos de estado predeterminados

Tipo de configuración de eventos para el estado predeterminado: 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");
});

Estado del foco

El estado Focus es un estado de interacción cercano y lejano que se puede considerar como la realidad mixta equivalente al mantener el puntero. El factor distintivo entre la interacción cercana y lejana para el estado Focus es el tipo de puntero activo actual. Si el tipo de puntero para el estado Focus es el puntero Poke, la interacción se considera casi interacción. Si el puntero principal no es el puntero Poke, la interacción se considera interacción lejana. El estado Focus está presente en el elemento interactivo de forma predeterminada.

Comportamiento del estado de enfoqueFocus state with virtual hand interaction

Inspector de estado de focoFocus state in the Inpsector

Obtención de eventos de estado de foco

Tipo de configuración de eventos para el estado de enfoque: 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");
});

Enfoque cerca frente al comportamiento lejano del foco

Focus near and far with virtual hand interaction

Enfoque cerca del estado

El estado Focus Near se establece cuando se genera un evento de foco y el puntero principal es el puntero Poke, una indicación de interacción cercana.

Comportamiento de enfoque cerca del estadoFocus near state with virtual hand interaction

Centrarse cerca del inspector de estadoFocus near component in the Inspector

Obtención de eventos de estado FocusNear

Tipo de configuración de eventos para el estado FocusNear: 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");
});

Estado lejano del foco

El estado Foco lejano se establece cuando el puntero principal no es el puntero Poke. Por ejemplo, el puntero de rayo del controlador predeterminado y el puntero GGV (Mirada, Gesto, Voz) se consideran punteros de interacción lejanos.

Comportamiento de estado lejano de focoFocus state far with virtual hand interaction

Inspector de estado lejano de focoFocus far component in the Inspector

Obtención de eventos de estado lejano de foco

Tipo de configuración de eventos para el estado FocusFar: 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");
});

Estado táctil

El estado Touch es un estado de interacción cercano que se establece cuando una mano articulada toca el objeto directamente. Un toque directo significa que el dedo índice de la mano articulada está muy cerca de la posición mundial del objeto. De forma predeterminada, un NearInteractionTouchableVolume componente se adjunta al objeto si el estado Touch se agrega a la lista de estados. La presencia de un NearInteractionTouchableVolume componente o NearInteractionTouchable es necesaria para detectar eventos Touch. La diferencia entre NearInteractionTouchableVolume y NearInteractionTouchable es que NearInteractionTouchableVolume detecta un toque basado en el colisionador del objeto y NearInteractionTouchabledetecta el contacto dentro de un área definida de un plano.

Comportamiento del estado táctilTouch state with virtual hand interaction

Inspector de estado táctilTouch state component in the Inspector

Obtención de eventos de estado táctil

Tipo de configuración de eventos para el estado táctil: 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");
});

Seleccionar estado lejano

El estado Seleccionar extremo es el IMixedRealityPointerHandler que aparece. Este estado es un estado de interacción lejana que detecta el clic de interacción lejana (pulsación de aire) y se mantiene a través del uso de punteros de interacción lejana, como el puntero de rayo del controlador predeterminado o el puntero GGV. El estado Seleccionar extremo tiene una opción en el plegado de configuración de eventos denominado Global. Si Global es true, se IMixedRealityPointerHandler registra como un controlador de entrada global. No es necesario centrarse en un objeto para desencadenar eventos del sistema de entrada si un controlador está registrado como global. Por ejemplo, si un usuario quiere saber cuándo se realiza el gesto de pulsar o seleccionar en el aire, independientemente del objeto en el foco, establezca Global en true.

Seleccionar comportamiento de estado lejanoSelect far with virtual hand interaction

Seleccionar Inspector de estado lejanoSelect far component in the Inspector

Obtención de seleccionar eventos de estado lejano

Tipo de configuración de eventos para el estado SelectFar: 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");
});

Estado en el que se ha clic

El estado Clicked se desencadena mediante un clic de interacción lejana (Seleccionar estado lejano) de forma predeterminada. Este estado se cambia internamente a activado, invoca el evento OnClicked y, a continuación, se desactiva inmediatamente.

Nota

Los comentarios visuales del inspector basados en la actividad de estado no están presentes para el estado Clicked porque se activa y, a continuación, se desactiva inmediatamente.

Comportamiento de estado en el que se ha clicClicked state with virtual hand interactions

Inspector de estado en el que se ha clicClick state component in the Inspector

Ejemplo de estado con clics cercanos y lejanos
El estado en el que se hace clic se puede desencadenar a través de puntos de entrada adicionales mediante el interactiveElement.TriggerClickedState() método . Por ejemplo, si un usuario quiere que una interacción cercana toque también desencadene un clic en un objeto, agregaría el TriggerClickedState() método como agente de escucha en el estado táctil.

Near and far state with virtual hand interactions

Obtención de eventos de estado en los que se hace clic

Tipo de configuración de eventos para el estado clicked: ClickedEvents

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

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

Activar y desactivar el estado

Los estados Toggle On y Toggle Off son un par y ambos deben estar presentes para el comportamiento de alternancia. De forma predeterminada, los estados Activar y Desactivar alternancia se desencadenan a través de un clic de interacción lejana (Seleccionar estado Lejano). De forma predeterminada, el estado Alternar desactivado está activo al iniciar, lo que significa que el botón de alternancia se inicializará en desactivado. Si un usuario quiere que el estado Alternar activado esté activo al iniciarse, en el estado Toggle On (Activar activado) establecido IsSelectedOnStart en true.

ToggleOn y Toggle Off State BehaviorToggle on and off with virtual hand interactions

ToggleOn y Toggle Off State InspectorToggle component in the Inspector

Ejemplo de estados de alternancia cerca y lejos
De forma similar al estado Clicked, la configuración de alternancia de estado puede tener varios puntos de entrada mediante el interactiveElement.SetToggleStates() método . Por ejemplo, si un usuario quiere tocar como un punto de entrada adicional para establecer los estados de alternancia, agrega el SetToggleStates() método a uno de los eventos en estado Touch.

Near and far toggle with virtual hand interactions

Activar y desactivar eventos de estado

Tipo de configuración de eventos para el estado ToggleOn: ToggleOnEvents
Tipo de configuración de evento para el estado ToggleOff: 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");
});

Estado de palabra clave de voz

El estado de palabra clave de voz escucha las palabras clave definidas en el perfil de voz de Mixed Reality. Cualquier palabra clave nueva DEBE registrarse en el perfil de comando de voz antes del tiempo de ejecución (pasos siguientes).

Comportamiento del estado de palabra clave de vozSpeech keyword with virtual interaction

Speech Keyword State InspectorSpeech keyword component in the Inspector

Nota

El estado de palabra clave de voz se desencadenó en el editor presionando la tecla F5 en el gif anterior. La configuración en las pruebas del editor para la voz se describe en los pasos siguientes.

Registro de una palabra clave o comando de voz

  1. Seleccionar el objeto de juego MixedRealityToolkit

  2. Seleccione Copiar y personalizar el perfil actual.

  3. Vaya a la sección Entrada y seleccione Clonar para habilitar la modificación del perfil de entrada.

  4. Desplácese hacia abajo hasta la sección Voz del perfil de entrada y clone el perfil de voz.

    Speech keyword profile in the MRTK game object

  5. Seleccione Add a New Speech Command (Agregar un nuevo comando de voz).

    Adding a new speech keyword in the MRTK profile

  6. Escriba la nueva palabra clave. Opcional: cambie KeyCode a F5 (u otro keyCode) para permitir las pruebas en el editor.

    Configuring speech keyword in the MRTK profile

  7. Volver al inspector de estado de palabra clave de voz del elemento interactivo y seleccione Agregar palabra clave.

    Adding keyword to interactive element component

    Keyword validation and registration

  8. Escriba la nueva palabra clave que se acaba de registrar en el perfil de voz.

    Entering new speech keyword

Para probar el estado de la palabra clave de voz en el editor, presione keyCode que se definió en el paso 6 (F5) para simular el evento reconocido de palabra clave de voz.

Obtención de eventos de estado de palabra clave de voz

Tipo de configuración de eventos para el estado 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"); 
});

Estados personalizados

Cómo crear un estado personalizado mediante inspector

El estado personalizado creado a través del inspector se inicializará con la configuración de eventos de estado predeterminada. La configuración de eventos predeterminada para un estado personalizado es de tipo StateEvents y contiene los eventos OnStateOn y OnStateOff.

  1. Vaya a Crear estado personalizado en el inspector para el elemento interactivo.

    Creating a custom state

  2. Escriba el nombre del nuevo estado. Este nombre debe ser único y no puede ser el mismo que los estados principales existentes.

    Entering the name of a new custom state

  3. Seleccione Establecer nombre de estado para agregar a la lista de estados.

    Add custom state to state list

    Este estado personalizado se inicializa con la configuración de eventos predeterminada StateEvents que contiene los OnStateOn eventos y OnStateOff . Para crear una configuración de eventos personalizada para un nuevo estado, consulte Creación de un estado personalizado con una configuración de eventos personalizados.

    New state shown in the interactive element component

Creación de un estado personalizado mediante script

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

Creación de un estado personalizado con una configuración de eventos personalizada

Los archivos de ejemplo de un estado personalizado denominado Keyboard se encuentran aquí: MRTK\SDK\Experimental\InteractiveElement\Examples\Scripts\CustomStateExample

Los pasos siguientes le guiarán por un ejemplo existente de creación de una configuración de eventos de estado personalizado y archivos receptores.

  1. Piense en un nombre de estado. Este nombre debe ser único y no puede ser el mismo que los estados principales existentes. Para los fines de este ejemplo, el nombre de estado será Teclado.

  2. Cree dos archivos .cs denominados nombre de estado + "Receiver" y nombre de estado + "Events". La nomenclatura de estos archivos se tiene en cuenta internamente y debe seguir el nombre de estado + Convención de receptor/evento.

    Keyboard state scripts

  3. Consulte los archivos KeyboardEvents.cs y KeyboardReceiver.cs para obtener más detalles sobre el contenido del archivo. Las nuevas clases de configuración de eventos deben heredar de BaseInteractionEventConfiguration y las nuevas clases receptoras de eventos deben heredar de BaseEventReceiver. Los ejemplos de la configuración de estado para el estado teclado se encuentran en el CustomStateSettingExample.cs archivo.

  4. Agregue el estado al elemento interactivo con el nombre de estado, el nombre de estado se reconocerá si existen archivos de configuración de eventos y receptores de eventos. Las propiedades del archivo de configuración de eventos personalizados deben aparecer en el inspector.

    Adding custom state to interactive elementCustom state recognized in the interactive element

  5. Para obtener más ejemplos de archivos de configuración de eventos y receptores de eventos, consulte los archivos en estas rutas de acceso:

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

Escena de ejemplo

La escena de ejemplo para interactive Element + State Visualizer se encuentra aquí: MRTK\SDK\Experimental\InteractiveElement\Examples\InteractiveElementExampleScene.unity

Example scene with Interactive Element and State Visualizer

Botón comprimible

La escena de ejemplo contiene objetos prefabricados denominados CompressableButton y CompressableButtonToggle, estos objetos prefabricados reflejan el comportamiento de los PressableButtonHoloLens2 botones, que se construyen mediante elemento interactivo y visualizador de estado. El CompressableButton componente es actualmente una combinación de PressableButton + PressableButtonHoloLens2 con BaseInteractiveElementcomo una clase base.

Visualizador de estado [Experimental]

El componente Visualizador de estado agrega animaciones a un objeto basado en los estados definidos en un componente de elemento interactivo vinculado. Este componente crea activos de animación, los coloca en la carpeta MixedRealityToolkit.Generated y habilita la configuración simplificada del fotograma clave de animación mediante la adición de propiedades animables a un objeto de juego de destino. Para habilitar las transiciones de animación entre estados, se crea un recurso controlador de animadores y se genera una máquina de estado predeterminada con los parámetros asociados y las transiciones de estado. La máquina de estado se puede ver en la ventana Animator de Unity.

Visualizador de estado y sistema de animación de Unity

El visualizador de estado aprovecha actualmente el sistema de animación de Unity.

Cuando se presiona el botón Generar nuevos clips de animación en el visualizador de estado, se generan nuevos recursos de clip de animación basados en los nombres de estado del elemento interactivo y se colocan en la carpeta MixedRealityToolkit.Generated. La propiedad Clip de animación de cada contenedor de estado se establece en el clip de animación asociado.

Animation clips in state visualizer component

También se genera una máquina de estado de animador para administrar transiciones fluidas entre clips de animación. De forma predeterminada, la máquina de estados utiliza el estado Any Para permitir las transiciones entre cualquier estado de Interactive Element.

Los visualizadores de estado desencadenados en el animador también se generan para cada estado, los parámetros del desencadenador se usan en el Visualizador de estado para desencadenar una animación.

Unity state machine

Limitaciones en tiempo de ejecución

El visualizador de estado debe agregarse a un objeto a través del Inspector y no se puede agregar a través del script. Las propiedades que modifican AnimatorStateMachine/AnimationController se encuentran en un espacio de nombres del editor (UnityEditor.Animations) que se quita cuando se compila la aplicación.

Cómo usar el visualizador de estado

  1. Crear un cubo

  2. Elemento Attach Interactive

  3. Adjuntar visualizador de estado

  4. Seleccione Generate New Animation Clips (Generar nuevos clips de animación).

    Generating new animation clips

    Showing generated animation clips in visualizer and interactive element components

  5. En el contenedor de estado de enfoque, seleccione Agregar destino.

    Adding state visualizer target

  6. Arrastre el objeto de juego actual al campo de destino.

    Setting state visualizer target

  7. Abrir el plegado Propiedades animables de cubo

  8. Seleccione el menú desplegable De la propiedad Animatable y seleccione Color.

    Setting state visualizer color

  9. Seleccione Agregar la propiedad Animatable de color.

    Selecting the visualizer color animatable property

  10. Elegir un color

    Choosing a visualizer color from color wheel

  11. Presione reproducir y observe el cambio de color transitorio

    Transitional color change example with virtual hand interaction

Propiedades que se pueden animar

El propósito principal de las propiedades animables es simplificar la configuración del fotograma clave del clip de animación. Si un usuario está familiarizado con el sistema de animación de Unity y prefiere establecer directamente fotogramas clave en los clips de animación generados, simplemente no puede agregar propiedades animables a un objeto de destino y abrir el clip en la ventana Animación de Unity (Windows > Animación de animación>).

Si usa las propiedades Animatable para la animación, el tipo de curva se establece en EaseInOut.

Propiedades animables actuales:

Desplazamiento de escala

La propiedad Animatable Scale Offset toma la escala actual del objeto y agrega el desplazamiento definido.

Scale offset with virtual hand interaction

Desplazamiento de posición

La propiedad Position Offset Animatable toma la posición actual del objeto y agrega el desplazamiento definido.

Position offset with virtual hand interaction

Color

La propiedad Color Animatable representa el color principal de un material si el material tiene una propiedad de color principal. Esta propiedad anima la material._Color propiedad .

Focus color change with virtual hand interaction

Color del sombreador

La propiedad Animatable Color de sombreador hace referencia a una propiedad de sombreador de color de tipo. Se requiere un nombre de propiedad para todas las propiedades del sombreador. En el gif siguiente se muestra cómo animar una propiedad de color del sombreador denominada Fill_Color que no es el color principal del material. Observe los valores cambiantes en el inspector de material.

Shade color with virtual hand interaction

Sombreador Float

La propiedad Shader Float Animatable hace referencia a una propiedad de sombreador de tipo float. Se requiere un nombre de propiedad para todas las propiedades del sombreador. En el gif siguiente, observe los valores cambiantes en el inspector de material para la propiedad Metalizada.

Shader float with virtual hand interaction

Vector de sombreador

La propiedad Animatable vector de sombreador hace referencia a una propiedad de sombreador de tipo Vector4. Se requiere un nombre de propiedad para todas las propiedades del sombreador. En el gif siguiente, observe los valores cambiantes del inspector de material para la propiedad Tiling (Main Tex_ST).

Shader vector with virtual hand interaction

Cómo buscar nombres de propiedad de sombreador animables

  1. Vaya a Animación de animación > de ventana >

  2. Asegúrese de que el objeto con el visualizador de estado está seleccionado en la jerarquía.

  3. Seleccionar cualquier clip de animación en la ventana Animación

  4. Seleccione Agregar propiedad y abra el plegado del representador Mesh.

    Adding animation property in the Animator window

  5. Esta lista contiene los nombres de todos los nombres de propiedad Animatable.

    Mesh renderer animation properties in the Animator window

Consulta también