HoloLens (1. genel) temel bilgiler 101e: öykünücü ile projeyi tamamlatın

Önemli

karma gerçeklik akademik öğreticiler, HoloLens (1. gen), Unity 2017 ve karma gerçeklik derinlikli kulaklıklar ile tasarlanmıştır. Bu nedenle, hala bu cihazlarda geliştirme konusunda rehberlik arayan geliştiriciler için Bu öğreticilerin yerinde ayrılmanız önemlidir. bu öğreticiler, HoloLens 2 için kullanılan en son araç kümeleri veya etkileşimler ile güncelleştirilmeyecek ve Unity 'nin daha yeni sürümleriyle uyumlu olmayabilir. Desteklenen cihazlarda çalışmaya devam etmek için tutulacağız. HoloLens 2 için yeni bir öğretici serisi gönderildi.


bu öğreticide, kaze, hareketler, ses girişi, uzamsal ses ve uzamsal eşlemedahil olmak üzere HoloLens temel Windows Mixed Reality özelliklerini gösteren Unity 'de yerleşik olarak bulunan bir bütün projede size kılavuzluk edilir. Öğreticinin tamamlanması yaklaşık 1 saat sürer.

Cihaz desteği

Kurs HoloLens Modern kulaklıklar
MR temel kavramları 101E: Emulator ile projeyi tamamen doldurun ✔️

Başlamadan önce

Önkoşullar

  • doğru araçlarlayapılandırılmış Windows 10 bir bilgisayar.

Project dosyaları

  • Projenin gerektirdiği dosyaları indirin. Unity 2017,2 veya üstünü gerektirir.
    • Unity 5,6 desteğine hala ihtiyacınız varsa lütfen Bu sürümükullanın.
    • Unity 5,5 desteğine hala ihtiyacınız varsa lütfen Bu sürümükullanın.
    • Unity 5,4 desteğine hala ihtiyacınız varsa lütfen Bu sürümükullanın.
  • Dosyaları masaüstünüze veya diğer kolay bir konuma arşivlemeyi kaldırın. Klasör adını origamiolarak tutun.

Not

İndirilmeden önce kaynak koda bakmak isterseniz, GitHub kullanılabilir.

Bölüm 1-"Holo" Dünya

Bu bölümde, ilk Unity projemizi oluşturacağız ve derleme ve dağıtma sürecinde ilerleriz.

Hedefler

  • Holographic geliştirmesi için Unity 'yi ayarlayın.
  • Bir hologram oluşturun.
  • Yaptığınız bir hologram için bkz..

Yönergeler

  • Unity 'yi başlatın.
  • ’ı seçin.
  • Konumu daha önce arşivlenen origami klasörü olarak girin.
  • Origami öğesini seçin ve Klasör Seç' e tıklayın.
  • Yeni sahneyi Kaydet: Dosyasahneyi farklı kaydet.
  • Sahneyi origami olarak adlandırın ve Kaydet düğmesine basın.

Ana Kamerayı ayarlama

  • Hiyerarşi panelinde, ana kamera' ı seçin.
  • Denetçisinde , dönüşüm konumunu 0, 0, 0olarak ayarlayın.
  • Clear Flags özelliğini bulun ve açılan menüyü ufuk kutusundandüz renkolarak değiştirin.
  • Bir renk seçici açmak için arka plan alanına tıklayın.
  • R, G, B ve A 'yı 0olarak ayarlayın.

Sahneyi kurun

  • Hiyerarşi panelindeOluştur ve boş oluştur' a tıklayın.
  • Yeni oyun nesnesine sağ tıklayıp Yeniden Adlandır ' ı seçin. GameObject öğesini OrigamiCollectionolarak yeniden adlandırın.
  • Project panelindekiHologramlar klasöründen:
    • Aşamayı bir OrigamiCollectionalt öğesi olacak şekilde hiyerarşiye sürükleyin.
    • Sphere1öğesinin biralt öğesi olacak şekilde hiyerarşiye sürükleyin.
    • Sphere2öğesinin biralt öğesi olacak şekilde hiyerarşiye sürükleyin.
  • Hiyerarşi panelindeyönlü ışık nesnesine sağ tıklayın ve Sil' i seçin.
  • Hologramlar klasörden ışıklarıhiyerarşi panelininköküne sürükleyin.
  • HiyerarşideOrigamiCollection' yi seçin.
  • Denetçisinde, dönüştürme konumunu 0,-0,5, 2,0olarak ayarlayın.
  • Hologramlar önizlemesi için Unity 'deki oynat düğmesine basın.
  • Önizleme penceresinde origami nesnelerini görmeniz gerekir.
  • Önizleme modunu durdurmak için ikinci kez oynat 'a basın.

