Aracılığıyla paylaş


HoloLens (1. nesil) Giriş 211: Hareket

Önemli

Karma Gerçeklik Academy öğreticileri HoloLens (1. nesil), Unity 2017 ve Karma Gerçeklik Immersive Headsets düşünülerek tasarlanmıştır. Bu nedenle, bu cihazlar için geliştirme konusunda hala rehberlik arayan geliştiriciler için bu öğreticileri yerinde bırakmanın önemli olduğunu hissediyoruz. Bu öğreticiler, HoloLens 2 için kullanılan en son araç kümeleri veya etkileşimlerle güncelleştirilmez ve Unity'nin daha yeni sürümleriyle uyumlu olmayabilir. Desteklenen cihazlarda çalışmaya devam etmek için bakımları yapılır. HoloLens 2 için yeni bir öğretici serisi yayınlanmıştır.

Hareketler , kullanıcı amacını eyleme çevirir. Hareketler sayesinde kullanıcılar hologramlarla etkileşimde bulunabilir. Bu kursta kullanıcının ellerini izlemeyi, kullanıcı girişlerine yanıt vermeyi ve kullanıcıya el durumuna ve konumuna göre geri bildirim sağlamayı öğreneceksiniz.

MR Basics 101'de hologramlarımızla etkileşime geçmek için basit bir hava dokunma hareketi kullandık. Şimdi, havadan dokunma hareketinin ötesine geçip yeni kavramları keşfederek şunları yapacağız:

  • Kullanıcının elinin ne zaman izlendiğini algılayın ve kullanıcıya geri bildirim sağlayın.
  • Hologramlarımızı döndürmek için gezinti hareketi kullanın.
  • Kullanıcının eli görüntüden çıkmak üzereyken geri bildirimde bulunun.
  • Kullanıcıların hologramları elleriyle taşımasına izin vermek için işleme olaylarını kullanın.

Bu kursta, MR Input 210'da oluşturduğumuz Unity projesi Model Gezgini'ni yeniden ziyaret edeceğiz. Astronot arkadaşımız bu yeni hareket kavramlarını keşfetmemize yardımcı olmak için geri döndü.

Önemli

Aşağıdaki bölümlerin her birine eklenen videolar Unity'nin eski bir sürümü ve Karma Gerçeklik Araç Seti kullanılarak kaydedilmiştir. Adım adım yönergeler doğru ve güncel olsa da, ilgili videolarda güncel olmayan betikler ve görseller görebilirsiniz. Videolar, gelecek nesiller için ve ele alınan kavramlar hala geçerli olduğu için dahil olmaya devam etmektedir.

Cihaz desteği

Kurs HoloLens Çevreleyici kulaklıklar
MR Giriş 211: Hareket ✔️ ✔️

Başlamadan önce

Önkoşullar

Proje dosyaları

  • Projenin gerektirdiği dosyaları indirin. Unity 2017.2 veya sonraki bir sürümü gerektirir.
  • Dosyaları masaüstünüzde veya ulaşılmaya kolay başka bir konumda arşivden kaldırın.

Not

İndirmeden önce kaynak kodu incelemek isterseniz GitHub'da kullanılabilir.

Errata ve Notlar

  • Kodunuzda kesme noktalarına gitmek için Visual Studio'da Araçlar-Seçenekler-Hata>> Ayıklama altında "Yalnızca Kodumu Etkinleştir" seçeneğinin devre dışı bırakılması (işaretlenmemiş) olması gerekir.

Bölüm 0 - Unity Kurulumu

Yönergeler

  1. Unity'i başlatın.
  2. ’ı seçin.
  3. Daha önce arşivlediğiniz Hareket klasörüne gidin.
  4. Başlangıç/Modeli Gezgini klasörünü bulun ve seçin.
  5. Klasör Seç düğmesine tıklayın.
  6. Proje panelinde Sahneler klasörünü genişletin.
  7. Unity'de yüklemek için ModelExplorer sahnesine çift tıklayın.

