Notes de publication de Microsoft Mixed Reality Toolkit 2.5

Important

Il existe un problème de compilateur connu qui affecte les applications créées pour Microsoft HoloLens 2 à l’aide d’ARM64. Ce problème est résolu en mettant à jour Visual Studio 2019 vers la version 16.8 ou ultérieure. Si vous ne parvenez pas à mettre à jour Visual Studio, importez le com.microsoft.mixedreality.toolkit.tools package pour appliquer une solution de contournement.

Nouveautés de la version 2.5.4

Correction d’un bogue avec l’intégration d’Oculus lors de l’utilisation d’UPM

Lors de l’utilisation d’UPM, les préfabriqués de l’OculusXRSDKDeviceManagerProfile ont toujours la valeur None au démarrage. Cette version configure le Gestionnaire de périphériques pour qu’il pointe vers un ensemble de préfabriqués de travail au démarrage.

Correction d’un problème avec OpenXR via UPM

Résout un problème où les fournisseurs OpenXR n’ont pas été ajoutés à l'link.xml par défaut, ce qui entraînait l’échec de l’exécution de nouveaux projets sur l’appareil lors de l’utilisation d’OpenXR et mrTK via le Gestionnaire de package Unity. Les projets existants qui sont mis à niveau devront toujours l’ajouter manuellement.

Nouveautés de la version 2.5.3

Corrige une régression avec Oculus introduit dans la version 2.5.2

La version 2.5.2 a introduit un problème de génération lors de l’intégration du KIT de développement logiciel (SDK) Oculus. Cette version rétablit ce problème.

Nouveautés de la version 2.5.2

Ajouter la prise en charge d’OpenXR

La prise en charge initiale du package openXR en préversion d’Unity et du package OpenXR Mixed Reality de Microsoft a été ajoutée. Pour plus d’informations, consultez la page prise en main de MRTK/XRSDK, le billet du forum Unity ou la documentation de Microsoft .

Important

OpenXR dans Unity est uniquement pris en charge sur Unity 2020.3 et versions ultérieures. Il prend également en charge uniquement les builds x64, ARM et ARM64.

Erreurs de visualisation de limites corrigées

Les visualisations de limites, comme le plancher ou les murs, seront désormais correctement configurées et visibles au moment de l’exécution en fonction du profil de limite.

Prise en charge de MSBuild pour Unity

La prise en charge de MSBuild pour Unity a été supprimée à partir de la version 2.5.2, afin de s’aligner sur les nouvelles instructions de package d’Unity.

Nouveautés de la version 2.5.1

Erreurs de dépendance de package corrigées

Cette version corrige les dépendances incorrectes des fichiers entre packages (par exemple, les fichiers dans les ressources Standard ne référencent plus incorrectement les fichiers dans Foundation). La version 2.5.1 ajoute également une dépendance explicite à Text Mesh Pro.

Nuanceurs de package De ressources standard copiés dans Assets/MRTK/Shaders

Lorsque le package Ressources standard est installé via UPM, les nuanceurs sont copiés dans le dossier Assets/MRTK/Shaders afin qu’ils ne soient plus immuables. Cela résout le problème des nuanceurs mis à jour pour le pipeline de rendu universel (URP) qui rétablit le comportement hérité lors du prochain chargement du projet.

Correction du curseur de téléportage collant aux mains

Cette version résout un problème où le curseur de destination de téléportage peut coller aux visuels de la main.

Nouveautés de la version 2.5.0

Prise en charge d’Unity Package Manager (UPM)

Le kit de ressources Mixed Reality peut désormais être géré à l’aide du Gestionnaire de package Unity.

MRTK Foundation UPM Package

Notes

Certaines étapes manuelles sont nécessaires pour importer les packages UPM MRTK. Pour plus d’informations, consultez Mixed Reality Toolkit et le Gestionnaire de package Unity.

Prise en charge du KIT de développement logiciel (SDK) Oculus Quest XR

MRTK prend désormais en charge l’exécution de casques et de contrôleurs Oculus Quest à l’aide du pipeline natif du SDK XR. Le suivi des mains est également pris en charge avec le package Oculus Integration Unity grâce au travail d’Eric Provencher sur MRTK-Quest !

Pour obtenir des instructions sur le déploiement de votre appareil sur Oculus Quest à l’aide du nouveau pipeline, consultez le Guide d’installation d’Oculus Quest

Défilement de la collection d’objets

Le composant UX MRTK a été mis à niveau à partir d’une fonctionnalité expérimentale et offre plus de liberté pour la disposition du contenu 3D de différentes tailles avec une prise en charge supplémentaire pour les objets qui n’ont aucun collisionneur attaché. Une nouvelle option de désactivation du masquage de contenu a également été ajoutée, ce qui facilite le prototypage.