Projeyi Unity 'den Visual Studio dışa aktarma

  • Unity 'de dosya derleme Ayarlarseçin.
  • platform listesinden Windows deposu ' nu seçin ve platformu değiştir' e tıklayın.
  • SDK 'yi Universal 10 olarak ayarlayın ve türü D3Dolarak oluşturun .
  • Unity C# projelerinidenetleyin.
  • Sahneyi eklemek için Açık sahneler Ekle ' ye tıklayın.
  • oyuncu Ayarlar...seçeneğine tıklayın.
  • ınspector panelinde Windows Store logosunuseçin. ardından Ayarlar yayımlama' yı seçin.
  • Yetenekler bölümünde, mikrofon ve spatialperception yeteneklerini seçin.
  • derleme Ayarlar penceresine geri döndüğünüzde, oluştur' a tıklayın.
  • "App" adlı Yeni bir klasör oluşturun.
  • Uygulama klasörünetek tıklayın.
  • Klasör Seç' e basın.
  • Unity tamamlandığında, bir dosya Gezgini penceresi görüntülenir.
  • Uygulama klasörünü açın.
  • Origami Visual Studio çözümünüaçın.
  • Visual Studio en üstteki araç çubuğunu kullanarak, hedefi hata ayıklama ve ARM 'den X86'ye değiştirin.
    • cihaz düğmesinin yanındaki oka tıklayın ve HoloLens Emulator' ni seçin.
    • Hata Ayıkla- hata ayıklama olmadan Başlat 'A tıklayın veya CTRL + F5tuşlarına basın.
    • Bir süre sonra, öykünücü origami projesiyle başlayacaktır. Öykünücüyüilk kez başlatırken, öykünücünün başlaması 15 dakika kadar sürebilir. Başlatıldıktan sonra kapanmayın.

Bölüm 2-Gaze

Bu bölümde, hologramlar-- Gazeile etkileşimde bulunmanın ilk üç yolunu tanıtacağız.

Hedefler

  • Dünyadan kilitlenmiş bir imleç kullanarak Gaze 'ı görselleştirin.

Yönergeler

  • Unity projenize geri dönün ve hala açıksa derleme Ayarlar penceresini kapatın.
  • Project panelindeHologramlar klasörü seçin.
  • İmleç nesnesini, kök düzeyindeki hiyerarşi paneline sürükleyin.
  • Daha yakından bakmak için imleç nesnesine çift tıklayın.
  • Project panelinde betikler klasörüne sağ tıklayın.
  • Alt menü Oluştur ' a tıklayın.
  • C# betiğiniseçin.
  • Betik Dünya imleciniadlandırın. Note: ad, büyük/küçük harfe duyarlıdır. . Cs uzantısını eklemeniz gerekmez.
  • Hiyerarşi panelindeimleç nesnesini seçin.
  • Worldcursor betiğini Denetçi panelinesürükleyip bırakın.
  • Visual Studio ' de açmak için Worldcursor betiğine çift tıklayın.
  • Bu kodu kopyalayın ve Worldcursor. cs dosyasına yapıştırın ve Tümünü kaydedin.
using UnityEngine;

public class WorldCursor : MonoBehaviour
{
    private MeshRenderer meshRenderer;

    // Use this for initialization
    void Start()
    {
        // Grab the mesh renderer that's on the same object as this script.
        meshRenderer = this.gameObject.GetComponentInChildren<MeshRenderer>();
    }

