HoloLens (1. nesil) ve Azure 305: İşlevler ve depolama


Not

Karma Gerçeklik Akademi öğreticileri, HoloLens (1. nesil) ve Karma Gerçeklik Çevreleyici Mikrofonlu Başlığın tasarımı. Bu nedenle, bu cihazlar için geliştirme konusunda rehberlik arayan geliştiriciler için bu öğreticileri yerinde bırakmanın önemli olduğunu hissetmeyiz. Bu öğreticiler, 2. sürüm için kullanılan en son araç kümeleri veya etkileşimler HoloLens güncelleştirilmez. Desteklenen cihazlar üzerinde çalışmaya devam etmek için bunlar korunur. Gelecekte 2. bir uygulama için geliştirmeyi gösteren yeni bir öğretici HoloLens. Bu bildirim, gönderildikleri zaman bu öğreticilerin bir bağlantısıyla güncelleştirilir.


son ürün -start

Bu kursta, karma gerçeklik uygulaması içinde Azure İşlevleri Azure Depolama kaynağıyla veri oluşturma ve kullanma hakkında bilgi edineceksiniz.

Azure İşlevleri, geliştiricilerin Azure'da küçük kod parçaları ('işlevler) çalıştırmalarını sağlayan bir Microsoft hizmetidir. Bu, yerel uygulama yerine işi buluta temsilci olarak seçen ve birçok avantaja sahip olan bir yol sağlar. Azure İşlevleri C#, F#, Node.js, Java ve PHP gibi çeşitli geliştirme dillerini destekler. Daha fazla bilgi için Azure İşlevleri ziyaret edin.

Azure Depolama, geliştiricilerin verileri depolamasını sağlayan ve yüksek oranda kullanılabilir, güvenli, dayanıklı, ölçeklenebilir ve yedekli olacağını garanti altına alan bir Microsoft bulut hizmetidir. Bu, Microsoft'un tüm bakım ve kritik sorunları sizin için çözecek olduğu anlamına gelir. Daha fazla bilgi için Azure Depolama ziyaret edin.

Bu kursu tamamlayan, aşağıdaki işlemleri gerçekleştirecek bir karma gerçeklik çevreleyici başlığı uygulamasına sahip oluruz:

  1. Kullanıcının bir sahneyi incelemesine izin verme.
  2. Kullanıcı 3D 'düğmesine' bakarken nesnelerin ortaya çıkmalarını tetikler.
  3. Ortaya çıkacak nesneler bir Azure İşlevi tarafından seçilir.
  4. Her nesne türe göre, uygulama nesne türünü AzureDepolama'de bulunan bir Azure Dosyasında depolar.
  5. İkinci kez yüklemenin ardından Azure Dosya verileri alınır ve uygulamanın önceki örneğinden gelen oluşturma eylemlerini yeniden oynatmak için kullanılır.

Uygulamanıza sonuçları tasarımınız ile nasıl tümleştirebilirsiniz? Bu kurs, azure hizmetini Unity hizmetiniz ile nasıl tümleştireceklerini Project. Karma gerçeklik Uygulamanızı geliştirmek için bu kurstan edinilen bilgileri kullanmak sizin görevinizdir.

Cihaz desteği

Kurs HoloLens Çevreleyici başlığı
MR ve Azure 305: İşlevler ve depolama ✔️ ✔️

Not

Bu kurs öncelikle çevreleyici (VR) Windows Mixed Reality başlığına odaklansa da, bu kursta edinilenleri Microsoft HoloLens. Kursu takip ettiyken, bu adımları desteklemek için ihtiyacınız olan tüm değişikliklerle ilgili notlar HoloLens.

Önkoşullar

Not

Bu öğretici Unity ve C# ile ilgili temel deneyime sahip geliştiriciler için tasarlanmıştır. Ayrıca, bu belge içindeki önkoşulların ve yazılan yönergelerin, yazıldığı sırada test edilen ve doğrulananları (Mayıs 2018) temsil etmelerini de unutmayın. Araçları yükleme makalesinde listelenen en son yazılımları kullanabilirsiniz, ancak bu kursta yer alan bilgilerin aşağıda listelenenlerden daha yeni yazılımlarda bulunanlarla mükemmel bir şekilde eş olacağını varsaymanız gerekir.

Bu kurs için aşağıdaki donanım ve yazılımları öneririz:

Başlamadan önce

Bu projeyi oluşturma sorunlarıyla karşılaşmamak için, bu öğreticide bahsedilen projeyi kök veya köke yakın bir klasörde oluşturmanız önemle önerilir (uzun klasör yolları derleme zamanında soruna neden olabilir).

Bölüm 1 - Azure Portalı

Azure Depolama Hizmeti'Depolamahesabı oluşturmanız ve yapılandırmanız Azure portal.

  1. Azure Portal'da oturum açın.

    Not

    Henüz bir Azure hesabınız yoksa bir tane oluşturmanız gerekir. Bu öğreticiyi bir sınıf veya laboratuvar ortamında takip ediyorsanız, eğitmenden veya eğitmenden birinin yeni hesabı ayarlarken yardım istemesini sorun.

  2. Oturum açtıktan sonra sol üst köşedeki Yeni'ye tıklayın, Depolama hesabı içinarama Depolama'a tıklayın.

    azure depolama arama

    Not

    Yeni sözcüğü, daha yeni portallarda Kaynak oluşturile değiştirilmiş olabilir.

  3. Yeni sayfa, Azure Depolama hesabı hizmetinin açıklamasını sağlar. Bu istemin sol alt kısmında Oluştur düğmesini seçerek bu hizmetle bir ilişki oluşturun.

    hizmet oluşturma

  4. Oluştur'a tıkladıktan sonra:

    1. Hesabınız için bir Ad girin, bu alanın yalnızca sayı ve küçük harf kabul eder.

    2. Dağıtım modeli için Kaynakyöneticisi'ni seçin.

    3. Hesap tür olarak ,Depolama (genel amaçlı v1) seçeneğini seçin.

    4. Kaynak grubu için Konum belirleme (yeni bir Kaynak Grubu oluşturuyorsanız). Konum ideal olarak uygulamanın çalıştırılaca bölgede olur. Bazı Azure varlıkları yalnızca belirli bölgelerde kullanılabilir.

    5. Çoğaltma için Okuma erişimli coğrafi olarak yedekli depolama (RA-GRS) seçeneğini seçin.

    6. Performans alanında Standart’ı seçin.

    7. Güvenli aktarım gerekli'i Devre Dışı olarak bırakın.

    8. Bir Abonelik seçin.

    9. Bir Kaynak Grubu seçin veya yeni bir tane oluşturun. Kaynak grubu, Bir Azure varlık koleksiyonu için faturalamayı izleme, erişimi denetleme, sağlama ve yönetme için bir yol sağlar. Tek bir projeyle ilişkili tüm Azure hizmetlerinin (örneğin, bu laboratuvarlar gibi) ortak bir kaynak grubu altında tutularak kullanılması önerilir.

      Azure Kaynak Grupları hakkında daha fazla bilgi için lütfen kaynak grubu makalesine bakın.

    10. Ayrıca, bu Hizmete uygulanan Hüküm ve Koşulları anlanızı da onaylamanız gerekir.

    11. Oluştur’u seçin.

      giriş hizmeti bilgileri

  5. Oluştur'a tıkladıktansonra, hizmetin oluşturulacak olması için beklemelisiniz, bu bir dakika kadar zaman alır.

  6. Hizmet örneği oluşturulduktan sonra portalda bir bildirim görüntülenir.

    Azure portalında yeni bildirim

  7. Yeni Hizmet örneğinizi keşfetmek için bildirimlere tıklayın.

    kaynağa git

  8. Yeni Hizmet örneğinizi keşfetmek için bildirimde Kaynağa git düğmesine tıklayın. Yeni hesap hizmeti Depolama alınırsınız.

    erişim anahtarları

  9. Bu bulut hizmetininuç noktalarını ortaya çıkarmak için Erişim anahtarları 'ne tıklayın. Daha Not Defteri kullanmak üzere anahtarlarınızı kopyalamak için Not Defteri veya benzerini kullanın. Ayrıca Bağlantı dizesi değerini de not edin çünkü daha sonra oluşturacağız Olan AzureServices sınıfında kullanılacaktır.

    bağlantı dizesini kopyalama