Pour plus d’informations, consultez Défilement de la collection d’objets .

Défilement de la collection d’objets

Améliorations de l’animation, de la gestion et du son du pointeur de téléportation

Le pointeur de téléportation a maintenant amélioré les animations et les commentaires audio. Nous avons également amélioré la gestion du pointeur de téléportage afin qu’il gère plus facilement lors de la transition du pointage sur des surfaces proches à des surfaces plus éloignées.

Aide-mémoire de simulation d’entrée

La scène HandInteractionExamples dispose désormais d’un raccourci configurable pour afficher une page d’aide pour la simulation d’entrée

Feuille d’aide à la simulation d’entrée

Vue d’œil de simulation d’entrée avec la souris

Les utilisateurs peuvent désormais utiliser la souris pour simuler le suivi oculaire. Consultez le Eye Simulation Mode champ dans le profil de simulation d’entrée et définissez-le sur Souris. Cela remplace le champ précédent Simulate Eye Position .

Regard de la souris

Contrôleur de mouvement de simulation d’entrée en mode lecture de l’éditeur

Les utilisateurs peuvent désormais simuler le contrôleur de mouvement comme les mains en mode lecture de l’éditeur. Les boutons de déclencheur, de saisie et de menu sont actuellement pris en charge.

Pointeur de récupération conique

Les pointeurs de récupération peuvent désormais être configurés pour interroger des objets à proximité à l’aide d’un cône provenant du point de récupération plutôt que d’une sphère. Cela ressemble davantage au comportement de l’interface de HoloLens 2 par défaut, qui interroge les objets à proximité à l’aide d’un cône. Le DefaultHoloLens2InputSystemProfile a également été ajusté pour utiliser le nouveau ConicalGrabPointer.

Pointeur de récupération conique

Package TestUtilities

Il existe désormais un package (Microsoft.MixedReality.Toolkit.Unity.TestUtilities.2.5.0.unitypackage) qui contient l’infrastructure de test PlayMode et TestMode que MRTK utilise pour créer des tests de bout en bout. Cette infrastructure a été extrêmement pratique pour l’équipe MRTK elle-même, et nous sommes ravis que les consommateurs l’utilisent pour ajouter une couverture de test à leurs propres projets.

Le code suivant montre comment créer une main de test, l’afficher à un certain emplacement, la déplacer, puis la pincer et l’ouvrir.

TestHand leftHand = new TestHand(Handedness.Left);
yield return leftHand.Show(new Vector3(-0.1f, -0.1f, 0.5f));
yield return leftHand.SetGesture(ArticulatedHandPose.GestureId.Pinch);
yield return leftHand.Move(new Vector3(0.2f, 0.2f, 0));
yield return leftHand.SetGesture(ArticulatedHandPose.GestureId.Open);

Pour obtenir des instructions sur l’écriture d’un test à l’aide de ces TestUtilities, consultez cette section sur l’écriture de tests.

Pour obtenir des exemples de tests existants qui utilisent cette infrastructure, consultez PlayModeTests de MRTK.

Prise en charge des modules Unity Leap Motion 4.5.1

La prise en charge des modules Unity Leap Motion version 4.5.1 a été ajoutée et la prise en charge des ressources 4.4.0 a été supprimée. Les versions actuelles prises en charge des modules Leap Motion Unity sont 4.5.0 et 4.5.1.

Il existe également une étape supplémentaire pour l’intégration initiale de Leap Motion. Pour plus d’informations, consultez How to Configure the Leap Motion Hand Tracking in MRTK .

Spatial Awareness Mesh Observer gère mieux la personnalisation des matériaux

Avec cette version, les Windows Mixed Reality Spatial Mesh Observer composants et ont amélioré la Generic XR SDK Spatial Mesh Observer gestion des matériaux visuels. Les matériaux sont maintenant conservés lorsqu’un maillage a été mis à jour par l’observateur, où, auparavant, ils étaient réinitialisés à la propriété VisibleMaterial par défaut telle que configurée dans le profil.

Cela permet aux développeurs de modifier le matériau de maillage et de ne pas avoir les modifications remplacées de manière inattendue.

Link.xml créé dans le dossier MixedRealityToolkit.Generated

Avec l’introduction du gestionnaire de package Unity MRTK, MRTK écrit maintenant un link.xml fichier dans le Assets/MixedRealityToolkit.Generated dossier, si aucun n’est présent. Il est recommandé d’ajouter ce fichier (et link.xml.meta) au contrôle de code source. Link.xml est utilisé pour influencer la fonctionnalité de suppression du code managé de l’éditeur de liens Unity.