    // Update is called once per frame
    void Update()
    {
        // Do a raycast into the world based on the user's
        // head position and orientation.
        var headPosition = Camera.main.transform.position;
        var gazeDirection = Camera.main.transform.forward;

        RaycastHit hitInfo;

        if (Physics.Raycast(headPosition, gazeDirection, out hitInfo))
        {
            // If the raycast hit a hologram...
            // Display the cursor mesh.
            meshRenderer.enabled = true;

            // Move thecursor to the point where the raycast hit.
            this.transform.position = hitInfo.point;

            // Rotate the cursor to hug the surface of the hologram.
            this.transform.rotation = Quaternion.FromToRotation(Vector3.up, hitInfo.normal);
        }
        else
        {
            // If the raycast did not hit a hologram, hide the cursor mesh.
            meshRenderer.enabled = false;
        }
    }
}
  • uygulamayı dosya derleme Ayarlaryeniden derleyin.
  • emulator 'a dağıtmak için daha önce kullanılan Visual Studio çözümüne dönün.
  • İstendiğinde ' tümünü yeniden yükle ' seçeneğini belirleyin.
  • Hata Ayıkla- hata ayıklama olmadan Başlat 'A tıklayın veya CTRL + F5tuşlarına basın.
  • Sahnenin etrafında bakmak için Xbox denetleyicisini kullanın. İmlecin nesne şekliyle nasıl etkileşime gireceğini görürsünüz.

Bölüm 3-hareketler

Bu bölümde, hareketleriçin destek ekleyeceğiz. Kullanıcı bir kağıt küresi seçtiğinde, Unity 'nin fizik altyapısını kullanarak yerçekimi açıp Sphere ' ı düşeceğiz.

Hedefler

  • Seçim hareketi ile hologramlar için denetim yapın.

Yönergeler

Seçim hareketini algılayabileceğinden, bir komut dosyası oluşturarak başlayacağız.

  • Betikler klasöründe, GazeGestureManageradlı bir komut dosyası oluşturun.
  • GazeGestureManager betiğini hiyerarşideki OrigamiCollection nesnesine sürükleyin.
  • Visual Studio 'de GazeGestureManager betiğini açın ve aşağıdaki kodu ekleyin:
using UnityEngine;
using UnityEngine.XR.WSA.Input;

public class GazeGestureManager : MonoBehaviour
{
    public static GazeGestureManager Instance { get; private set; }

    // Represents the hologram that is currently being gazed at.
    public GameObject FocusedObject { get; private set; }

    GestureRecognizer recognizer;

    // Use this for initialization
    void Start()
    {
        Instance = this;

        // Set up a GestureRecognizer to detect Select gestures.
        recognizer = new GestureRecognizer();
        recognizer.Tapped += (args) =>
        {
            // Send an OnSelect message to the focused object and its ancestors.
            if (FocusedObject != null)
            {
                FocusedObject.SendMessageUpwards("OnSelect", SendMessageOptions.DontRequireReceiver);
            }
        };
        recognizer.StartCapturingGestures();
    }

    // Update is called once per frame
    void Update()
    {
        // Figure out which hologram is focused this frame.
        GameObject oldFocusObject = FocusedObject;

        // Do a raycast into the world based on the user's
        // head position and orientation.
        var headPosition = Camera.main.transform.position;
        var gazeDirection = Camera.main.transform.forward;

        RaycastHit hitInfo;
        if (Physics.Raycast(headPosition, gazeDirection, out hitInfo))
        {
            // If the raycast hit a hologram, use that as the focused object.
            FocusedObject = hitInfo.collider.gameObject;
        }
        else
        {
            // If the raycast did not hit a hologram, clear the focused object.
            FocusedObject = null;
        }

        // If the focused object changed this frame,
        // start detecting fresh gestures again.
        if (FocusedObject != oldFocusObject)
        {
            recognizer.CancelGestures();
            recognizer.StartCapturingGestures();
        }
    }
}
  • Betikler klasöründe, bu kez Spburcommandsadlı başka bir betik oluşturun.
  • Hiyerarşi görünümündeki OrigamiCollection nesnesini genişletin.
  • Spburcommands betiğini hiyerarşi panelindeki Sphere1 nesnesine sürükleyin.
  • Spburcommands betiğini hiyerarşi panelindeki Sphere2 nesnesine sürükleyin.
  • betiği düzenlenmek üzere Visual Studio açın ve varsayılan kodu bununla değiştirin:
using UnityEngine;

