Share via


Contexto y configuración del administrador de World Locking Tools

El contexto de World Locking Tools permite la personalización paramétrica del administrador de World Locking Tools en el inspector de Unity.

Aunque el componente WorldLockingContext presenta una interfaz de usuario para WorldLockingManager, es importante comprender que no son lo mismo y, en algunas situaciones, puede ser importante comprender su relación.

El administrador es un singleton

WorldLockingManager es un singleton creado a petición y que se conserva mientras dura la aplicación. Si no se realiza ninguna llamada a WorldLockingManager, nunca se crearán instancias del mismo. Una vez creada una instancia, permanecerá activo hasta que se cierre la aplicación. Nunca se destruye ni se vuelve a crear una instancia de él.

WorldLockingManager no es un objeto de Unity, es una clase de C# genérica. Su actualización se controla mediante un componente de Unity proxy, una instancia de la clase WorldLockingManager.UpdateProxy privada. De lo contrario, es independiente de los ciclos de creación, actualización y destrucción de Unity.

El contexto es un componente de Unity

WorldLockingContext es un componente de Unity que se agrega a un objeto de la escena de la manera habitual. Sus campos aparecen en el inspector de Unity como haría cualquier otro campo del componente de Unity normal.

Aunque no es un error tener varios componentes WorldLockingContext activos en una sola escena, probablemente no se desee, ya que el comportamiento sería indefinido y dependería del orden desconocido de las cargas de objetos.

La configuración de un contexto se aplica cuando WorldLockingContext se carga. En concreto, el contexto inserta su configuración en el administrador de World Locking Tools en su llamada OnEnable y cada vez que su escena se convierte en la escena activa. Este último se aplica como parte de la devolución de llamada Unity.SceneManager.activeSceneChanged, solo si la nueva escena activa es la escena a la que pertenece el contexto.

Toda la configuración se puede aplicar desde el script

En cualquier momento del tiempo de ejecución, la aplicación puede aplicar la configuración personalizada a WorldLockingManager mediante un script. Si se requiere el desmontaje y la recompilación de recursos para efectuar un cambio en la configuración, esa reconstrucción se llevará a cabo inmediatamente en el cambio de configuración.

Aunque hay algunos miembros de conveniencia que obtendrán valores de propiedad individuales de WorldLockingManager, por ejemplo el autoguardado, la configuración de los parámetros siempre se establece de forma agregada. Por ejemplo, el código para alternar las características de combinación y reinmovilización automáticas podría tener este aspecto:

/// Get a copy of the current settings
var settings = WorldLockingManager.GetInstance().Settings;
/// Modify the copy
settings.AutoMerge = !settings.AutoMerge;
settings.AutoRefreeze = !settings.AutoRefreeze;
/// Update the current settings to the values in the copy.
WorldLockingManager.GetInstance().Settings = settings;

Lo mismo ocurre para la configuración de diagnóstico.

Tenga en cuenta que cambiar varias opciones de configuración a la vez de esta manera solo incurre en el costo de una única recompilación (si se requiere).

Prioridad de configuración

Las reglas para la configuración aplicada actualmente a WorldLockingManager son muy sencillas:

  1. Si no se ha cargado ninguna escena que contenga un contexto y no se ha establecido explícitamente ninguna configuración desde el script, WorldLockingManager tiene la configuración predeterminada.

  2. Una configuración conservará su valor hasta que se invalide mediante una carga de WorldLockingContext con una escena o un cambio explícito invocado desde la aplicación en el script.

Se debe tener precaución al mezclar la configuración del administrador de World Locking Tools de contextos y la configuración de scripts. Dado que el contexto siempre aplica su configuración al cargar, es probable que un script que aplica manualmente la configuración durante la carga, especialmente desde su devolución de llamada OnEnable, se ejecute en condiciones de anticipación y con un comportamiento indeterminado.

Opciones de configuración disponibles

La configuración disponible para controlar el comportamiento de World Locking Tools se divide en grupos tal como se muestra a continuación.

Configuración básica del contexto de bloqueo del mundo

Configuración de automatización

La configuración de automatización controla el comportamiento en tiempo de ejecución del administrador de World Locking Tools. Los campos disponibles para su modificación y sus implicaciones se documentan en la clase ManagerSettings. Se centran en la habilitación o deshabilitación de acciones periódicas automatizadas llevada a cabo por el administrador. Cualquier acción automatizada deshabilitada se puede realizar manualmente en su lugar.

Sección de automatización del contexto

Configuración de vinculación

La configuración de vinculación se usa para definir explícitamente la escena GameObjects cuyas transformaciones se utilizarán para aplicar las correcciones de World Locking Tools.

Sección de vinculación del contexto

El campo "Usar existente" permite que los objetos vinculados se establezcan una vez en la escena con la plataforma de la cámara (con "Usar existente" en false) y no se invaliden mediante la carga de escenas de contenido posteriores (con "Usar existente" en true).

Por el contrario, establecer "Usar existente" en false permite que varias escenas con una plataforma de la cámara diferente cada una se enlacen a los lugares adecuados de la jerarquía de la cámara.