Oluşturma

  1. Unity'de Dosya > Derleme Ayarları'nı seçin.
  2. Derlemedeki Sahneler/ModelExplorer listelenmiyorsa, sahneyi eklemek için Açık Sahne Ekle'ye tıklayın.
  3. Özellikle HoloLens için geliştiriyorsanız Hedef cihazıHoloLens olarak ayarlayın. Aksi takdirde , Herhangi bir cihazda bırakın.
  4. Derleme Türü'ninD3D ve SDK'nınEn Son yüklü (SDK 16299 veya üzeri olmalıdır) olarak ayarlandığından emin olun.
  5. Oluştur'a tıklayın.
  6. "Uygulama" adlı yeni bir Klasör oluşturun.
  7. Uygulama klasörüne tek tek tıklayın.
  8. Klasör Seç'e bastığında Unity, Visual Studio için projeyi oluşturmaya başlar.

Unity tamamlandığında bir Dosya Gezgini penceresi görüntülenir.

  1. Uygulama klasörünü açın.
  2. ModelExplorer Visual Studio Çözümünü açın.

HoloLens'e dağıtıyorsanız:

  1. Visual Studio'da üst araç çubuğunu kullanarak hedefi Hata Ayıklama'dan Yayın'a ve ARM'den x86'ya değiştirin.
  2. Yerel Makine düğmesinin yanındaki açılan oka tıklayın ve Uzak Makine'yi seçin.
  3. HoloLens cihazınızın IP adresini girin ve Kimlik Doğrulama Modu'nu Evrensel (Şifrelenmemiş Protokol) olarak ayarlayın. Seç’e tıklayın. Cihazınızın IP adresini bilmiyorsanız Ayarlar > Ağ & İnternet > Gelişmiş Seçenekleri'ne bakın.
  4. Üst menü çubuğunda Hata Ayıkla -> Hata ayıklama olmadan başlat'a tıklayın veya Ctrl + F5 tuşlarına basın. Cihazınıza ilk kez dağıtılıyorsa, bunu Visual Studio ile eşleştirmeniz gerekir.
  5. Uygulama dağıtıldığında, Fitbox'ı bir seçme hareketiyle kapatabilirsiniz.

Çevreleyici bir mikrofonlu kulaklığa dağıtıyorsanız:

  1. Visual Studio'daki üst araç çubuğunu kullanarak hedefi Hata Ayıklama'dan Yayın'a ve ARM'den x64'e değiştirin.
  2. Dağıtım hedefinin Yerel Makine olarak ayarlandığından emin olun.
  3. Üst menü çubuğunda Hata Ayıkla -> Hata ayıklama olmadan başlat'a tıklayın veya Ctrl + F5 tuşlarına basın.
  4. Uygulama dağıtıldığında, tetikleyiciyi bir hareket denetleyicisine çekerek Fitbox'ı kapatabilirsiniz.

Not

Visual Studio Hataları panelinde bazı kırmızı hatalar görebilirsiniz. Onları yok saymak güvenlidir. Gerçek derleme ilerleme durumunu görüntülemek için Çıkış paneline geçin. Çıkış panelindeki hatalar için bir düzeltme yapmanız gerekir (çoğu zaman bunların nedeni betikteki bir hatadır).

1. Bölüm - El ile algılanan geri bildirim

Hedefler

  • El izleme olaylarına abone olun.
  • Bir el izlenirken kullanıcıları göstermek için imleç geri bildirimini kullanın.

Not

HoloLens 2 üzerinde, eller görünür olduğunda (yalnızca bir parmak yukarı dönükken değil) algılanan eller ateş eder.

Yönergeler

  • Hiyerarşi panelinde InputManager nesnesini genişletin.
  • GesturesInput nesnesini arayın ve seçin.

InteractionInputSource.cs betiği şu adımları gerçekleştirir:

  1. InteractionSourceDetected ve InteractionSourceLost olaylarına abone olur.
  2. El Algılandı durumunu ayarlar.
  3. InteractionSourceDetected ve InteractionSourceLost olaylarının aboneliklerini kaldırır.

Ardından imlecimizi MR Input 210'dan kullanıcının eylemlerine bağlı olarak geri bildirim gösteren bir imleç olarak yükselteceğiz.

  1. Hiyerarşi panelinde İmleç nesnesini seçin ve silin.
  2. Proje panelinde CursorWithFeedback'i arayın ve Hiyerarşi paneline sürükleyin.
  3. Hiyerarşi panelinde InputManager'a tıklayın, ardından CursorWithFeedback nesnesini Hiyerarşiden InputManager'ın SimpleSinglePointerSelector'ın Inspector'ın alt kısmındaki İmleç alanına sürükleyin.
  4. HiyerarşideCursorWithFeedback öğesine tıklayın.
  5. Denetçi panelinde, Nesne İmleci betiğinde İmleç Durumu Verileri'ni genişletin.