Pour plus d’informations sur le fichier de link.xml MRTK, consultez l’article Suppression du code MRTK et du code managé .

Unity 2019.3+: la boîte de dialogue de configuration MRTK ne tente plus d’activer la prise en charge XR héritée

Pour éviter les conflits potentiels lors de l’utilisation de la plateforme XR d’Unity, l’option permettant d’activer la prise en charge XR héritée a été supprimée de la boîte de dialogue de configuration MRTK. Si vous le souhaitez, la prise en charge de XR héritée peut être activée, dans Unity 2019, à l’aide de Modifier>les paramètres> dulecteur> ProjectXR Settings>Virtual Reality Pris en charge.

Réduction de la surcharge InitializeOnLoad

Nous avons travaillé pour réduire la quantité de travail qui s’exécute dans les gestionnaires InitializeOnLoad, ce qui devrait entraîner des améliorations de la vitesse de développement des boucles internes. Les gestionnaires InitializeOnLoad s’exécutent chaque fois qu’un script est compilé, avant d’entrer en mode lecture, ainsi qu’au lancement de l’éditeur. Ces gestionnaires s’exécutent désormais dans beaucoup moins de cas, ce qui entraîne des améliorations générales de la réactivité Unity.

Dans certains cas, il y avait un compromis qui devait être fait :

Contrôle de limites gradué

Contrôle des limites

Le contrôle de limites est sorti de l’expérience et est fourni avec un tas de nouvelles fonctionnalités et des tonnes de correctifs de bogues. Voici une liste des points forts de cette mise à jour :

  • les propriétés sont divisées en configurations, ce qui facilite la configuration du contrôle des limites
  • les configurations peuvent être partagées via des objets scriptables
  • chaque propriété/ propriété pouvant être scriptable est configurable au runtime
  • L’outil de contrôle bounds n’est plus recréé lors des modifications de propriété
  • prise en charge des handles de traduction
  • prise en charge complète des contraintes via le gestionnaire de contraintes
  • intégration du système élastique (expérimental)

L’ancien cadre englobant est maintenant déprécié et les objets de jeu existants à l’aide du cadre englobant peuvent être mis à niveau à l’aide de l’outil de migration ou de l’inspecteur de zone englobante.

Composant Gestionnaire de contraintes

Les contraintes peuvent désormais être utilisées par le contrôle de limites et le manipulateur d’objets via le nouveau composant gestionnaire de contraintes. Les deux composants créent un gestionnaire de contraintes par défaut et traitent automatiquement les contraintes attachées.

En plus du gestionnaire de contraintes de comportement automatique est également fourni avec un mode manuel qui permet aux utilisateurs de décider quelle contrainte doit être traitée. Pour cette raison, la façon dont nous affichons les contraintes dans l’inspecteur de propriétés a changé un peu.

Vue inspecteur montrant la sélection manuelle du gestionnaire de contraintes

Les contraintes appliquées au composant sont désormais affichées sous forme de liste dans le composant gestionnaire de contraintes, tandis que le composant qui utilise le gestionnaire de contraintes (contrôle de limites ou manipulateur d’objets) affiche désormais le gestionnaire de contraintes et le mode sélectionnés (automatique ou manuel). Pour plus d’informations, consultez la section Gestionnaire de contraintes dans notre documentation.

HoloLens 2 bouton mise à jour des matériaux

Mise à jour du matériau de la cage avant du bouton HoloLens 2 pour supprimer la couleur noire dans le MRC.

HoloLens 2 bouton mise à jour des matériaux

Mise à jour du panneau description, exemple de scène mobile

Panneau de description mis à jour. (SceneDescriptionPanelRev.prefab) La nouvelle conception fournit une barre supérieure qui permet à l’utilisateur d’ajuster/déplacer l’ensemble de la scène.

Mise à jour du panneau description

Visualisation de maillage spatial - impulsion sur air-tap

Exemple de nuanceur d’impulsions mis à jour pour que le maillage spatial corresponde au comportement de l’interpréteur de commandes de HoloLens 2.

Pulsation à l’aide d’un appui aérien

Système élastique (expérimental)

Système élastique2

MRTK est désormais fourni avec un système de simulation élastique qui comprend une grande variété de sous-classes extensibles et flexibles, offrant des liaisons pour des ressorts quaternion à 4 dimensions, des ressorts à volume 3 dimensions et des systèmes de ressorts linéaires simples.

