API WinRT avec Unity pour HoloLens

Cette page explique comment utiliser les API WinRT dans votre projet Unity pour HoloLens.

API Mixed Reality

Un sous-ensemble Mixed Reality du Kit de développement logiciel (SDK) Windows a été mis à disposition dans une projection compatible avec .NET Standard 2.0, que vous pouvez utiliser dans votre projet sans directives de préprocesseur. La plupart des API des espaces de noms Windows.Perception et Windows.UI.Input.Spatial sont incluses et peuvent être étendues pour inclure d’autres API à l’avenir. Les API projetées peuvent être utilisées lors de l’exécution dans l’éditeur, ce qui permet d’utiliser le mode Lecture. Pour utiliser cette projection, apportez les modifications suivantes à votre projet :

  1. Ajoutez une référence au package UPM Mixed Reality Projections WinRT à l’aide de l’outil de fonctionnalité Mixed Reality.

    Liste du package Mixed Reality Projections WinRT sous l’en-tête Platform Support dans l’outil de fonctionnalité Mixed Reality.

  2. Préfixer les références à l’espace Windows de noms avec Microsoft.:

    using namespace Microsoft.Windows.Perception.Spatial;
    

    Notes

    L’importation de ce package peut entraîner des problèmes de résolution d’espace de noms si votre projet a des références inline à des Windows.* espaces de noms, le compilateur tentant de résoudre un espace de noms correspondant Microsoft.Windows.* . Dans ce cas, il est recommandé de mettre à jour ces références à utiliser global::Windows.* ou de mettre à jour ces scripts pour importer l’espace de noms spécifique Windows.* en tant qu’instruction using .

  3. Remplacez les casts de pointeurs natifs par FromNativePtr:

    var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);
    

Inclure de manière conditionnelle les appels d’API WinRT

Vous pouvez également utiliser les API WinRT dans les projets Unity conçus pour la plateforme plateforme Windows universelle et Xbox One à l’aide de directives de préprocesseur. Tout code que vous écrivez dans des scripts Unity qui ciblent des API WinRT doit être inclus de manière conditionnelle uniquement pour ces builds.

Pour ce faire, vous pouvez effectuer deux étapes dans Unity :

  1. Le niveau de compatibilité de l’API doit être défini sur .NET 4.6 ou .NET Standard 2.0 dans les paramètres du lecteur
    • Modifier>Paramètres> du projetJoueur>Configuration>Niveau de compatibilité de l’API pour .NET 4.6 ou .NET Standard 2.0
  2. La directive de préprocesseur ENABLE_WINMD_SUPPORT doit être encapsulée autour de tout code utilisé par WinRT

L’extrait de code suivant provient de la page manuelle Unity pour plateforme Windows universelle : API WinRT dans les scripts C#. Dans cet exemple, un ID de publicité est retourné, mais uniquement sur les builds UWP et Xbox One :

using UnityEngine;
public class WinRTAPI : MonoBehaviour {
    void Update() {
        auto adId = GetAdvertisingId();
        // ...
    }

    string GetAdvertisingId() {
        #if ENABLE_WINMD_SUPPORT
            return Windows.System.UserProfile.AdvertisingManager.AdvertisingId;
        #else
            return "";
        #endif
    }
}

Modifier vos scripts dans un projet Unity C#

Lorsque vous double-cliquez sur un script dans l’éditeur Unity, il lance par défaut votre script dans un projet d’éditeur. Les API WinRT semblent inconnues, car le projet Visual Studio ne référence pas le Windows Runtime. La directive ENABLE_WINMD_SUPPORT n’est pas définie et tout code #if encapsulé est ignoré jusqu’à ce que vous générez votre projet dans une solution Visual Studio UWP.

Voir aussi