Paramètres de contexte et de gestionnaire de World Locking Tools
Le contexte de World Locking Tools permet la personnalisation paramétrique du gestionnaire de World Locking Tools dans l’inspecteur Unity.
Bien que le composant WorldLockingContext présente une interface utilisateur pour WorldLockingManager, il est important de comprendre qu’il ne s’agit pas de la même chose et que, dans certaines situations, il peut être important de comprendre leur relation.
Le gestionnaire est un singleton
WorldLockingManager est un singleton créé à la demande et conservé pendant toute la durée de vie de l’application. Si aucun appel n’est effectué à WorldLockingManager, il ne sera jamais instancié. Une fois instancié, il reste actif jusqu’à ce que l’application soit arrêtée. Il n’est jamais détruit et réinstancié.
WorldLockingManager n’est pas un objet Unity, il s’agit d’une classe C# générique. Sa mise à jour est pilotée par un composant Unity proxy, une instance de la classe privée WorldLockingManager.UpdateProxy. Il est indépendant des cycles de création/mise à jour/destruction d’Unity.
Le contexte est un composant Unity
WorldLockingContext est un composant Unity qui est ajouté à un objet dans la scène de la manière habituelle. Ses champs s’affichent dans l’inspecteur Unity comme n’importe quel autre composant Unity standard.
Bien qu’il ne soit pas impossible d’avoir plusieurs WorldLockingContext actifs dans une même scène, cela n’est probablement pas souhaitable, car le comportement est indéfini, reposant sur l’ordre inconnu des chargements d’objets.
Les paramètres d’un contexte sont appliqués lorsque WorldLockingContext est chargé. Plus précisément, le contexte pousse ses paramètres sur le gestionnaire de World Locking Tools dans son appel OnEnable, et chaque fois que sa scène devient la scène active. Ce dernier est appliqué dans le cadre du rappel Unity.SceneManager.activeSceneChanged, si et seulement si la nouvelle scène active est la scène à laquelle le contexte appartient.
Tous les paramètres peuvent être appliqués à partir du script
À tout moment dans le runtime, l’application peut appliquer des paramètres personnalisés à WorldLockingManager par script. Si un démontage et une reconstruction des ressources sont nécessaires pour effectuer un changement de paramètres, cette reconstruction aura lieu immédiatement après le changement de paramètres.
Bien qu’il existe des membres pratiques permettant d’obtenir des valeurs de propriétés individuelles de WorldLockingManager, par exemple AutoSave, la définition des paramètres se fait toujours de manière globale. Par exemple, le code permettant de basculer les fonctionnalités AutoMerge et AutoRefreeze peut se présenter comme suit :
/// 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;
Il en va de même pour les paramètres de diagnostic.
Notez que la modification de plusieurs paramètres à la fois de cette façon n’entraîne que le coût d’une seule régénération (si nécessaire).
Priorité des paramètres
Les règles pour les paramètres actuellement appliqués à WorldLockingManager sont très simples :
Si aucune scène contenant un contexte n’a été chargée, et qu’aucun paramètre n’a été explicitement défini à partir du script, WorldLockingManager a les paramètres par défaut.
Un paramètre conserve sa valeur jusqu’à ce qu’il soit remplacé par un WorldLockingContext chargé avec une scène, ou par un changement explicite invoqué par l’application dans un script.
Soyez prudent lorsque vous mélangez des paramètres du gestionnaire de World Locking Tools à partir des contextes et des paramètres des scripts. Étant donné que le contexte applique toujours ses paramètres au chargement, un script appliquant manuellement les paramètres pendant le chargement, en particulier à partir de sa fonction de rappel OnEnable, risque de se heurter à des conflits et à un comportement indéterminé.
Paramètres disponibles
Les paramètres disponibles pour le contrôle du comportement de World Locking Tools sont divisés en groupes comme suit.
Paramètres d’automatisation
Les paramètres d’automatisation contrôlent le comportement d’exécution du gestionnaire de World Locking Tools. Les champs disponibles pour la modification et leurs implications sont documentés dans la classe ManagerSettings. Ils sont axés sur l’activation ou la désactivation d’actions périodiques automatisées par le gestionnaire. Toutes les actions automatisées désactivées peuvent être effectuées manuellement.
Paramètres de liaison
Les paramètres de liaison sont utilisés pour définir explicitement la scène GameObjects
dont les transformations seront utilisées pour appliquer les corrections de World Locking Tools.
Le champ « Utiliser l’existant » permet de définir les objets liés une fois dans la scène avec la caméra (avec « Utiliser l’existant » sur false), et de ne pas les remplacer lors du chargement de scènes de contenu ultérieures (avec « Utiliser l’existant » sur true).
Inversement, l’affectation de la valeur false à l’option « Utiliser l’existant » permet à plusieurs scènes de se lier chacune avec une caméra différente pour la liaison aux emplacements appropriés dans la hiérarchie de la caméra.
Lors de la création et de la gestion de la hiérarchie de la caméra à partir du script, le champ « Utiliser l’existant » doit avoir la valeur true pour tous les contextes et les liaisons mises à jour explicitement à partir de la caméra gérant les scripts.
Lorsque les transformations requises ne sont pas fournies, qu’elles sont laissées sur null ou que tous les contextes ont activé « Utiliser l’existant », le système émet un avertissement et tente de déduire les bons choix. Il est recommandé, mais pas obligatoire, de définir explicitement les transformations appropriées, plutôt que de laisser le système deviner.
Il existe deux options supplémentaires qui contrôlent l’application de la correction de la transformation de la caméra.
La première case à cocher, pour « Appliquer les ajustements », est activée par défaut. Cela indique au système d’appliquer la correction de caméra calculée à chaque trame au GameObject
« Trame d’ajustement ». La désactivation de cette fonctionnalité est très avancée et ne doit être effectuée qu’une fois que tous les autres problèmes ont été résolus, et qu’une compréhension approfondie World Locking Tools a été acquise. En bref, il indique au système que la correction de la caméra ne doit pas être appliquée à la caméra, mais qu’elle le sera par d’autres moyens. En règle générale, il s’agit d’un composant AlignSubtree
, mais ce n’est pas obligatoire.
La deuxième case à cocher, « No Pitch And Roll », indique au système d’annuler tout tangage et roulis calculé dans la transformation de Playspace
en espace verrouillé. (Consultez cette discussion sur les espaces de coordonnées WLT). Cela n’a aucun effet sur la rotation appliquée par le système SpacePin
, mais affecte uniquement la transformation de correction de la caméra avec verrouillage universel calculée par le moteur Frozen World.
Paramètres de gestion des ancres
Les paramètres de gestion des ancres déterminent les sélections explicites du système de suivi des ancres. Cette sélection est actuellement effectuée uniquement au démarrage, et ne peut pas être modifiée ultérieurement.
D’autres paramètres permettent de contrôler la densité du graphique d’ancres interne sous-jacent. Ils peuvent être modifiés à tout moment, bien que leur propagation dans le graphique interne puisse prendre un certain temps.
Lorsque vous traitez des zones très volumineuses, il est possible de réduire la densité du graphique d’ancres interne pour sacrifier la précision au profit des performances. Augmenter MinNewAnchorDistance fait exactement cela. En augmentant la distance minimale requise avant d’ajouter une nouvelle ancre interne, l’espacement entre les ancres augmente, et ainsi la densité des ancres diminue.
Il convient de noter que pour réussir le test de création d’arêtes, MaxAnchorEdgeLength doit être supérieur à MinNewAnchorDistance. En pratique, une valeur MaxAnchorEdgeLength supérieure de 10 à 20 % à MinNewAnchorDistance fonctionne bien.
Le paramètre MaxLocalAnchors, plutôt que modifier la densité, limite directement le nombre d’ancres internes. Actuellement, lorsque le nombre d’ancres dépasse la limite, les ancres les plus éloignées de la caméra sont recyclées pour réduire leur nombre. Toutefois, d’autres algorithmes sont intéressants et font l’objet de recherches, de sorte qu’une application n’a pas à dépendre de cette implémentation particulière.
Plus de détails sont documentés dans la structure AnchorSettings.
Paramètres de diagnostic
Les paramètres de diagnostic contrôlent la collecte des diagnostics pour l’analyse du comportement et le débogage. Ils doivent normalement être laissés avec l’option « Utiliser les valeurs par défaut » définie, qui, entre autres, désactive la collecte des diagnostics. La collection de diagnostics est un grand frein à la performance, elle doit donc être évitée si elle n’est pas nécessaire.
Au cours du développement, lorsqu’un comportement inattendu et indésirable est observé, les données de diagnostic recueillies en désactivant Utiliser les valeurs par défaut et en activant DiagnosticsSettings.Enabled permettront de recueillir des données qui peuvent être utiles pour comprendre et corriger ce comportement.
Les champs disponibles pour modification sont décrits dans la classe DiagnosticsSettings.
Paramètres par défaut
Les paramètres du gestionnaire et des diagnostics contiennent chacun une case à cocher « Utiliser les valeurs par défaut » dans les paramètres. La propriété « Utiliser les valeurs par défaut » est également disponible à partir du script.
Lorsque la propriété « Utiliser les valeurs par défaut » a la valeur true, les paramètres par défaut actuels sont utilisés. Si les valeurs par défaut d’une propriété changent dans une nouvelle version, la propriété « Utiliser les valeurs par défaut » indique au système d’utiliser la nouvelle valeur de propriété.
L’affectation de la valeur true à la propriété « Utiliser les valeurs par défaut » entraîne la réinitialisation de toutes les valeurs à leurs valeurs par défaut actuelles. Pour verrouiller les valeurs à un instantané des valeurs par défaut à un moment donné, activez la propriété « Utiliser les valeurs par défaut » pour réinitialiser tous les champs aux valeurs par défaut actuelles, puis désactivez-la pour empêcher qu’ils soient modifiés lors d’une mise à jour.
Il est recommandé de conserver la valeur true pour l’option « Utiliser les valeurs par défaut », sauf pendant le développement pour l’expérimentation et le débogage.