Actuellement, les composants MRTK suivants qui prennent en charge le gestionnaire d’élastiques peuvent tirer parti des fonctionnalités élastiques :

Développement d’un menu élastiqueSaisir une tasse de café élastique

Joystick (expérimental)

Exemple d’interface joystick qui peut contrôler un objet cible volumineux.

Joystick

Sélecteur de couleurs (expérimental)

Contrôle expérimental qui permet de modifier facilement les couleurs des matériaux sur n’importe quel objet au moment de l’exécution.

Trois méthodes différentes de contrôle du sélecteur de couleurs

Quatre méthodes différentes de contrôle du sélecteur de couleurs

Changements cassants

Modifications des fichiers de définition d’assembly

Certains fichiers asmdef sont modifiés et prennent désormais uniquement en charge Unity 2018.4.13f1 ou version ultérieure. Les erreurs de compilation s’affichent lors de la mise à jour vers MRTK 2.5 dans les versions antérieures d’Unity. Vous pouvez résoudre ce problème en accédant à Assets\MRTK\Providers\XRSDK\Microsoft.MixedReality.Toolkit.Providers.XRSDK.asmdef dans la fenêtre du projet et en supprimant la référence manquante dans l’inspecteur. Répétez ces étapes avec Assets\MRTK\Providers\Oculus\XRSDK\Microsoft.MixedReality.Toolkit.Providers.XRSDK.Oculus.asmdef et Assets\MRTK\Providers\WindowsMixedReality\XRSDK\Microsoft.MixedReality.Toolkit.Providers.XRSDK.WMR.asmdef. Notez que vous devez rétablir les modifications en remplaçant ces trois fichiers asmdef par des fichiers d’origine (c’est-à-dire non modifiés) lors de la mise à niveau vers Unity 2019.

IMixedRealityPointerMediator

Cette interface a été mise à jour pour avoir une nouvelle fonction :

void SetPointerPreferences(IPointerPreferences pointerPreferences);

Si vous avez un médiateur de pointeur personnalisé qui ne sous-classe pas DefaultPointerMediator, vous devez implémenter cette nouvelle fonction. Consultez ce problème pour plus d’informations sur la raison pour laquelle cela a été ajouté. Cela a été ajouté pour garantir que les préférences de pointeur seraient explicitement transmises au médiateur, plutôt que de les faire implicitement en fonction de la présence d’un constructeur qui a pris un IPointerPreferences.

Rest / Device Portal API

La UseSSL propriété statique a été déplacée de Rest vers DevicePortal.

Si vous l’avez fait précédemment...

Rest.UseSSL = true

Faites-le maintenant...

DevicePortal.UseSSL = true

Link.xml

Si une application utilisait précédemment la distribution NuGet du MRTK, le link.xml fichier a été supprimé du package Foundation. Pour restaurer les règles de conservation du code, l’ouverture du projet dans Unity crée un fichier par défaut link.xml dans Assets/MixedRealityToolkit.Generated. Il est recommandé d’ajouter ce fichier (et link.xml.meta) au contrôle de code source.

Transformer les modifications de contrainte

La propriété TargetTransform a été marquée comme obsolète, car elle n’était pas utilisée par le système de contraintes. La logique de contrainte est basée sur la transformation passée aux méthodes Initialize et Apply. Les contraintes utilisateur dérivées qui s’appuient sur cette propriété peuvent mettre en cache TargetTransform dans leur implémentation en stockant la transformation du composant de contrainte pour obtenir le même comportement.

Le type de données de pose worldPoseOnManipulationStart du monde initial stocké a été modifié de MixedRealityPose en MixedRealityTransform, qui inclut la valeur d’échelle locale de l’objet manipulé. Avec cette modification, il n’est plus nécessaire de mettre en cache séparément les valeurs d’échelle initiales.

Nouvelle propriété dans IMixedRealityDictationSystem

Une nouvelle propriété AudioClip a été ajoutée à l’interface IMixedRealityDictationSystem. La AudioClip propriété permet d’accéder au clip audio associé à la session de dictée actuelle. Les utilisateurs doivent implémenter la propriété dans leurs scripts implémentant l’interface.

Les façades de service tournent vers le bas

Les façades de services sont refusées dans 2.5. Cette fonctionnalité a été ajoutée à l’origine pour faciliter la configuration des profils MRTK (en créant de faux GameObjects en scène représentant chacun des services de MRTK). À long terme, nous voulons éviter de créer de faux objets dans le jeu et d’essayer de les maintenir synchronisés (car les problèmes de synchronisation des données et de « source de vérité » sont notoirement difficiles à mettre à l’échelle et à obtenir correctement).