İmleç Durumu Verileri şöyle çalışır:

  • Herhangi bir Gözlem durumu, hiçbir elin algılanmadı ve kullanıcının yalnızca etrafa baktığını gösterir.
  • Herhangi bir Etkileşim durumu, bir elin veya denetleyicinin algılandığını gösterir.
  • Herhangi bir Hover durumu, kullanıcının bir holograma baktığı anlamına gelir.

Yapılandırma ve Dağıtma

  • Unity'de, uygulamayı yeniden oluşturmak için Dosya > Derleme Ayarları'nı kullanın.
  • Uygulama klasörünü açın.
  • Henüz açık değilse ModelExplorer Visual Studio Çözümünü açın.
    • (Bu projeyi kurulum sırasında Visual Studio'da zaten derlediyseniz/dağıttıysanız, söz konusu VS örneğini açabilir ve istendiğinde 'Tümünü Yeniden Yükle'ye tıklayabilirsiniz).
  • Visual Studio'da Hata Ayıkla -> Hata Ayıklama Olmadan Başlat'a tıklayın veya Ctrl + F5 tuşlarına basın.
  • Uygulama HoloLens'e dağıtıldıktan sonra, hava dokunma hareketini kullanarak fitbox'ı kapatın.
  • El izlemeyi başlatmak için elinizi görünüme taşıyın ve işaret parmağınızı gökyüzüne doğru hareket ettirin.
  • Elinizi sola, sağa, yukarı ve aşağı hareket ettirin.
  • Eliniz algılandığında ve görünümden kaybolduğunda imlecin nasıl değiştiğini izleyin.
  • Çevreleyici bir mikrofonlu kulaklık kullanıyorsanız oyun kumandanıza bağlanmanız ve bağlantınızı kesmeniz gerekir. Bağlı bir denetleyici her zaman "kullanılabilir" olacağı için bu geri bildirim çevreleyici bir cihazda daha az ilgi çekici hale gelir.

2. Bölüm - Gezinti

Hedefler

  • Astronotu döndürmek için Gezinti hareketi olaylarını kullanın.

Yönergeler

Uygulamamızda Gezinti hareketlerini kullanmak için GestureAction.cs dosyasını düzenleyerek Gezinti hareketi gerçekleştiğinde nesneleri döndüreceğiz. Buna ek olarak, Gezinti kullanılabilir olduğunda görüntülenmesi için imlece geri bildirim ekleyeceğiz.

  1. Hiyerarşi panelinde CursorWithFeedback'i genişletin.
  2. Hologramlar klasöründe ScrollFeedback varlığını bulun.
  3. ScrollFeedback prefab öğesini sürükleyip HiyerarşidekiCursorWithFeedback GameObject üzerine bırakın.
  4. CursorWithFeedback'e tıklayın.
  5. Denetçi panelinde Bileşen Ekle düğmesine tıklayın.
  6. Menüde CursorFeedback arama kutusuna yazın. Arama sonucunu seçin.
  7. ScrollFeedback nesnesini Hiyerarşi'denSürükleyip Denetçi'dekiİmleç Geri Bildirimi bileşeninde Bulunan Kaydırma Algılanan Oyun Nesnesi özelliğine bırakın.
  8. Hiyerarşi panelinde AstroMan nesnesini seçin.
  9. Denetçi panelinde Bileşen Ekle düğmesine tıklayın.
  10. Menüde, Hareket Eylemi arama kutusuna yazın. Arama sonucunu seçin.

Ardından, Visual Studio'da GestureAction.cs dosyasını açın. Kodlama alıştırması 2.c'de betiği düzenleyerek aşağıdakileri yapın:

  1. Gezinti hareketi her gerçekleştirildiğinde AstroMan nesnesini döndürün.
  2. Nesneye uygulanan döndürme miktarını denetlemek için rotationFactor değerini hesaplayın.
  3. Kullanıcı elini sola veya sağa hareket ettiğinde nesneyi y ekseni etrafında döndürün.

Betikte 2.c kodlama alıştırmalarını tamamlayın veya kodu aşağıdaki tamamlanmış çözümle değiştirin:

using HoloToolkit.Unity.InputModule;
using UnityEngine;

/// <summary>
/// GestureAction performs custom actions based on
/// which gesture is being performed.
/// </summary>
public class GestureAction : MonoBehaviour, INavigationHandler, IManipulationHandler, ISpeechHandler
{
    [Tooltip("Rotation max speed controls amount of rotation.")]
    [SerializeField]
    private float RotationSensitivity = 10.0f;

    private bool isNavigationEnabled = true;
    public bool IsNavigationEnabled
    {
        get { return isNavigationEnabled; }
        set { isNavigationEnabled = value; }
    }

    private Vector3 manipulationOriginalPosition = Vector3.zero;

    void INavigationHandler.OnNavigationStarted(NavigationEventData eventData)
    {
        InputManager.Instance.PushModalInputHandler(gameObject);
    }

    void INavigationHandler.OnNavigationUpdated(NavigationEventData eventData)
    {
        if (isNavigationEnabled)
        {
            /* TODO: DEVELOPER CODING EXERCISE 2.c */

            // 2.c: Calculate a float rotationFactor based on eventData's NormalizedOffset.x multiplied by RotationSensitivity.
            // This will help control the amount of rotation.
            float rotationFactor = eventData.NormalizedOffset.x * RotationSensitivity;

            // 2.c: transform.Rotate around the Y axis using rotationFactor.
            transform.Rotate(new Vector3(0, -1 * rotationFactor, 0));
        }
    }

    void INavigationHandler.OnNavigationCompleted(NavigationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void INavigationHandler.OnNavigationCanceled(NavigationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void IManipulationHandler.OnManipulationStarted(ManipulationEventData eventData)
    {
        if (!isNavigationEnabled)
        {
            InputManager.Instance.PushModalInputHandler(gameObject);

            manipulationOriginalPosition = transform.position;
        }
    }

    void IManipulationHandler.OnManipulationUpdated(ManipulationEventData eventData)
    {
        if (!isNavigationEnabled)
        {
            /* TODO: DEVELOPER CODING EXERCISE 4.a */

            // 4.a: Make this transform's position be the manipulationOriginalPosition + eventData.CumulativeDelta
        }
    }

    void IManipulationHandler.OnManipulationCompleted(ManipulationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void IManipulationHandler.OnManipulationCanceled(ManipulationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void ISpeechHandler.OnSpeechKeywordRecognized(SpeechEventData eventData)
    {
        if (eventData.RecognizedText.Equals("Move Astronaut"))
        {
            isNavigationEnabled = false;
        }
        else if (eventData.RecognizedText.Equals("Rotate Astronaut"))
        {
            isNavigationEnabled = true;
        }
        else
        {
            return;
        }

        eventData.Use();
    }
}

Diğer gezinti olaylarının zaten bazı bilgilerle doldurulduğunu fark edeceksiniz. GameObject'i Araç Seti InputSystem'ın kalıcı yığınına gönderiyoruz, böylece döndürme başladıktan sonra kullanıcının Astronot'a odaklanması gerekmez. Buna karşılık, hareket tamamlandıktan sonra GameObject'i yığından çıkaracağız.

Yapılandırma ve Dağıtma

  1. Uygulamayı Unity'de yeniden derleyin ve ardından Visual Studio'dan oluşturup dağıtarak HoloLens'te çalıştırın.
  2. Astronota baktığınızda imlecin her iki tarafında iki ok görünmelidir. Bu yeni görsel astronotu döndürebileceğini gösterir.
  3. HoloLens'in elinizi izlemeye başlaması için elinizi hazır konuma (işaret parmağınızı gökyüzüne dönük) yerleştirin.
  4. Astronotu döndürmek için, dizin parmağınızı sıkıştırma konumuna indirin ve ardından NavigationX hareketini tetiklemek için elinizi sola veya sağa hareket ettirin.

3. Bölüm - El Kılavuzu

Hedefler

  • El izlemenin ne zaman kaybolacağını tahmin etmeye yardımcı olması için el kılavuzu puanını kullanın.
  • kullanıcının elinin kameranın görüş kenarına ne zaman yaklaştığını göstermek için imleçle ilgili geri bildirim sağlayın.

Yönergeler

  1. Hiyerarşi panelinde CursorWithFeedback nesnesini seçin.
  2. Denetçi panelinde Bileşen Ekle düğmesine tıklayın.
  3. Menüde, arama kutusuna El Kılavuzu yazın. Arama sonucunu seçin.
  4. Proje paneli Hologramlar klasöründe HandGuidanceFeedback varlığını bulun.
  5. HandGuidanceFeedback varlığını Sürükleyip Denetçi panelindeki El Kılavuzu Göstergesi özelliğine bırakın.

Yapılandırma ve Dağıtma

  • Uygulamayı Unity'de yeniden derleyin ve ardından Uygulamayı HoloLens'te deneyimlemek için Visual Studio'dan derleyip dağıtın.
  • İzlenmek için elinizi görünüme getirin ve işaret parmağınızı kaldırın.
  • Astronotu Gezinti hareketiyle döndürmeye başlayın (işaret parmağınızı ve baş parmağınızı birbirine sıkıştırın).
  • Elinizi çok sola, sağa, yukarı ve aşağı hareket ettirin.
  • El hareketi çerçevesinin kenarına yaklaştığında, el izlemenin kaybolacağı konusunda sizi uyarmak için imlecin yanında bir ok görünmelidir. Ok, izlemenin kaybolmasını önlemek için elinizin hangi yönde hareket ettirildiğini gösterir.

Bölüm 4 - Düzenleme

Hedefler

  • Astronotu ellerinizle hareket ettirmek için Manipülasyon olaylarını kullanın.
  • kullanıcıya düzenlemenin ne zaman kullanılabileceğini bildirmek için imleçle ilgili geri bildirim sağlayın.

Yönergeler

GestureManager.cs ve AstronautManager.cs aşağıdakileri yapmamıza izin verir:

  1. Manipülasyon hareketlerini etkinleştirmek için "Astronotu Taşı" konuşma anahtar sözcüğünü ve bunları devre dışı bırakmak için "Astronotu Döndür" sözcüklerini kullanın.
  2. Düzenleme Hareketi Tanıyıcısı'na yanıt vermeye geçin.

Haydi başlayalım.

  1. Hiyerarşi panelinde yeni boş bir GameObject oluşturun. Buna "AstronautManager" adını verin.
  2. Denetçi panelinde Bileşen Ekle düğmesine tıklayın.
  3. Menüde Astronot Yöneticisi arama kutusuna yazın. Arama sonucunu seçin.
  4. Denetçi panelinde Bileşen Ekle düğmesine tıklayın.
  5. Menüde, Konuşma Giriş Kaynağı arama kutusuna yazın. Arama sonucunu seçin.

Şimdi astronotun etkileşim durumunu denetlemek için gereken konuşma komutlarını ekleyeceğiz.

  1. DenetçideAnahtar Sözcükler bölümünü genişletin.
  2. + Yeni bir anahtar sözcük eklemek için sağ taraftaki öğesine tıklayın.
  3. Anahtar Sözcüğü Astronotu Taşı olarak yazın. İsterseniz bir Tuş Kısayolu ekleyebilirsiniz.
  4. + Yeni bir anahtar sözcük eklemek için sağ taraftaki öğesine tıklayın.
  5. Anahtar Sözcüğü Astronotu Döndür olarak yazın. İsterseniz bir Tuş Kısayolu ekleyebilirsiniz.
  6. karşılık gelen işleyici kodu GestureAction.cs dosyasında, ISpeechHandler.OnSpeechKeywordRecognized işleyicisinde bulunabilir.

4. bölüm için Konuşma Giriş Kaynağını ayarlama

Ardından, imleç üzerinde düzenleme geri bildirimini ayarlayacağız.

  1. Proje paneli Hologramlar klasöründe PathingFeedback varlığını bulun.
  2. PathingFeedback prefab öğesini sürükleyip HiyerarşidekiCursorWithFeedback nesnesine bırakın.
  3. Hiyerarşi panelinde CursorWithFeedback'e tıklayın.
  4. PathingFeedback nesnesini HiyerarşidenSürükleyip Denetçidekiİmleç Geri Bildirimi bileşenindeki Yol Algılanan Oyun Nesnesi özelliğine bırakın.

Şimdi aşağıdakileri etkinleştirmek için GestureAction.cs dosyasına kod eklemeliyiz:

  1. Bir Düzenleme hareketi algılandığında astronotu taşıyacak olan IManipulationHandler.OnManipulationUpdated işlevine kod ekleyin.
  2. Astronotların el konumuna göre taşınması gereken yeri belirlemek için hareket vektörlerini hesaplayın.
  3. Astronotu yeni konuma taşıyın.

GestureAction.cs'de 4.a kodlama alıştırmalarını tamamlayın veya aşağıdaki tamamlanmış çözümümüzü kullanın:

using HoloToolkit.Unity.InputModule;
using UnityEngine;

/// <summary>
/// GestureAction performs custom actions based on
/// which gesture is being performed.
/// </summary>
public class GestureAction : MonoBehaviour, INavigationHandler, IManipulationHandler, ISpeechHandler
{
    [Tooltip("Rotation max speed controls amount of rotation.")]
    [SerializeField]
    private float RotationSensitivity = 10.0f;

    private bool isNavigationEnabled = true;
    public bool IsNavigationEnabled
    {
        get { return isNavigationEnabled; }
        set { isNavigationEnabled = value; }
    }

    private Vector3 manipulationOriginalPosition = Vector3.zero;

    void INavigationHandler.OnNavigationStarted(NavigationEventData eventData)
    {
        InputManager.Instance.PushModalInputHandler(gameObject);
    }

    void INavigationHandler.OnNavigationUpdated(NavigationEventData eventData)
    {
        if (isNavigationEnabled)
        {
            /* TODO: DEVELOPER CODING EXERCISE 2.c */

            // 2.c: Calculate a float rotationFactor based on eventData's NormalizedOffset.x multiplied by RotationSensitivity.
            // This will help control the amount of rotation.
            float rotationFactor = eventData.NormalizedOffset.x * RotationSensitivity;

            // 2.c: transform.Rotate around the Y axis using rotationFactor.
            transform.Rotate(new Vector3(0, -1 * rotationFactor, 0));
        }
    }

    void INavigationHandler.OnNavigationCompleted(NavigationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void INavigationHandler.OnNavigationCanceled(NavigationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void IManipulationHandler.OnManipulationStarted(ManipulationEventData eventData)
    {
        if (!isNavigationEnabled)
        {
            InputManager.Instance.PushModalInputHandler(gameObject);

            manipulationOriginalPosition = transform.position;
        }
    }

    void IManipulationHandler.OnManipulationUpdated(ManipulationEventData eventData)
    {
        if (!isNavigationEnabled)
        {
            /* TODO: DEVELOPER CODING EXERCISE 4.a */

            // 4.a: Make this transform's position be the manipulationOriginalPosition + eventData.CumulativeDelta
            transform.position = manipulationOriginalPosition + eventData.CumulativeDelta;
        }
    }

    void IManipulationHandler.OnManipulationCompleted(ManipulationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void IManipulationHandler.OnManipulationCanceled(ManipulationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void ISpeechHandler.OnSpeechKeywordRecognized(SpeechEventData eventData)
    {
        if (eventData.RecognizedText.Equals("Move Astronaut"))
        {
            isNavigationEnabled = false;
        }
        else if (eventData.RecognizedText.Equals("Rotate Astronaut"))
        {
            isNavigationEnabled = true;
        }
        else
        {
            return;
        }

        eventData.Use();
    }
}

Yapılandırma ve Dağıtma

  • Unity'de yeniden derleyin ve uygulamayı HoloLens'te çalıştırmak için Visual Studio'dan derleyin ve dağıtın.
  • HoloLens'in önünde elinizi hareket ettirin ve izlenebilmesi için işaret parmağınızı kaldırın.
  • İmleci astronota odakla.
  • Bir Yönlendirme hareketiyle astronotu taşımak için "Astronotu Taşı" deyin.
  • Programın artık Düzenleme olaylarına yanıt vereceğini belirtmek için imlecin çevresinde dört ok görünmelidir.
  • İşaret parmağınızı baş parmağınızı aşağı doğru indirin ve parmaklarınızı birbirine sıkıştırın.
  • Siz elinizi hareket ettirdikçe astronot da hareket eder (bu Manipülasyondur).
  • Astronotu yönlendirmeyi durdurmak için işaret parmağınızı kaldırın.
  • Not: Elinizi hareket ettirmeden önce 'Astronotu Taşı' demezseniz gezinti hareketi kullanılır.
  • Döndürülebilir duruma dönmek için "Astronotu Döndür" deyin.

5. Bölüm - Model genişletme

Hedefler

  • Astronot modelini kullanıcının etkileşim kurabileceği birden çok, daha küçük parçaya genişletin.
  • Gezinti ve Düzenleme hareketlerini kullanarak her parçayı tek tek taşıyın.

Yönergeler

Bu bölümde aşağıdaki görevleri gerçekleştireceğiz:

  1. Astronot modelini genişletmek için yeni bir "Modeli Genişlet" anahtar sözcüğü ekleyin.
  2. Modeli özgün biçimine döndürmek için yeni bir Anahtar Sözcük "Modeli Sıfırla" ekleyin.

Bunu, önceki bölümde yer alan Konuşma Giriş Kaynağı'na iki anahtar sözcük daha ekleyerek yapacağız. Tanıma olaylarını işlemenin başka bir yolunu da göstereceğiz.

  1. DenetçideAstronautManager'a geri tıklayın ve Denetçi'ninAnahtar Sözcükler bölümünü genişletin.
  2. + Yeni bir anahtar sözcük eklemek için sağ taraftaki öğesine tıklayın.
  3. Modeli Genişlet olarak Anahtar Sözcüğü yazın. İsterseniz bir Tuş Kısayolu ekleyebilirsiniz.
  4. + Yeni bir anahtar sözcük eklemek için sağ taraftaki öğesine tıklayın.
  5. Anahtar Sözcüğü Modeli Sıfırla olarak yazın. İsterseniz bir Tuş Kısayolu ekleyebilirsiniz.
  6. Denetçi panelinde Bileşen Ekle düğmesine tıklayın.
  7. Menüde, Konuşma Giriş İşleyicisi arama kutusuna yazın. Arama sonucunu seçin.
  8. Odaklandığımız GameObject'ten bağımsız olarak bu komutların çalışmasını istediğimiz için Genel Dinleyicidir seçeneğini işaretleyin.
  9. Düğmeye + tıklayın ve Anahtar Sözcük açılan listesinden Modeli Genişlet'i seçin.
  10. Yanıt'ın altındaki öğesine + tıklayın ve AstronautManager öğesini HiyerarşidenHiçbiri (Nesne) alanına sürükleyin.
  11. Şimdi İşlev Yok açılan menüsüne tıklayın, AstronautManager'ı ve ardından ExpandModelCommand'ı seçin.
  12. Konuşma Girişi İşleyicisi + düğmesine tıklayın ve Anahtar Sözcük açılan listesinden Modeli Sıfırla'yı seçin.
  13. Yanıt'ın altındaki öğesine + tıklayın ve AstronautManager öğesini HiyerarşidenHiçbiri (Nesne) alanına sürükleyin.
  14. Şimdi İşlev Yok açılan menüsüne tıklayın, AstronautManager'ı ve ardından ResetModelCommand'ı seçin.

5. bölüm için Konuşma Giriş Kaynağı ve İşleyicisi'ni ayarlama

Yapılandırma ve Dağıtma

  • Deneyin! Uygulamayı derleyin ve HoloLens'e dağıtın.
  • Genişletilmiş astronot modelini görmek için Modeli Genişlet deyin.
  • Astronot kıyafetinin parçalarını tek tek döndürmek için Gezinti'yi kullanın.
  • Astronotu Taşı deyin ve ardından manipülasyon özelliğini kullanarak astronot kıyafetinin parçalarını tek tek taşıyın.
  • Parçaları yeniden döndürmek için Astronotu Döndür deyin.
  • Astronotu özgün biçimine döndürmek için Modeli Sıfırla deyin.

Son

Tebrikler! Mr Input 211: Gesture'i tamamladınız.

  • El izleme, gezinti ve işleme olaylarını algılamayı ve yanıtlamayı biliyorsunuz.
  • Gezinti ve Düzenleme hareketleri arasındaki farkı anlarsınız.
  • Bir el algılandığında, bir el kaybolmak üzereyken ve nesnenin farklı etkileşimleri desteklediğinde (Gezinti ve Yönlendirme) için görsel geri bildirim sağlamak üzere imleci nasıl değiştireceğini biliyorsunuz.