Bölüm 2 - Azure İşlevi ayarlama

Şimdi Azure Hizmeti'ne bir Azure İşlevi yazacağız.

Kodunuzda klasik bir işlevle yaptığınız neredeyse her şeyi yapmak için bir Azure işlevi kullanabilirsiniz. bu Işleve Azure hesabınıza erişmek için kimlik bilgileri olan herhangi bir uygulama tarafından erişilebileceği fark vardır.

Bir Azure Işlevi oluşturmak için:

  1. Azure portalındansol üst köşedeki Yeni ' ye tıklayın ve işlev uygulamasıarayın ve ENTER' a tıklayın.

    işlev uygulaması oluşturma

    Not

    Yeni portallarda Yenibir kaynak oluşturile değiştirilmiş olabilir.

  2. Yeni sayfa, Azure işlev uygulaması hizmetinin bir açıklamasını sağlayacaktır. Bu hizmet ile bir ilişki oluşturmak için bu istem sol alt kısmındaki Oluştur düğmesini seçin.

    işlev uygulaması bilgisi

  3. Oluştur'a tıkladıktan sonra:

    1. Bir uygulama adıgirin. Burada yalnızca harfler ve rakamlar kullanılabilir (büyük veya küçük harfe izin verilir).

    2. Tercih ettiğiniz aboneliğiseçin.

    3. Bir kaynak grubu seçin veya yeni bir tane oluşturun. Bir kaynak grubu, Azure varlıklarının bir koleksiyonu için faturalandırma, erişimi denetleme, sağlama ve yönetme için bir yol sağlar. Ortak bir kaynak grubu altında tek bir projeyle (örneğin, bu laboratuvarlar) ilişkili tüm Azure hizmetlerini tutmanız önerilir.

      Azure Kaynak grupları hakkında daha fazla bilgi edinmek isterseniz, lütfen kaynak grubu makalesini ziyaret edin.

    4. bu alıştırma için, seçilen işletim sistemiolarak Windows seçin.

    5. Barındırma planıIçin Tüketim planı ' nı seçin.

    6. Kaynak grubunuzun konumunu (yeni bir kaynak grubu oluşturuyorsanız) saptayın. Konum, uygulamanın çalıştırılacağı bölgede idealdir. Bazı Azure varlıkları yalnızca belirli bölgelerde kullanılabilir. En iyi performans için depolama hesabıyla aynı bölgeyi seçin.

    7. Depolamaiçin var olanı kullan' ı seçin ve ardından açılan menüyü kullanarak daha önce oluşturduğunuz depolama alanınızı bulun.

    8. bu alıştırma için Application Insights bırakın.

      Giriş işlevi uygulama ayrıntıları

  4. Oluştur düğmesine tıklayın.

  5. Oluştur'a tıkladıktan sonra hizmetin oluşturulmasını beklemeniz gerekir, bu işlem birkaç dakika sürebilir.

  6. Hizmet örneği oluşturulduktan sonra portalda bir bildirim görüntülenir.

    yeni Azure Portal bildirimi

  7. Yeni hizmet örneğinizi araştırmak için bildirimlere tıklayın.

    Kaynak işlev uygulamasına git

  8. Yeni hizmet örneğinizi araştırmak için bildirimdeki Kaynağa Git düğmesine tıklayın. Yeni işlev uygulaması hizmet örneğinize yönlendirilirsiniz.

  9. İşlev uygulaması panosunda farenizi sol taraftaki bölmede bulunan işlevleriüzerine getirin ve + (artı) simgesine tıklayın.

    Yeni işlev oluştur

  10. Bir sonraki sayfada, Web kancası + API seçili olduğundan emin olun ve dil seçin için, bu öğreticide kullanılan dil olacağı için CSharp'yi seçin. Son olarak, Bu Işlevi oluştur düğmesine tıklayın.

    Web kancası CSharp 'yi seçin

  11. Kod sayfasına (Run. CSX) götürülürsünüz, ancak, sol taraftaki panel içindeki Işlevler listesinden yeni oluşturulan Işleve tıklayın.

    Yeni işlev aç

  12. Aşağıdaki kodu işlevinizin içine kopyalayın. Bu işlev, çağrıldığında 0 ile 2 arasında rastgele bir tamsayı döndürür. Mevcut kod hakkında endişelenmeyin, en üstüne yapıştırmaktan çekinmeyin.

        using System.Net;
        using System.Threading.Tasks;
    
        public static int Run(CustomObject req, TraceWriter log)
        {
            Random rnd = new Random();
            int randomInt = rnd.Next(0, 3);
            return randomInt;
        }
    
        public class CustomObject
        {
            public String name {get; set;}
        }
    
  13. Kaydet’i seçin.

  14. Sonuç aşağıdaki görüntü gibi görünmelidir.

  15. İşlev URL 'Sini Al ' a tıklayın ve görüntülene- noktayı göz atın. Bu kursta daha sonra oluşturacağınız AzureServices sınıfına eklemeniz gerekir.

    İşlev uç noktası al

    İşlev uç noktası ekle