public class SphereCommands : MonoBehaviour
{
    // Called by GazeGestureManager when the user performs a Select gesture
    void OnSelect()
    {
        // If the sphere has no Rigidbody component, add one to enable physics.
        if (!this.GetComponent<Rigidbody>())
        {
            var rigidbody = this.gameObject.AddComponent<Rigidbody>();
            rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
        }
    }
}
  • uygulamayı HoloLens öykünücüye aktarın, derleyin ve dağıtın.
  • Sahneye göz atın ve dünyanın her birinde ortalanın.
  • Xbox denetleyicisindeki bir düğmeye basın veya seçim hareketini taklit etmek Için ara çubuğuna basın.

Bölüm 4-ses

Bu bölümde, iki sesli komutiçin destek ekleyeceğiz: "dünyayı sıfırlama", Sphere 'in orijinal konumlarına dönmesi için "küreyi bırakma" ve Sphere 'in düşdüğünü sağlamak için.

Hedefler

  • Arka planı her zaman dinleyen sesli komutlar ekleyin.
  • Bir ses komutuna tepki veren bir hologram oluşturun.

Yönergeler

  • Betikler klasöründe, SpeechManageradlı bir komut dosyası oluşturun.
  • SpeechManager betiğini hiyerarşideki OrigamiCollection nesnesine sürükleyin
  • Visual Studio 'de SpeechManager betiğini açın.
  • Bu kodu kopyalayın ve SpeechManager. cs dosyasına yapıştırın ve Tümünü kaydedin:
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Windows.Speech;

public class SpeechManager : MonoBehaviour
{
    KeywordRecognizer keywordRecognizer = null;
    Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();

    // Use this for initialization
    void Start()
    {
        keywords.Add("Reset world", () =>
        {
            // Call the OnReset method on every descendant object.
            this.BroadcastMessage("OnReset");
        });

        keywords.Add("Drop Sphere", () =>
        {
            var focusObject = GazeGestureManager.Instance.FocusedObject;
            if (focusObject != null)
            {
                // Call the OnDrop method on just the focused object.
                focusObject.SendMessage("OnDrop", SendMessageOptions.DontRequireReceiver);
            }
        });

        // Tell the KeywordRecognizer about our keywords.
        keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());

        // Register a callback for the KeywordRecognizer and start recognizing!
        keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
        keywordRecognizer.Start();
    }

    private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
    {
        System.Action keywordAction;
        if (keywords.TryGetValue(args.text, out keywordAction))
        {
            keywordAction.Invoke();
        }
    }
}
  • Visual Studio ' de Spburcommands betiğini açın.
  • Komut dosyasını şu şekilde okunacak şekilde güncelleştirin:
using UnityEngine;

public class SphereCommands : MonoBehaviour
{
    Vector3 originalPosition;

    // Use this for initialization
    void Start()
    {
        // Grab the original local position of the sphere when the app starts.
        originalPosition = this.transform.localPosition;
    }

    // Called by GazeGestureManager when the user performs a Select gesture
    void OnSelect()
    {
        // If the sphere has no Rigidbody component, add one to enable physics.
        if (!this.GetComponent<Rigidbody>())
        {
            var rigidbody = this.gameObject.AddComponent<Rigidbody>();
            rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
        }
    }

    // Called by SpeechManager when the user says the "Reset world" command
    void OnReset()
    {
        // If the sphere has a Rigidbody component, remove it to disable physics.
        var rigidbody = this.GetComponent<Rigidbody>();
        if (rigidbody != null)
        {
            rigidbody.isKinematic = true;
            Destroy(rigidbody);
        }

        // Put the sphere back into its original local position.
        this.transform.localPosition = originalPosition;
    }

    // Called by SpeechManager when the user says the "Drop sphere" command
    void OnDrop()
    {
        // Just do the same logic as a Select gesture.
        OnSelect();
    }
}
  • uygulamayı HoloLens öykünücüye aktarın, derleyin ve dağıtın.
  • Öykünücü bilgisayarınızın mikrofonunu destekleyecektir ve sesinize yanıt verir: görünümü, imlecin küreden birinde olması için ayarlayın ve "Sphere Drop" deyin.
  • "Dünyayı Sıfırla" deyin ve bunları ilk konumlarına geri getirin.

Bölüm 5-uzamsal ses

