Cursos
Ruta de aprendizaje
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Este explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
StateVisualizer es una interfaz que los diseñadores pueden usar con facilidad y que requiere poco código. Esta puede ayudarle a crear comentarios visuales en respuesta a distintos estados de interacción. En concreto, le permite usar tanto efectos complejos, basados en animaciones, como efectos comunes predefinidos.
En el MRTK3, aplicamos una separación entre los estados y los objetos visuales. Aunque los objetos con los que se puede interactuar son responsables de su propia lógica y estado de interacción, estos no están diseñados para representar sus propios objetos visuales o efectos en función de su estado. Esta separación se lleva a cabo para que tanto la lógica como el estado de interacción puedan reutilizarse en varios contextos visuales, así como para que los comentarios visuales y la dirección artística de una interacción puedan personalizarse sin necesidad de modificar el estado o la interacción subyacentes. Además, combinar el estado con los objetos visuales podría dar lugar a código que no se pueda mantener, que incluiría relaciones complejas y difíciles de entender entre los efectos visuales y las interacciones que estos representan.
Es por esto que, por lo general, StateVisualizer no utiliza estados. En su lugar, este escucha a una clase StatefulInteractable asociada y ejecuta un gráfico de elementos IEffect
en función del estado de interacción actual. En StateVisualizer, los estados complejos como Selectedness
y la intención de desplazamiento pasiva o activa están expuestos para su uso. Algunos efectos pueden responder al valor de selección fraccional para impulsar bonitos efectos "analógicos" que respondan cuando el usuario se mueva o haga un gesto de reducción o de presión.
La interfaz StateVisualizer se basa parcialmente en la API de Playables de Unity.
Agregue StateVisualizer, junto con un animador, al objeto con el que se puede interactuar. Elija un estado y agregue los efectos deseados. Si la interfaz StateVisualizer no encuentra el objeto con el que se puede interactuar en tiempo de ejecución, asegúrese de que la propiedad Interactable
esté establecida.
Importante
NO es necesario tener un controlador de animadores en el animador, excepto si va a crear efectos. StateVisualizer controla el animador directamente a través de la API de Playables. Además, StateVisualizer evita el uso de los controladores de animadores para mejorar el rendimiento y el mantenimiento.
Como la interfaz StateVisualizer no usa controladores de animadores, las animaciones no se pueden previsualizar mientras se están editando de forma predeterminada. Para resolver esto, cree un controlador de animadores (clase AnimatorController) temporal que contenga las animaciones pertinentes en las que esté trabajando y haga referencia a él en el animador. Sin embargo, recuerde que estos no son necesarios en tiempo de ejecución y que pueden tener un impacto no deseado en el rendimiento si no se quitan.
El MRTK incluye ejemplos de controladores de creación (clases AuthoringControllers) que usamos para crear los efectos de animación de nuestros componentes. No dude en duplicar nuestro ejemplo para aplicarlo a sus propias necesidades.
La interfaz StateVisualizer se ha creado para obtener un rendimiento óptimo a pesar de su uso de animadores y animaciones de Unity que, en otros contextos, podrían ser costosos a escala. Para resolver estos problemas, StateVisualizer selecciona el animador de forma inteligente y minimiza agresivamente la cantidad de tiempo que este se ejecuta. Además, la API de Playables tiene un rendimiento significativamente mayor que las máquinas de estado que utilizan controladores de animadores. La ausencia de estos controladores contribuye significativamente a la simplicidad del sistema de StateVisualizer y su rendimiento a escala.
Actualmente, StateVisualizer sondea el estado interactivo en lugar de depender de clientes de escucha de eventos que reaccionen únicamente cuando es necesario. Esta parte de StateVisualizer se encuentra bajo desarrollo y podría refactorizarse para poder usar clientes de escucha de eventos y aumentar aún más el rendimiento.
Efecto | Descripción |
---|---|
AnimationEffect ![]() |
En el modo OneShot , se reproduce una sola animación hacia delante cuando se activa el estado y la misma animación hacia atrás cuando este se desactiva. En el modo PlaybackTimeMatchesValue , el tiempo de reproducción de la animación se controla directamente mediante el valor fraccional del estado (por ejemplo, "Selectedness" para el estado "Select"). |
TwoWayAnimationEffect ![]() |
Este efecto es similar al modo OneShot del efecto AnimationEffect pero, además, usa dos animaciones independientes; una para cada "dirección". |
GraphicTintEffect ![]() |
Con este efecto, se tiñe una lista de componentes Graphic de un color determinado. Este efecto ofrece las mismas opciones de PlaybackMode que el efecto AnimationEffect y con resultados similares (OneShot realiza una transición completa cuando cambia de estado, mientras que PlaybackTimeMatchesValue hace que el progreso de la transición coincida con el valor fraccional del estado).Estas operaciones de mezcla se combinarán sobre cualquier otro tinte o animación que se estén ejecutando actualmente en el gráfico de la interfaz StateVisualizer. Tenga en cuenta que si los objetos que se pueden teñir tienen colores iniciales diferentes, este efecto de tinte podría mezclarse incorrectamente. Use efectos de tinte separados para los elementos que tengan diferentes colores base. |
SpriteTintEffect ![]() |
Con este efecto se realiza, exactamente, la misma operación que GraphicTintEffect , pero debe aplicarse a elementos SpriteRenderer . |
SpriteSwapEffect ![]() |
Con este efecto, se establece el elemento Image de destino como ActiveSprite o InactiveSprite en función de si el estado se encuentra activo o inactivo actualmente. Esto resulta útil para crear alternancias. |
SetTargetsActiveEffect ![]() |
Con este efecto, se habilita o deshabilita la lista de elementos "GameObject" en función de si el estado se encuentra activo o inactivo. Establecer el valor Invert provocará el comportamiento opuesto. |
PlayableAssetEffect ![]() |
El activo StateVisualAsset es un elemento "ScriptableObject" que contiene un recurso reproducible reutilizable. Este efecto conecta ese recurso reproducible con el grafo de la interfaz StateVisualizer. (Esta característica todavía es experimental y está sujeta a cambios). |
La mayoría de los efectos que no puedan obtenerse mediante uno de los tipos de efectos personalizados anteriores suelen poder crearse como elementos AnimationEffect
. Sin embargo, si desea crear un nuevo efecto personalizado y no basado en animaciones, puede implementar la interfaz IEffect
o emplear uno de nuestros efectos existentes como subclase. Consulte la referencia de API IEffect
para obtener más detalles.
Está previsto que la interfaz StateVisualizer pueda admitir estados personalizados en el futuro. Permanezca atento.
Cursos
Ruta de aprendizaje
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Documentación
API de cuadros de diálogo - MRTK3
Descripción de dialog API en MRTK3 UXCore
Documentación de VirtualizedScrollRectList en MRTK3
Introducción a las herramientas de MRTK3 - MRTK3
Introducción a las herramientas de MRTK3