Bölüm 3-Unity projesini ayarlama

Aşağıda, karma gerçeklik ile geliştirme için tipik bir kurulum verilmiştir ve bu, diğer projeler için iyi bir şablondur.

Karma Gerçeklik derinlikli kulaklığınızın kurulumunu yapın ve test edin.

Not

Bu kurs için hareket denetleyicileri gerektirmeyecektir . Modern kulaklık kurmayı desteklemek istiyorsanız lütfen karma gerçeklik kurulumu makalesini ziyaret edin.

  1. Unity 'yi açın ve Yeni' ye tıklayın.

    Yeni Unity projesi oluştur

  2. şimdi bir Unity Project adı sağlamanız gerekir. MR_Azure_Functionsekleyin. Proje türünün 3Bolarak ayarlandığından emin olun. Konumu sizin için uygun bir yere ayarlayın (unutmayın, kök dizinlerin yakınına daha iyi). Ardından proje oluştur' a tıklayın.

    Yeni Unity projesine bir ad verin

  3. Unity açık olduğunda, varsayılan komut dosyası düzenleyicisininVisual Studioolarak ayarlanmış olması gerekir. Tercihleri Düzenle ' ye gidin ve sonra yeni penceresinden dış araçlar' a gidin. dış betik düzenleyicisiniVisual Studio 2017olarak değiştirin. Tercihler penceresini kapatın.

    Visual Studio 'yu betik düzenleyicisi olarak ayarlama

  4. ardından, dosyaderleme Ayarlar gidin ve platformu değiştir düğmesine tıklayarak platformu Evrensel Windows Platformu.

    platformu UWP 'ye geçir

  5. dosyaderleme Ayarlar gidin ve şunları yaptığınızdan emin olun:

    1. Hedef cihazherhangi bir cihazaayarlanmış.

      Microsoft HoloLens için hedef cihazıHoloLensolarak ayarlayın.

    2. Yapı türüD3D olarak ayarlandı

    3. SDKen son yüklü olarak ayarlandı

    4. Visual Studio sürümüen son yüklü olarak ayarlandı

    5. Oluşturma ve çalıştırma , yerel makine olarak ayarlandı

    6. Sahneyi kaydedin ve yapıya ekleyin.

      1. Açık sahneler Ekleseçeneğini belirleyerek bunu yapın. Bir Kaydet penceresi görüntülenir.

        Açık sahneler ekleme

      2. Bu, yeni klasör oluşturmak için yeni bir klasör oluşturun ve gelecekte yeni bir klasör seçin.

        sahneler klasörü oluştur

      3. Yeni oluşturulan sahneler klasörünüzü açın ve sonra dosya adı: metin alanında Functionssahyazınve Kaydet' e basın.

        İşlev sahneyi Kaydet

  6. yapı Ayarlariçindeki kalan ayarlar şimdilik varsayılan olarak bırakılmalıdır.

    Varsayılan derleme ayarlarını bırak

  7. derleme Ayarlar penceresinde, Player Ayarlar düğmesine tıklayın, bu işlem ilgili paneli ınspector 'ın bulunduğu alanda açar.

    denetçide oynatıcı ayarları

  8. Bu panelde, bazı ayarların doğrulanması gerekir:

    1. diğer Ayarlar sekmesinde:

      1. Komut dosyası çalışma zamanı sürümüdeneysel (.NET 4,6 eşdeğeri) olmalıdır, bu da düzenleyiciyi yeniden başlatma gereksinimini tetikler.
      2. Komut dosyası arka ucu.net olmalıdır
      3. API Uyumluluk düzeyi.NET 4,6 olmalıdır
    2. yayımlama Ayarlar sekmesi içinde, yetenekleraltında şunları denetleyin:

      • InternetClient

        Özellikleri ayarla

    3. panelin daha aşağısında, xr Ayarlar (aşağıda yayımlanan Ayarlarbulunur), sanal gerçeklik desteklenir, Windows Mixed Reality SDK 'nın eklendiğinden emin olun.

      XR ayarlarını ayarla

  9. derleme AyarlarUnity C# projelerine geri dön, bunun yanındaki onay kutusunu işaretleyin.

    değer c# projeleri

  10. derleme Ayarlar penceresini kapatın.

  11. sahninizi ve Project kaydedin (dosyasahneyi kaydet/dosyaprojeyi kaydet).

Bölüm 4-ana kamerayı kurma

Önemli

Bu kursun Unity bileşenlerini ayarlamak ve doğrudan koda devam etmek istiyorsanız, bu. unitypackage' ı Indirip projenize özel bir paketolarak içeri aktarın. Bu, sonraki bölümde bulunan dll 'Leri de içerecektir. İçeri aktardıktan sonra Bölüm 7' den devam edin.

  1. Hiyerarşi panelinde, ana kameraadlı bir nesne bulacaksınız. bu nesne, uygulamanızın "içindeyken" bir kez "baş" görünüm noktasını temsil eder.

  2. Sizin için Unity panosu sayesinde ana kamera Oyunnesnesi' ni seçin. Inspector panelinin (genellikle sağ tarafta, pano içinde bulunur), bu oyun nesnesinin, en üstte dönüştürme , ardından Kamerave diğer bazı bileşenler gibi çeşitli bileşenlerini gösterdiğine fark edersiniz. Ana kameranın dönüşümünü sıfırlamanız gerekir, bu nedenle doğru konumlandırıldı.

  3. Bunu yapmak için kameranın dönüştürme bileşeninin yanındaki dişli simgesini seçin ve Sıfırla' yı seçin.

    dönüştürmeyi Sıfırla

  4. Ardından dönüştürme bileşenini şu şekilde güncelleştirin:

    DÖNÜŞTÜRME KONUMU
    Sayı Iz Kadar
    0 1 0
    DÖNÜŞTÜRME-DÖNDÜRME
    Sayı Iz Kadar
    0 0 0
    DÖNÜŞTÜR-ÖLÇEKLE
    Sayı Iz Kadar
    1 1 1

    Kamera dönüşümü ayarla