Al crear y administrar la jerarquía de la cámara desde el script, el campo "Usar existente" debe establecerse en true en todos los contextos, mientras que las vinculaciones deben actualizarse explícitamente desde la cámara que administra los scripts.

Cuando no se proporcionan las transformaciones necesarias, o bien se deja NULL o todos los contextos tienen "Usar existente", el sistema emite una advertencia e intenta deducir las opciones adecuadas. Es recomendable, pero no obligatorio, establecer explícitamente las transformaciones adecuadas, en lugar de tener la suposición del sistema.

Hay dos opciones adicionales aquí que controlan cómo se aplicará la corrección de transformación de la cámara.

La primera casilla, "Appy Adjustment" (Aplicar ajuste), se establece de forma predeterminada en Habilitado. Esto indica al sistema que aplique la corrección de cámara calculada de cada fotograma a "Adjustment Frame" (Fotograma de ajuste) GameObject. Establecerla en Deshabilitado es una característica muy avanzada y solo se debe probar después de que se resuelvan todos los demás problemas y de que se hayan adquirido conocimientos profundos sobre World Locking Tools. En resumen, indica al sistema que la corrección de cámara no se va a aplicar a la cámara, sino que lo hará por otros medios. Normalmente, esto se realiza a través de un componente AlignSubtree, pero no tiene por qué ser de ese modo.

La segunda casilla, "No Pitch And Roll" (Sin inclinación ni balanceo), indica al sistema que reduzca a cero cualquier inclinación y balanceo calculados en la transformación de Playspace a un espacio bloqueado (consulte esta discusión sobre los espacios de coordenadas de WLT). Esto no tiene ningún efecto en la rotación aplicada por el sistema SpacePin, pero solo afecta a la transformación de corrección de cámara de bloqueo del mundo calculada por Frozen World Engine.

Configuración de administración de anclajes

La configuración de administración de anclajes establece toda la selección explícita del sistema de seguimiento de anclajes. Actualmente, esta selección solo se realiza al inicio y, una vez hecho esto, no se puede cambiar.

Otras opciones de configuración aquí presentes permiten controlar la densidad del gráfico de anclajes de carácter interno subyacente. Pueden cambiarse en cualquier momento, aunque su efecto puede tardar algún tiempo en propagarse a través del gráfico interno.

Al cubrir áreas muy grandes, es posible que se desee reducir la densidad del gráfico de anclajes de carácter interno para sacrificar la precisión por el rendimiento. Es justo lo que ocurre si se aumenta MinNewAnchorDistance. Al aumentar la distancia mínima necesaria antes de agregar un nuevo anclaje interno, aumenta el espaciado entre los anclajes y, en consecuencia, disminuye la densidad de los mismos.

Debe tenerse en cuenta que, para superar la prueba de creación de borde, MaxAnchorEdgeLength debe ser mayor que MinNewAnchorDistance. En la práctica, una longitud MaxAnchorEdgeLength que supera a la distancia MinNewAnchorDistance en un 10-20 % funciona bien.

El parámetro MaxLocalAnchors, en lugar de modificar la densidad, limita directamente el número de anclajes internos. Actualmente, cuando el número de anclajes supera el límite, los anclajes más alejados de la cámara se reciclan para reducir el número. Sin embargo, otros algoritmos son interesantes y se están investigando, por lo que una aplicación no debe depender de esta implementación concreta.

Sección de administración de anclajes del contexto

Encontrará más detalles en la estructura AnchorSettings.

Configuración de diagnóstico

La configuración de diagnóstico controla la recopilación de diagnósticos para el análisis del comportamiento y la depuración. Normalmente se deben dejar con "Usar valores predeterminados" establecido, que, entre otras cosas, deshabilita la recopilación de diagnósticos. La recopilación de diagnósticos supone un gran arrastre de rendimiento, por lo que debe evitarse a menos que sea necesario.

Sección de diagnóstico del contexto

Durante el desarrollo, cuando se observa un comportamiento inesperado y no deseado, los datos de diagnóstico recopilados al deshabilitar Usar valores predeterminados y habilitar DiagnosticsSettings.Enabled permitirán la recopilación de datos que puedan contribuir decisivamente a la comprensión y corrección de ese comportamiento.

Los campos disponibles para su modificación se describen en la clase DiagnosticsSettings.

Configuración predeterminada

Tanto la configuración de diagnóstico como la del administrador contienen la casilla "Usar valores predeterminados". La propiedad "Usar valores predeterminados" también está disponible en el script.

Cuando la propiedad "Usar valores predeterminados" es true, se usa la configuración predeterminada actual. Si los valores predeterminados de una propiedad cambian en una nueva versión, la propiedad "Usar valores predeterminados" indica al sistema que use el nuevo valor de propiedad.

Si se establece la propiedad "Usar valores predeterminados" en true en cualquier momento, se restablecerán todos los valores a sus valores predeterminados actuales. Para bloquear los valores en una instantánea de los valores predeterminados en un momento dado, habilite la propiedad "Usar valores predeterminados" para restablecer todos los campos a los valores predeterminados actuales y, a continuación, anule la selección de la casilla para evitar que sufran cambios con una actualización.

Se recomienda dejar "Usar valores predeterminados" establecido en true, excepto durante el desarrollo para los experimentos y la depuración.

Vea también