Bu bölümde, uygulamaya müzik ekleyecek ve ardından belirli eylemlerde ses efektlerini tetikleyeceğiz. 3B alanda belirli bir konuma ses vermek için uzamsal ses kullanacağız.

Hedefler

  • Dünyadaki hologramlar dinleyin.

Yönergeler

  • Unity 'nin üstteki menüden seç Project > ses Ayarlar düzenle
  • Spatializer eklenti ayarını bulun ve MS HRTF spatializer' ı seçin.
  • Hologramlar klasöründen, Ambience nesnesini hiyerarşi panelinde OrigamiCollection nesnesine sürükleyin.
  • OrigamiCollection öğesini seçin ve ses kaynağı bileşenini bulun. Bu özellikleri değiştirin:
    • Spatileştir özelliğini denetleyin.
    • Uyanık durumunda çal 'a bakın.
    • Kaydırıcıyı hemen sağa sürükleyerek, uzamsal Blend 'yi 3B olarak değiştirin.
    • Loop özelliğini denetleyin.
    • 3b ses Ayarlargenişletin ve doppler düzeyiiçin 0,1 girin.
    • Toplu rolloff olarak Logaritmik rolloffayarlayın.
    • Maksimum mesafeyi20olarak ayarlayın.
  • Betikler klasöründe, SphereSoundsadlı bir komut dosyası oluşturun.
  • SphereSounds öğesini hiyerarşideki Sphere1 ve Sphere2 nesnelerine sürükleyin.
  • Visual Studio 'de SphereSounds açın, aşağıdaki kodu güncelleştirin ve tümünü kaydedin.
using UnityEngine;

public class SphereSounds : MonoBehaviour
{
    AudioSource impactAudioSource = null;
    AudioSource rollingAudioSource = null;

    bool rolling = false;

    void Start()
    {
        // Add an AudioSource component and set up some defaults
        impactAudioSource = gameObject.AddComponent<AudioSource>();
        impactAudioSource.playOnAwake = false;
        impactAudioSource.spatialize = true;
        impactAudioSource.spatialBlend = 1.0f;
        impactAudioSource.dopplerLevel = 0.0f;
        impactAudioSource.rolloffMode = AudioRolloffMode.Logarithmic;
        impactAudioSource.maxDistance = 20f;

        rollingAudioSource = gameObject.AddComponent<AudioSource>();
        rollingAudioSource.playOnAwake = false;
        rollingAudioSource.spatialize = true;
        rollingAudioSource.spatialBlend = 1.0f;
        rollingAudioSource.dopplerLevel = 0.0f;
        rollingAudioSource.rolloffMode = AudioRolloffMode.Logarithmic;
        rollingAudioSource.maxDistance = 20f;
        rollingAudioSource.loop = true;

        // Load the Sphere sounds from the Resources folder
        impactAudioSource.clip = Resources.Load<AudioClip>("Impact");
        rollingAudioSource.clip = Resources.Load<AudioClip>("Rolling");
    }

    // Occurs when this object starts colliding with another object
    void OnCollisionEnter(Collision collision)
    {
        // Play an impact sound if the sphere impacts strongly enough.
        if (collision.relativeVelocity.magnitude >= 0.1f)
        {
            impactAudioSource.Play();
        }
    }

    // Occurs each frame that this object continues to collide with another object
    void OnCollisionStay(Collision collision)
    {
        Rigidbody rigid = gameObject.GetComponent<Rigidbody>();

        // Play a rolling sound if the sphere is rolling fast enough.
        if (!rolling && rigid.velocity.magnitude >= 0.01f)
        {
            rolling = true;
            rollingAudioSource.Play();
        }
        // Stop the rolling sound if rolling slows down.
        else if (rolling && rigid.velocity.magnitude < 0.01f)
        {
            rolling = false;
            rollingAudioSource.Stop();
        }
    }

    // Occurs when this object stops colliding with another object
    void OnCollisionExit(Collision collision)
    {
        // Stop the rolling sound if the object falls off and stops colliding.
        if (rolling)
        {
            rolling = false;
            impactAudioSource.Stop();
            rollingAudioSource.Stop();
        }
    }
}
  • Betiği kaydedin ve Unity 'ye geri dönün.
  • uygulamayı HoloLens öykünücüye aktarın, derleyin ve dağıtın.
  • Tüm etkiyi almak ve seslerin değiştirilmesini dinlemek için aşamasından daha fazla ve daha fazla hareket etmek için giyim kulaklıkları.