Bölüm 5-Unity sahneyi ayarlama

  1. Hiyerarşi panelininboş bir alanına sağ tıklayın, 3B nesnealtında bir düzlemekleyin.

    Yeni Düzlem Oluştur

  2. Düzlem nesnesi seçili olduğunda Inspector panelindeaşağıdaki parametreleri değiştirin:

    DÖNÜŞTÜRME KONUMU
    Sayı Iz Kadar
    0 0 4
    DÖNÜŞTÜR-ÖLÇEKLE
    Sayı Iz Kadar
    10 1 10

    düzlem konumunu ve ölçeğini ayarla

    düzlemin sahne görünümü

  3. Hiyerarşi panelininboş bir alanına sağ tıklayın, 3B nesnealtında bir küpekleyin.

    1. Küpü GazeButton olarak yeniden adlandırın (küp seçili olarak ' F2 ' tuşuna basın).

    2. Inspector panelindeaşağıdaki parametreleri değiştirin:

      DÖNÜŞTÜRME KONUMU
      Sayı Iz Kadar
      0 3 5

      Gaze düğme dönüşümünü ayarla

      Gaze düğme sahne görünümü

    3. Etiketler Katmanlar bölmesiniaçmak için etiket açılan düğmesine tıklayın ve etiket ekle ' ye tıklayın.

      Yeni etiket ekle

      artı seçin

    4. + (Artı) düğmesini seçin ve Yeni etiket adı alanında GazeButtongirin ve Kaydet' e basın.

      Yeni etiket adı

    5. Hiyerarşi panelindeGazeButton nesnesine tıklayın ve Inspector panelinde, yeni oluşturulan GazeButton etiketini atayın.

      Yeni etiket için Gaze düğmesine ata

  4. Hiyerarşi panelindeGazeButton nesnesine sağ tıklayın ve boş bir oyun nesnesi ekleyin ( alt nesne olarak eklenir).

  5. Yeni nesneyi seçin ve it Pawnpointolarak yeniden adlandırın.

    1. Inspector panelindeaşağıdaki parametreleri değiştirin:

      DÖNÜŞTÜRME KONUMU
      Sayı Iz Kadar
      0 -1 0

      Şekil üretme noktası dönüşümünü Güncelleştir

      Şekil üretme noktası sahne görünümü

  6. Daha sonra, Azure hizmetinin durumu hakkında geri bildirim sağlamak için bir 3B metin nesnesi oluşturacaksınız.

    Hiyerarşi panelinde GazeButton öğesine sağ tıklayın ve bir 3B nesne3B metin nesnesini altolarak ekleyin.

    yeni 3B metin nesnesi oluştur

  7. 3D metin nesnesini AzureStatusTextolarak yeniden adlandırın.

  8. AzureStatusText nesne dönüşümünü aşağıdaki şekilde değiştirin:

    DÖNÜŞTÜRME KONUMU
    Sayı Iz Kadar
    0 0 -0,6
    DÖNÜŞTÜRME - ÖLÇEKLENDIRME
    X Y Z
    0.1 0.1 0.1

    Not

    Aşağıdaki Text Mesh bileşeni güncelleştirildiğinde düzeltilecek şekilde merkezin dışı gibi görünüyorsa endişelenmeyin.

  9. Text Mesh bileşenini aşağıdakiyle eş olacak şekilde değiştirme:

    metin ağı bileşenini ayarlama

    İpucu

    Burada seçilen renk Hex rengidir: 000000FF, ancak kendi renginizi seçmekte serbestsiniz, yalnızca okunabilir olduğundan emin olun.

  10. Hiyerarşi Paneli yapınız şimdi şöyle olmalıdır:

    Hiyerarşide metin ağı

  11. Sahneniz şimdi şöyle görünüyor olmalı:

    Sahne görünümünde metin ağı

Bölüm 6 - Unity için Azure Depolama içeri aktarma