Dans la version 2.5, les gestionnaires de façade de service sont conservés pour garantir le bon déroulement de la mise à niveau du projet . Toutes les façades qui existent dans le projet seront supprimées par le gestionnaire de façade de service pour garantir que les scènes ouvertes dans la version 2.5 sont automatiquement corrigées.

Le code restant associé à la fonctionnalité de façade de service sera supprimé dans une version ultérieure.

Ajout du contrôleur de mouvement au service de simulation d’entrée

La simulation du contrôleur de mouvement est désormais proposée en mode de lecture de l’éditeur parallèlement à la simulation de main existante. Pour activer cette modification, de nombreuses fonctions/champs/propriétés actuels sont désormais marqués comme obsolètes, avec InputSimulationService.cs et MixedRealityInputSimulationProfile.cs obtenir les modifications les plus significatives. La logique et le comportement du code pertinent restent largement les mêmes, et la majorité des fonctions obsolètes, etc. sont liés au remplacement de la référence à « hand » par le terme plus générique « contrôleur » (par exemple, de DefaultHandSimulationMode à DefaultControllerSimulationMode). En plus d’obtenir de nouveaux noms, le type de retour de certaines nouvelles fonctions est mis à jour pour correspondre au changement de nom/comportement (par exemple, GetControllerDevice en fonction du retour BaseController d’origine GetHandDevice maintenant au lieu de SimulatedHand).

IInputSimulationService a maintenant de nouvelles propriétés MotionControllerDataLeft et MotionControllerDataRight. MixedRealityInputSimulationProfile inclut désormais de nouveaux champs pour le mappage du clavier de certains boutons du contrôleur de mouvement.

Problèmes connus

CameraCache peut créer une caméra lors de l’arrêt

Dans certaines situations (par exemple, lors de l’utilisation du fournisseur LeapMotion dans l’éditeur Unity), il est possible pour CameraCache de recréer la MainCamera lors de l’arrêt. Pour plus d’informations, consultez ce problème .

FileNotFoundException lorsque des exemples sont importés via le Gestionnaire de package Unity

En fonction de la longueur du chemin du projet, l’importation d’exemples via Unity Package Manager peut générer des messages FileNotFoundException dans la console Unity. En cause, le chemin d’accès au fichier « manquant » est plus long que MAX_PATH (256 caractères). Pour résoudre ce problème, raccourcissez la longueur du chemin d’accès du projet.

Aucun spatialiseur n’a été spécifié. L’application ne prend pas en charge Spatial Sound

Un avertissement « Aucun spatialiseur n’a été spécifié » s’affiche si un spatialiseur audio n’est pas configuré. Cela peut se produire si aucun package XR n’est installé, car Unity inclut des spatialiseurs dans ces packages.

Pour résoudre ce problème, vérifiez que :

  • Fenêtre>Un ou plusieurs packages XR sont installés dans le Gestionnaire de package

  • Mixed Reality Toolkit>Utilities>Configure Unity Project et effectuez une sélection pour Audio Spatializer

    Sélectionnez Audio Spatializer

NullReferenceException : référence d’objet non définie sur un instance d’un objet (SceneTransitionService.Initialize)

Dans certains cas, l’ouverture EyeTrackingDemo-00-RootScene peut provoquer une exception NullReferenceException dans la méthode Initialize de la classe SceneTransitionService. Cette erreur est due au fait que le profil de configuration du service de transition de scène n’est pas défini. Pour résoudre ce problème, procédez comme suit :

  • Accédez à l’objet MixedRealityToolkit dans la hiérarchie
  • Dans la fenêtre Inspecteur, sélectionnez Extensions
  • S’il n’est pas développé, développez Scene Transition Service
  • Définissez la valeur de Configuration Profilesur MRTKExamplesHubSceneTransitionServiceProfile

Correction de la transition de scène

Oculus Quest

Il existe actuellement un problème connu pour l’utilisation du plug-in Oculus XR avec lors du ciblage des plateformes autonomes. Vérifiez les mises à jour dans le suivi des bogues/les forums/notes de publication d’Oculus.

Le bogue est signifié avec cet ensemble de 3 erreurs :

Erreur du plug-in XR Oculus

UnityUI et TextMeshPro

Il existe un problème connu pour les versions plus récentes de TextMeshPro (1.5.0+ ou 2.1.1+), où la taille de police par défaut pour les listes déroulantes et l’espacement des caractères en gras a été modifiée.

Image TMP

Cela peut être résolu en rétrogradant vers une version antérieure de TextMeshPro. Pour plus d’informations, consultez le problème #8556 .