Bölüm 6-uzamsal eşleme

Artık, oyun panosunu gerçek dünyada gerçek bir nesneye yerleştirmek için uzamsal eşlemeyi kullanacağız.

Hedefler

  • Gerçek dünyayı sanal dünyaya taşıyın.
  • Hologramlar için en iyi şekilde yerinizi koyun.

Yönergeler

  • Project panelinde Hologramlar klasöre tıklayın.
  • Uzamsal eşleme varlığını hiyerarşininköküne sürükleyin.
  • Hiyerarşideki uzamsal eşleme nesnesine tıklayın.
  • Inspector panelinde, aşağıdaki özellikleri değiştirin:
    • Görsel kafesleri çiz kutusunu işaretleyin.
    • Çizim malzemesini bulun ve sağdaki daireyi tıklatın. Üstteki arama alanına "tel çerçeve" yazın. Sonuca tıklayın ve ardından pencereyi kapatın.
  • uygulamayı HoloLens öykünücüye aktarın, derleyin ve dağıtın.
  • Uygulama çalıştığında, daha önce taranmış bir gerçek zamanlı odadan oluşan bir ağ tel çerçeve olarak işlenir.
  • Bir kayan Sphere 'ın aşamayı nasıl kapatağını ve kata kadar nasıl düştüğünü izleyin!

Şimdi de OrigamiCollection nasıl yeni bir konuma taşınacağını göstereceğiz:

  • Betikler klasöründe, TapToPlaceParentadlı bir komut dosyası oluşturun.
  • HiyerarşideOrigamiCollection öğesini genişletin ve aşama nesnesini seçin.
  • TapToPlaceParent betiğini Stage nesnesine sürükleyin.
  • Visual Studio 'de TapToPlaceParent betiğini açın ve aşağıdaki gibi güncelleştirin:
using UnityEngine;

public class TapToPlaceParent : MonoBehaviour
{
    bool placing = false;

    // Called by GazeGestureManager when the user performs a Select gesture
    void OnSelect()
    {
        // On each Select gesture, toggle whether the user is in placing mode.
        placing = !placing;

        // If the user is in placing mode, display the spatial mapping mesh.
        if (placing)
        {
            SpatialMapping.Instance.DrawVisualMeshes = true;
        }
        // If the user is not in placing mode, hide the spatial mapping mesh.
        else
        {
            SpatialMapping.Instance.DrawVisualMeshes = false;
        }
    }

    // Update is called once per frame
    void Update()
    {
        // If the user is in placing mode,
        // update the placement to match the user's gaze.

        if (placing)
        {
            // Do a raycast into the world that will only hit the Spatial Mapping mesh.
            var headPosition = Camera.main.transform.position;
            var gazeDirection = Camera.main.transform.forward;

            RaycastHit hitInfo;
            if (Physics.Raycast(headPosition, gazeDirection, out hitInfo,
                30.0f, SpatialMapping.PhysicsRaycastMask))
            {
                // Move this object's parent object to
                // where the raycast hit the Spatial Mapping mesh.
                this.transform.parent.position = hitInfo.point;

                // Rotate this object's parent object to face the user.
                Quaternion toQuat = Camera.main.transform.localRotation;
                toQuat.x = 0;
                toQuat.z = 0;
                this.transform.parent.rotation = toQuat;
            }
        }
    }
}
  • Uygulamayı dışarı aktarın, derleyin ve dağıtın.
  • Artık bu oyunu, seçme hareketini (a veya ara çubuğu) kullanarak ve ardından yeni bir konuma taşıyarak ve seçme hareketini yeniden kullanarak belirli bir konuma kastebilmeniz gerekir.

Son

Bu öğreticinin sonu!

Öğrendikleriniz:

  • Unity 'de holographic uygulaması oluşturma.
  • Gaze, hareket, ses, ses ve uzamsal eşleme kullanımı.
  • Visual Studio kullanarak uygulama oluşturma ve dağıtma.

Artık kendi holografik uygulamalarınızı oluşturmaya başlayabilirsiniz!

Ayrıca bkz.