Unity için Azure Depolama kullanacağız (kendisi Azure için .Net SDK'sı kullanıyor). Bu konuda daha fazla bilgi için Unity için Azure Depolama makalesine bakabilirsiniz.

Unity'de şu anda eklentilerin içeri aktarmadan sonra yeniden yapılandırılması gereken bilinen bir sorun vardır. Hata çözüldükten sonra bu adımlar (bu bölümde 4 - 7) gerekli olmayacaktır.

SDK'yı kendi projenize içeri aktarmanız için, '.unitypackage'paketinin en son sürümünü GitHub. Ardından aşağıdakileri yapın:

  1. Varlıklar Paketi Özel Paketi İçeri Aktar menü seçeneğini kullanarak .unitypackagedosyasını Unity'ye ekleyin.

  2. Açılan Unity Paketini İçeri Aktar kutusunda Plugin (Eklenti) altındaki her şeyi Depolama. Bu kurs için gerekli olmadığınız için diğer her şeyin işaretini kaldırın.

    pakete içeri aktarma

  3. Öğeleri projenize eklemek için İçeri Aktar düğmesine tıklayın.

  4. Depolama görünümünde Eklentiler altındaProject klasörüne gidin ve yalnızca aşağıdaki eklentileri seçin:

    • Microsoft.Data.Edm

    • Microsoft.Data.OData

    • Microsoft.WindowsAzure.Storage

    • Newtonsoft.Json

    • System.Spatial

      Tüm platformlar'ın işaretini kaldırın

  5. Bu belirli eklentiler seçili durumdayken Herhangi Bir Platform seçeneğinin işaretinikaldırın veWSAPlayer öğesinin işaretini kaldırın ve Uygula'ya tıklayın.

    platform dll'lerini uygulama

    Not

    Bu eklentileri yalnızca Unity Düzenleyicisi'nde kullanılacak şekilde işaretleceğiz. Bunun nedeni, proje Unity'den dışarı aktarıldıktan sonra WSA klasöründe aynı eklentilerin farklı sürümleri olmasıdır.

  6. Depolama eklenti klasöründe yalnızca öğesini seçin:

    • Microsoft.Data.Services.Client

      set dll'ler için işlenemiyor

  7. Platform Uygulaması'nın altındaki İşleme kutusunu işaretleyin Ayarlar'atıklayın.

    işleme uygulama

    Not

    Unity derleme düzeltme ekicisi bu eklentiyi işlemede zor olduğundan bu eklentiyi "İşleme" olarak işaretlleceğiz. Eklenti işlenmese bile çalışmaya devam ediyor.

Bölüm 7 - AzureServices sınıfını oluşturma

Oluşturacağız ilk sınıf AzureServices sınıfıdır.

AzureServices sınıfı şunların sorumluluğundadır:

  • Azure Hesabı kimlik bilgilerini depolama.

  • Azure Uygulama İşlevi'nizi çağırma.

  • Azure Cloud Depolama'nize veri dosyasının karşıya yükleme ve Depolama.

Bu Sınıfı oluşturmak için:

  1. Dosya Paneli'nde bulunan Varlık Klasörüne sağ Project Klasör Oluştur'atıklayın. Klasöre Betikler adını girin.

    yeni klasör oluşturma

    klasör çağrısı - betikler

  2. Yeni oluşturulan klasöre çift tıklayın ve açın.

  3. Klasörün içine sağ tıklayın, C# Betiği Oluştur. AzureServices betiğine çağrıyın.

  4. Yeni AzureServices sınıfına çift tıklar ve sınıfını Visual Studio.

  5. AzureServices'in en üstüne aşağıdaki ad alanlarını ekleyin:

        using System;
        using System.Threading.Tasks;
        using UnityEngine;
        using Microsoft.WindowsAzure.Storage;
        using Microsoft.WindowsAzure.Storage.File;
        using System.IO;
        using System.Net;
    
  6. AzureServices sınıfının içine aşağıdaki Denetçi Alanlarını ekleyin:

        /// <summary>
        /// Provides Singleton-like behavior to this class.
        /// </summary>
        public static AzureServices instance;
    
        /// <summary>
        /// Reference Target for AzureStatusText Text Mesh object
        /// </summary>
        public TextMesh azureStatusText;
    
  7. Ardından AzureServices sınıfının içine aşağıdaki üye değişkenlerini ekleyin:

        /// <summary>
        /// Holds the Azure Function endpoint - Insert your Azure Function
        /// Connection String here.
        /// </summary>
    
        private readonly string azureFunctionEndpoint = "--Insert here you AzureFunction Endpoint--";
    
        /// <summary>
        /// Holds the Storage Connection String - Insert your Azure Storage
        /// Connection String here.
        /// </summary>
        private readonly string storageConnectionString = "--Insert here you AzureStorage Connection String--";
    
        /// <summary>
        /// Name of the Cloud Share - Hosts directories.
        /// </summary>
        private const string fileShare = "fileshare";
    
        /// <summary>
        /// Name of a Directory within the Share
        /// </summary>
        private const string storageDirectory = "storagedirectory";
    
        /// <summary>
        /// The Cloud File
        /// </summary>
        private CloudFile shapeIndexCloudFile;
    
        /// <summary>
        /// The Linked Storage Account
        /// </summary>
        private CloudStorageAccount storageAccount;
    
        /// <summary>
        /// The Cloud Client
        /// </summary>
        private CloudFileClient fileClient;
    
        /// <summary>
        /// The Cloud Share - Hosts Directories
        /// </summary>
        private CloudFileShare share;
    
        /// <summary>
        /// The Directory in the share that will host the Cloud file
        /// </summary>
        private CloudFileDirectory dir;
    

    Önemli

    Uç nokta ve bağlantı dizesi değerlerini Azure Portal'da bulunan Azure depolama alanı değerleriyle değiştir

  8. Artık Awake() ve Start() yöntemleri için kod ekleniyor. Sınıf başlatılırken bu yöntemler çağrılır:

        private void Awake()
        {
            instance = this;
        }
    
        // Use this for initialization
        private void Start()
        {
            // Set the Status text to loading, whilst attempting connection to Azure.
            azureStatusText.text = "Loading...";
        }
    
        /// <summary>
        /// Call to the Azure Function App to request a Shape.
        /// </summary>
        public async void CallAzureFunctionForNextShape()
        {
    
        }
    

    Önemli

    Gelecek bölümde CallAzureFunctionForNextShape() kodunu dolduracağız.

  9. Bu sınıf bunu kullanmayacak olduğu için Update() yöntemini silin.

  10. Değişikliklerinizi Visual Studio unity'ye geri dön.

  11. AzureServices sınıfına tıklayın ve Scripts klasöründen Hiyerarşi Paneli'nin Ana Kamera nesnesine sürükleyin.

  12. Ana Kamera'yi seçin, sonra GazeButton nesnesinin altından AzureStatusText alt nesnesini alıp AzureServices betiğine başvuru sağlamak için AzureStatusText başvuru hedef alanına ( Denetçi) girin.

    azure durum metni başvuru hedefi atama

Bölüm 8 - ShapeFactory sınıfını oluşturma

Oluşturulacak sonraki betik, ShapeFactory sınıfıdır. Bu sınıfın rolü, isten geldiğinde yeni bir şekil oluşturmak ve Şekil Geçmişi Listesinde oluşturulan şekillerin geçmişini tutmaktır. Bir şekil her oluşturulduğunda, Şekil Geçmişi listesiAzureService sınıfında güncelleştirilir ve ardından Azure hizmet Depolama. Uygulama başlatıldığında, Azure Depolama'bilgisayarınızdadepolanan bir dosya bulunursa Şekil Geçmişi listesi alınır ve 3D Metin nesnesiyle birlikte oluşturulan şeklin depolamadan mı yoksa yeniden mi olduğunu sağlar.

Bu sınıfı oluşturmak için:

  1. Daha önce oluşturduğunuz Scripts klasörüne gidin.

  2. Klasörün içine sağ tıklayın, C# Betiği Oluştur. ShapeFactory betiğine çağrıyın.

  3. Yeni ShapeFactory betiğine çift tıklar ve bu betiğiVisual Studio.

  4. ShapeFactory sınıfının aşağıdaki ad alanlarını içerir:

        using System.Collections.Generic;
        using UnityEngine;
    
  5. Aşağıda gösterilen değişkenleri ShapeFactory sınıfına ekleyin ve Start() ve Awake() işlevlerini aşağıdakilerle değiştirin:

        /// <summary>
        /// Provide this class Singleton-like behaviour
        /// </summary>
        [HideInInspector]
        public static ShapeFactory instance;
    
        /// <summary>
        /// Provides an Inspector exposed reference to ShapeSpawnPoint
        /// </summary>
        [SerializeField]
        public Transform spawnPoint;
    
        /// <summary>
        /// Shape History Index
        /// </summary>
        [HideInInspector]
        public List<int> shapeHistoryList;
    
        /// <summary>
        /// Shapes Enum for selecting required shape
        /// </summary>
        private enum Shapes { Cube, Sphere, Cylinder }
    
        private void Awake()
        {
            instance = this;
        }
    
        private void Start()
        {
            shapeHistoryList = new List<int>();
        }
    
  6. CreateShape() yöntemi, sağlanan tamsayı parametresine göre ilkel şekilleri oluşturur. Boole parametresi, o anda oluşturulan şeklin depolamadan mı yoksa yeniden mi olduğunu belirtmek için kullanılır. Aşağıdaki kodu ShapeFactory sınıfınıza, önceki yöntemlerin altına girin:

        /// <summary>
        /// Use the Shape Enum to spawn a new Primitive object in the scene
        /// </summary>
        /// <param name="shape">Enumerator Number for Shape</param>
        /// <param name="storageShape">Provides whether this is new or old</param>
        internal void CreateShape(int shape, bool storageSpace)
        {
            Shapes primitive = (Shapes)shape;
            GameObject newObject = null;
            string shapeText = storageSpace == true ? "Storage: " : "New: ";
    
            AzureServices.instance.azureStatusText.text = string.Format("{0}{1}", shapeText, primitive.ToString());
    
            switch (primitive)
            {
                case Shapes.Cube:
                newObject = GameObject.CreatePrimitive(PrimitiveType.Cube);
                break;
    
                case Shapes.Sphere:
                newObject = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                break;
    
                case Shapes.Cylinder:
                newObject = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
                break;
            }
    
            if (newObject != null)
            {
                newObject.transform.position = spawnPoint.position;
    
                newObject.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
    
                newObject.AddComponent<Rigidbody>().useGravity = true;
    
                newObject.GetComponent<Renderer>().material.color = UnityEngine.Random.ColorHSV(0f, 1f, 1f, 1f, 0.5f, 1f);
            }
        }
    
  7. Unity'ye geri dönmeden önce değişikliklerinizi Visual Studio emin olun.

  8. Unity Düzenleyicisi'ne geri dönüp Scripts klasöründeki ShapeFactory sınıfına tıklayın ve hiyerarşipanelindeki Ana Kamera nesnesine sürükleyin.

  9. Ana Kamera seçili durumdayken ShapeFactory betik bileşeninin Spawn Point başvurusunda eksik olduğunu fark edersiniz. Düzeltmek için, Hiyerarşi Panelinden ShapeSpawnPoint nesnesini Spawn Point başvuru hedefine sürükleyin.

    şekil fabrikası başvuru hedefini ayarlama

Bölüm 9 - Bakış sınıfını oluşturma

Oluşturmanız gereken son betik, Gaze sınıfıdır.

Bu sınıf, kullanıcının hangi nesneye bakacağını saptamak için ana kameradan ileriye doğru bir rayla yansıtılan bir Raycast oluşturmaktan sorumludur. Bu durumda, Raycast kullanıcının sahnedeki GazeButton nesnesine bakmaya ve bir davranış tetiklemesine sahip olup olmadığını belirlemesi gerekir.

Bu sınıfı oluşturmak için:

  1. Daha önce oluşturduğunuz betikler klasörüne gidin.

  2. Project paneli ' ne sağ tıklayın, C# betiğioluşturun. Beze betiği çağırın.

  3. Yeni Gaze betiğe çift tıklayarak Visual Studio açın.

  4. Aşağıdaki ad alanının, betiğin üst kısmına eklendiğinden emin olun:

        using UnityEngine;
    
  5. Ardından, aşağıdaki değişkenleri Gaze sınıfı içine ekleyin:

        /// <summary>
        /// Provides Singleton-like behavior to this class.
        /// </summary>
        public static Gaze instance;
    
        /// <summary>
        /// The Tag which the Gaze will use to interact with objects. Can also be set in editor.
        /// </summary>
        public string InteractibleTag = "GazeButton";
    
        /// <summary>
        /// The layer which will be detected by the Gaze ('~0' equals everything).
        /// </summary>
        public LayerMask LayerMask = ~0;
    
        /// <summary>
        /// The Max Distance the gaze should travel, if it has not hit anything.
        /// </summary>
        public float GazeMaxDistance = 300;
    
        /// <summary>
        /// The size of the cursor, which will be created.
        /// </summary>
        public Vector3 CursorSize = new Vector3(0.05f, 0.05f, 0.05f);
    
        /// <summary>
        /// The color of the cursor - can be set in editor.
        /// </summary>
        public Color CursorColour = Color.HSVToRGB(0.0223f, 0.7922f, 1.000f);
    
        /// <summary>
        /// Provides when the gaze is ready to start working (based upon whether
        /// Azure connects successfully).
        /// </summary>
        internal bool GazeEnabled = false;
    
        /// <summary>
        /// The currently focused object.
        /// </summary>
        internal GameObject FocusedObject { get; private set; }
    
        /// <summary>
        /// The object which was last focused on.
        /// </summary>
        internal GameObject _oldFocusedObject { get; private set; }
    
        /// <summary>
        /// The info taken from the last hit.
        /// </summary>
        internal RaycastHit HitInfo { get; private set; }
    
        /// <summary>
        /// The cursor object.
        /// </summary>
        internal GameObject Cursor { get; private set; }
    
        /// <summary>
        /// Provides whether the raycast has hit something.
        /// </summary>
        internal bool Hit { get; private set; }
    
        /// <summary>
        /// This will store the position which the ray last hit.
        /// </summary>
        internal Vector3 Position { get; private set; }
    
        /// <summary>
        /// This will store the normal, of the ray from its last hit.
        /// </summary>
        internal Vector3 Normal { get; private set; }
    
        /// <summary>
        /// The start point of the gaze ray cast.
        /// </summary>
        private Vector3 _gazeOrigin;
    
        /// <summary>
        /// The direction in which the gaze should be.
        /// </summary>
        private Vector3 _gazeDirection;
    

Önemli

Bu değişkenlerden bazıları düzenleyicidedüzenlenebilecektir.

  1. Uyanık () ve Start () yöntemlerinin kodu artık eklenmelidir.

        /// <summary>
        /// The method used after initialization of the scene, though before Start().
        /// </summary>
        private void Awake()
        {
            // Set this class to behave similar to singleton
            instance = this;
        }
    
        /// <summary>
        /// Start method used upon initialization.
        /// </summary>
        private void Start()
        {
            FocusedObject = null;
            Cursor = CreateCursor();
        }
    
  2. Başlangıç aşamasında bir Cursor nesnesi oluşturacak olan aşağıdaki kodu ekleyin, bu, GazeEnabled Boolean 'ın her yerde olduğu gibi, Raycast yöntemini çalıştıracak olan Update () yöntemiyle birlikte.

        /// <summary>
        /// Method to create a cursor object.
        /// </summary>
        /// <returns></returns>
        private GameObject CreateCursor()
        {
            GameObject newCursor = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            newCursor.SetActive(false);
    
            // Remove the collider, so it doesn't block raycast.
            Destroy(newCursor.GetComponent<SphereCollider>());
            newCursor.transform.localScale = CursorSize;
    
            newCursor.GetComponent<MeshRenderer>().material = new Material(Shader.Find("Diffuse"))
            {
                color = CursorColour
            };
    
            newCursor.name = "Cursor";
    
            newCursor.SetActive(true);
    
            return newCursor;
        }
    
        /// <summary>
        /// Called every frame
        /// </summary>
        private void Update()
        {
            if(GazeEnabled == true)
            {
                _gazeOrigin = Camera.main.transform.position;
    
                _gazeDirection = Camera.main.transform.forward;
    
                UpdateRaycast();
            }
        }
    
  3. Next bir Raycast öğesini proje ve vuruş hedefini algılayan Updateraycast () yöntemini ekleyin.

        private void UpdateRaycast()
        {
            // Set the old focused gameobject.
            _oldFocusedObject = FocusedObject;
    
            RaycastHit hitInfo;
    
            // Initialise Raycasting.
            Hit = Physics.Raycast(_gazeOrigin,
                _gazeDirection,
                out hitInfo,
                GazeMaxDistance, LayerMask);
    
            HitInfo = hitInfo;
    
            // Check whether raycast has hit.
            if (Hit == true)
            {
                Position = hitInfo.point;
    
                Normal = hitInfo.normal;
    
                // Check whether the hit has a collider.
                if (hitInfo.collider != null)
                {
                    // Set the focused object with what the user just looked at.
                    FocusedObject = hitInfo.collider.gameObject;
                }
                else
                {
                    // Object looked on is not valid, set focused gameobject to null.
                    FocusedObject = null;
                }
            }
            else
            {
                // No object looked upon, set focused gameobject to null.
                FocusedObject = null;
    
                // Provide default position for cursor.
                Position = _gazeOrigin + (_gazeDirection * GazeMaxDistance);
    
                // Provide a default normal.
                Normal = _gazeDirection;
            }
    
            // Lerp the cursor to the given position, which helps to stabilize the gaze.
            Cursor.transform.position = Vector3.Lerp(Cursor.transform.position, Position, 0.6f);
    
            // Check whether the previous focused object is this same 
            //    object. If so, reset the focused object.
            if (FocusedObject != _oldFocusedObject)
            {
                ResetFocusedObject();
    
                if (FocusedObject != null)
                {
                if (FocusedObject.CompareTag(InteractibleTag.ToString()))
                {
                        // Set the Focused object to green - success!
                        FocusedObject.GetComponent<Renderer>().material.color = Color.green;
    
                        // Start the Azure Function, to provide the next shape!
                        AzureServices.instance.CallAzureFunctionForNextShape();
                    }
                }
            }
        }
    
  4. Son olarak, yeni bir şekil oluşturulup oluşturulmayacağını belirten GazeButton nesneleri geçerli rengini değiştirmek için Resetfocusedobject () yöntemini ekleyin.

        /// <summary>
        /// Reset the old focused object, stop the gaze timer, and send data if it
        /// is greater than one.
        /// </summary>
        private void ResetFocusedObject()
        {
            // Ensure the old focused object is not null.
            if (_oldFocusedObject != null)
            {
                if (_oldFocusedObject.CompareTag(InteractibleTag.ToString()))
                {
                    // Set the old focused object to red - its original state.
                    _oldFocusedObject.GetComponent<Renderer>().material.color = Color.red;
                }
            }
        }
    
  5. Unity 'ye dönmeden önce değişikliklerinizi Visual Studio kaydedin.

  6. Komut dosyaları klasöründeki Gaze sınıfını, hiyerarşi panelindekiana kamera nesnesine tıklayın ve sürükleyin.

Bölüm 10-AzureServices sınıfı Tamamlanıyor

Diğer betikler söz konusu olduğunda, artık AzureServices sınıfının tamamlanabilmesi mümkündür. Bu, aracılığıyla elde edilecek:

  1. Azure ile iletişim kurmak için gereken kimlik doğrulama değişkenlerini ayarlamak için Createcloudıdentityasync ()adlı yeni bir yöntem ekleme.

    Bu yöntem, şekil listesini içeren daha önce depolanmış bir dosyanın varlığını da denetler.

    dosya bulunursa, kullanıcı gaboyutunudevre dışı bırakır ve Azure Depolama dosyasındadepolanan şekillerin düzenine göre şekil oluşturma işlemi tetiklenir. metin ağı , şekil kaynağına bağlı olarak ' Depolama ' veya ' New ' görüntülenmesini sağlayabileceğinden kullanıcı bunu görebilir.

    Dosya bulunamazsa, bu, kullanıcının sahnedeki GazeButton nesnesine bakması sırasında şekil oluşturmasını sağlayan Gaze'ı etkinleştirecektir.

        /// <summary>
        /// Create the references necessary to log into Azure
        /// </summary>
        private async void CreateCloudIdentityAsync()
        {
            // Retrieve storage account information from connection string
            storageAccount = CloudStorageAccount.Parse(storageConnectionString);
    
            // Create a file client for interacting with the file service.
            fileClient = storageAccount.CreateCloudFileClient();
    
            // Create a share for organizing files and directories within the storage account.
            share = fileClient.GetShareReference(fileShare);
    
            await share.CreateIfNotExistsAsync();
    
            // Get a reference to the root directory of the share.
            CloudFileDirectory root = share.GetRootDirectoryReference();
    
            // Create a directory under the root directory
            dir = root.GetDirectoryReference(storageDirectory);
    
            await dir.CreateIfNotExistsAsync();
    
            //Check if the there is a stored text file containing the list
            shapeIndexCloudFile = dir.GetFileReference("TextShapeFile");
    
            if (!await shapeIndexCloudFile.ExistsAsync())
            {
                // File not found, enable gaze for shapes creation
                Gaze.instance.GazeEnabled = true;
    
                azureStatusText.text = "No Shape\nFile!";
            }
            else
            {
                // The file has been found, disable gaze and get the list from the file
                Gaze.instance.GazeEnabled = false;
    
                azureStatusText.text = "Shape File\nFound!";
    
                await ReplicateListFromAzureAsync();
            }
        }
    
  2. Sonraki kod parçacığı, Start () yönteminin içinden yapılır; bir çağrının Createcloudidentityasync () yöntemine yapılması gerekir. Şu şekilde geçerli Start () yönteminizin üzerine kopyalama yapmanız ücretsizdir:

        private void Start()
        {
            // Disable TLS cert checks only while in Unity Editor (until Unity adds support for TLS)
    #if UNITY_EDITOR
            ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
    #endif
    
            // Set the Status text to loading, whilst attempting connection to Azure.
            azureStatusText.text = "Loading...";
    
            //Creating the references necessary to log into Azure and check if the Storage Directory is empty
            CreateCloudIdentityAsync();
        }
    
  3. CallAzureFunctionForNextShape ()yöntemi için kodu girin. Şekil dizini istemek için önceden oluşturulmuş Azure işlev uygulaması kullanacaksınız. Yeni şekil alındıktan sonra, bu yöntem, sahneye yeni şekli oluşturmak için şekli Shapefactory sınıfına gönderir. CallAzureFunctionForNextShape ()gövdesini doldurmak için aşağıdaki kodu kullanın.

        /// <summary>
        /// Call to the Azure Function App to request a Shape.
        /// </summary>
        public async void CallAzureFunctionForNextShape()
        {
            int azureRandomInt = 0;
    
            // Call Azure function
            HttpWebRequest webRequest = WebRequest.CreateHttp(azureFunctionEndpoint);
    
            WebResponse response = await webRequest.GetResponseAsync();
    
            // Read response as string
            using (Stream stream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(stream);
    
                String responseString = reader.ReadToEnd();
    
                //parse result as integer
                Int32.TryParse(responseString, out azureRandomInt);
            }
    
            //add random int from Azure to the ShapeIndexList
            ShapeFactory.instance.shapeHistoryList.Add(azureRandomInt);
    
            ShapeFactory.instance.CreateShape(azureRandomInt, false);
    
            //Save to Azure storage
            await UploadListToAzureAsync();
        }
    
  4. şekil geçmişi listesinde depolanan tamsayıları birleştirerek ve Azure Depolama dosyanızakaydederek dize oluşturmak için bir yöntem ekleyin.

        /// <summary>
        /// Upload the locally stored List to Azure
        /// </summary>
        private async Task UploadListToAzureAsync()
        {
            // Uploading a local file to the directory created above
            string listToString = string.Join(",", ShapeFactory.instance.shapeHistoryList.ToArray());
    
            await shapeIndexCloudFile.UploadTextAsync(listToString);
        }
    
  5. Azure Depolama dosyanızda bulunan dosyada depolanan metni almak ve bir listede serisini kaldırmak için bir yöntem ekleyin.

  6. Bu işlem tamamlandıktan sonra, kullanıcının sahneye daha fazla şekil ekleyebilmesi için, bu yöntem, Gaze 'ı yeniden sağlar.

        ///<summary>
        /// Get the List stored in Azure and use the data retrieved to replicate 
        /// a Shape creation pattern
        ///</summary>
        private async Task ReplicateListFromAzureAsync()
        {
            string azureTextFileContent = await shapeIndexCloudFile.DownloadTextAsync();
    
            string[] shapes = azureTextFileContent.Split(new char[] { ',' });
    
            foreach (string shape in shapes)
            {
                int i;
    
                Int32.TryParse(shape.ToString(), out i);
    
                ShapeFactory.instance.shapeHistoryList.Add(i);
    
                ShapeFactory.instance.CreateShape(i, true);
    
                await Task.Delay(500);
            }
    
            Gaze.instance.GazeEnabled = true;
    
            azureStatusText.text = "Load Complete!";
        }
    
  7. Unity 'ye dönmeden önce değişikliklerinizi Visual Studio kaydedin.

Bölüm 11-UWP çözümünü oluşturma

Oluşturma işlemini başlatmak için:

  1. dosyaderleme Ayarlargidin.

    uygulamayı oluşturma

  2. Oluştur' a tıklayın. Unity, uygulamanın derlenmesi için bir klasör oluşturmanız ve seçmeniz gereken bir Dosya Gezgini penceresi başlatır. Şimdi bu klasörü oluşturun ve uygulamayıadlandırın. Ardından uygulama klasörü seçiliyken Klasör Seç' e basın.

  3. Unity, projenizi uygulama klasörüne oluşturmaya başlayacaktır.

  4. Unity oluşturma işlemi tamamlandıktan sonra (biraz zaman alabilir), sizin derlemenizi yerinde bir Dosya Gezgini penceresi açar (her zaman Windows üzerinde görünmeyebilir, ancak yeni bir pencerenin eklenmesini size bildirir).

Bölüm 12-uygulamanızı dağıtma

Uygulamanızı dağıtmak için:

  1. Son bölümdeoluşturulan uygulama klasörüne gidin. '. Sln ' uzantısıyla bir dosya görürsünüz. bu şekilde, Visual Studioiçinde açmak için çift tıklamalısınız.

  2. Çözüm platformundax86, yerel makine' yi seçin.

  3. Çözüm yapılandırmasındaHata Ayıkla' yı seçin.

    Microsoft HoloLens için, bunu uzak makineyeayarlamayı daha kolay bulabilirsiniz, böylece bilgisayarınıza tethered. Ancak, şunları da yapmanız gerekir:

    • AyarlarNetwork ınternetWi-Figelişmiş seçenekleri içinde bulunan HoloLens ıp adresini öğrenin ; ıpv4, kullanmanız gereken adrestir.
    • Geliştirici modununAçıkolduğundan emin olun; geliştiriciler için Ayarlargüncelleştirme güvenliği' nde bulunur .

    Çözümü dağıt

  4. Derleme menüsüne gidin ve uygulamayı makinenize dışarıdan yüklemek Için Çözümü dağıt ' a tıklayın.

  5. Uygulamanız artık yüklü uygulamalar listesinde görünmelidir, başlatılmaya ve test edilmeye hazır!

tamamlanmış Azure işlevleriniz ve Depolama uygulamanız

tebrikler, hem azure işlevleri hem de azure Depolama hizmetlerinden yararlanan bir karma gerçeklik uygulaması derlediniz. Uygulamanız depolanan verileri çizecek ve bu verilere dayalı bir eylem sağlayabilecektir.

son ürün-son

Ek alıştırmalar

Alıştırma 1

İkinci bir oluşturma noktası oluşturun ve bir nesnenin hangi oluşturma noktasını oluşturduğunu kaydedin. Veri dosyasını yüklediğinizde, ilk olarak oluşturulduğu konumdan oluşturulan şekilleri yeniden yürütün.

Alıştırma 2

Her seferinde yeniden açmak zorunda kalmak yerine, uygulamayı yeniden başlatmanın bir yolunu oluşturun. Sahne yükleme başlamak için iyi bir nokta. bunu yaptıktan sonra, Azure Depolama'de depolanan listeyi temizlemek için bir yol oluşturun ve bu sayede uygulamanızı kolayca sıfırlayabilirler.