HoloLens (1. nesil) ve Azure 308: Cihazlar arası bildirimler


Not

Karma Gerçeklik Academy öğreticileri HoloLens (1. nesil) 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. Desteklenen cihazlarda çalışmaya devam etmek için bakımları yapılacaktır. Gelecekte HoloLens 2 için nasıl geliştirileceğini gösteren yeni bir öğretici serisi sunulacaktır. Bu bildirim, bu öğreticiler gönderildiğinde bu öğreticilerin bağlantısıyla güncelleştirilir.


son ürün -start

Bu kursta Azure Notification Hubs, Azure Tabloları ve Azure İşlevleri kullanarak karma gerçeklik uygulamasına Notification Hubs özellikleri eklemeyi öğreneceksiniz.

Azure Notification Hubs , geliştiricilerin tüm platformlara hedeflenen ve kişiselleştirilmiş anında iletme bildirimleri göndermesine olanak tanıyan ve tümü bulut içinde çalışan bir Microsoft hizmetidir. Bu, geliştiricilerin senaryoya bağlı olarak son kullanıcılarla ve hatta çeşitli uygulamalar arasında iletişim kurmasına etkili bir şekilde olanak sağlayabilir. Daha fazla bilgi için Azure Notification Hubssayfasını ziyaret edin.

Azure İşlevleri, geliştiricilerin Azure'da 'işlevler' adlı küçük kod parçalarını çalıştırmasına olanak tanıyan bir Microsoft hizmetidir. Bu, birçok avantajı olabilecek yerel uygulamanız yerine çalışmayı buluta devretmek için 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 İşlevlerisayfasını ziyaret edin.

Azure Tabloları , geliştiricilerin yapılandırılmış SQL olmayan verileri bulutta depolamasına olanak tanıyan ve her yerden kolayca erişilebilir olmasını sağlayan bir Microsoft bulut hizmetidir. Hizmet, tabloların gerektiğinde evrimini sağlayan şemasız bir tasarıma sahiptir ve bu nedenle çok esnektir. Daha fazla bilgi için Azure Tablolarısayfasını ziyaret edin

Bu kursu tamamladıktan sonra bir karma gerçeklik çevreleyici başlık uygulamasına ve aşağıdakileri yapabilecek bir Masaüstü bilgisayar uygulamasına sahip olacaksınız:

  1. Masaüstü bilgisayar uygulaması, kullanıcının fareyi kullanarak bir nesneyi 2B alanda (X ve Y) taşımasına olanak tanır.

  2. Nesnelerin bilgisayar uygulaması içindeki hareketi, nesne kimliği, tür ve dönüştürme bilgilerini (X ve Y koordinatları) içeren bir dize biçiminde olacak JSON kullanılarak buluta gönderilir.

  3. Masaüstü uygulamasıyla aynı görünüme sahip olan karma gerçeklik uygulaması, Notification Hubs hizmetinden (Desktop PC uygulaması tarafından yeni güncelleştirilmiş olan) nesne hareketiyle ilgili bildirimler alır.

  4. Nesne kimliği, tür ve dönüştürme bilgilerini içeren bir bildirim aldıktan sonra, karma gerçeklik uygulaması alınan bilgileri kendi sahnesine uygular.

Uygulamanızda, sonuçları tasarımınızla nasıl tümleştireceğiniz size bağlı. Bu kurs, bir Azure Hizmetini Unity Projenizle tümleştirmeyi öğretmek için tasarlanmıştır. Karma gerçeklik uygulamanızı geliştirmek için bu kurstan edindiğiniz bilgileri kullanmak sizin işinizdir. Bu kurs, diğer Karma Gerçeklik Laboratuvarlarını doğrudan içermeyen bağımsız bir öğreticidir.

Cihaz desteği

Kurs HoloLens Çevreleyici kulaklıklar
MR ve Azure 308: Cihazlar arası bildirimler ✔️ ✔️

Not

Bu kurs öncelikli olarak Windows Mixed Reality çevreleyici (VR) kulaklıklara odaklansa da, bu kursta öğrendiklerini Microsoft HoloLens uygulayabilirsiniz. Kursu takip ettikçe HoloLens'i desteklemek için kullanmanız gerekebilecek değişikliklerle ilgili notlar görürsünüz. HoloLens'i kullanırken ses yakalama sırasında biraz yankı olduğunu fark edebilirsiniz.

Önkoşullar

Not

Bu öğretici, Unity ve C# ile ilgili temel deneyime sahip geliştiriciler için tasarlanmıştır. Ayrıca, bu belgedeki önkoşulların ve yazılı yönergelerin, yazma sırasında (Mayıs 2018) test edilip doğrulananları temsil ettiğini de unutmayın. Araçları yükleme makalesinde listelendiği gibi en son yazılımı kullanabilirsiniz, ancak bu kurstaki bilgilerin aşağıda listelenenlerden daha yeni yazılımlarda bulacağınız bilgilerle mükemmel bir şekilde eşleşeceği varsayılmamalıdır.

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

Başlamadan önce

  • Bu projeyi oluştururken sorunlarla 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 sorunlara neden olabilir).
  • Microsoft Geliştirici Portalınızın ve Uygulama Kayıt Portalınızın sahibi olmanız gerekir, aksi takdirde 2. Bölümde uygulamaya erişim izniniz olmaz.

1. Bölüm - Microsoft Geliştirici Portalı'nda uygulama oluşturma

Azure Notification Hubs Hizmeti'ni kullanmak için Microsoft Geliştirici Portalı'nda bir Uygulama oluşturmanız gerekir. Uygulamanızın kaydedilerek bildirim gönderip alabilmesi gerekir.

  1. Microsoft Geliştirici Portalı'nda oturum açın.

    Microsoft Hesabınızda oturum açmanız gerekir.

  2. Pano'dan Yeni uygulama oluştur'a tıklayın.

    uygulama oluşturma

  3. Yeni uygulamanız için bir ad ayırmanız gereken bir açılır pencere görüntülenir. Metin kutusuna uygun bir ad ekleyin; seçilen ad kullanılabilir durumdaysa, metin kutusunun sağ kısmında bir onay işareti görünür. Kullanılabilir bir ad ekledikten sonra, açılan pencerenin sol alt kısmındaki Ürün adını ayır düğmesine tıklayın.

    adı ters çevirme

  4. Uygulama oluşturulduktan sonra bir sonraki Bölüme geçmeye hazırsınız.

2. Bölüm - Yeni uygulama kimlik bilgilerinizi alma

Yeni uygulamanızın listelendiği Uygulama Kaydı Portalında oturum açın ve Azure Portal'daNotification Hubs Hizmeti'ni ayarlamak için kullanılacak kimlik bilgilerini alın.

  1. Uygulama Kayıt Portalı'na gidin.

    uygulama kayıt portalı

    Uyarı

    Oturum açmak için Microsoft Hesabınızı kullanmanız gerekir.
    Bu, Windows Mağazası Geliştirici portalı ile önceki Bölümde kullandığınız Microsoft Hesabı olmalıdır.

  2. Uygulamanızı Uygulamalarım bölümünde bulabilirsiniz. Uygulamayı buldukta üzerine tıkladığınızda uygulama adı ve Kayıt içeren yeni bir sayfaya yönlendirilirsiniz.

    yeni kaydettiğiniz uygulama

  3. Uygulama Gizli Dizileri bölümünü ve uygulamanızın Paket SID'sini bulmak için kayıt sayfasını aşağı kaydırın. Sonraki Bölümde Azure Notification Hubs Hizmeti'ni ayarlarken kullanmak üzere her ikisini de kopyalayın.

    uygulama gizli dizileri

3. Bölüm - Azure Portal kurulumu: Notification Hubs Hizmeti oluşturma

Uygulama kimlik bilgileriniz alındığında Azure Portal'a gitmeniz gerekir ve burada bir Azure Notification Hubs Hizmeti oluşturursunuz.

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

    Not

    Henüz bir Azure hesabınız yoksa bir hesap oluşturmanız gerekir. Bu öğreticiyi bir sınıfta veya laboratuvar durumunda takip ediyorsanız eğitmeninize veya yardımcılardan birine yeni hesabınızı ayarlama hakkında yardım isteyin.

  2. Oturum açtıktan sonra sol üst köşedeki Yeni'ye tıklayın, Notification Hub'ı arayın ve Enter tuşuna basın.

    bildirim hub'ı arama

    Not

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

  3. Yeni sayfada Notification Hubs hizmetinin açıklaması sağlanacaktır. Bu komut isteminin sol alt kısmında Oluştur düğmesini seçerek bu hizmetle bir ilişki oluşturun.

    notification hubs örneği oluşturma

  4. Oluştur'a tıkladığınızda:

    1. Bu hizmet örneği için istediğiniz adı ekleyin.

    2. Bu uygulamayla ilişkilendirebileceğiniz bir ad alanı sağlayın.

    3. Bir Konum seçin.

    4. Bir Kaynak Grubu seçin veya yeni bir grup oluşturun. Kaynak grubu, Azure varlıklarından oluşan bir koleksiyon için faturalamayı izlemek, denetlemek, sağlamak ve yönetmek 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 tutulması önerilir.

      Azure Kaynak Grupları hakkında daha fazla bilgi edinmek istiyorsanız lütfen Kaynak Grubunu yönetme ile ilgili bu bağlantıyı izleyin.

    5. Uygun bir Abonelik seçin.

    6. Ayrıca bu Hizmete uygulanan Hüküm ve Koşulları anladığınızdan emin olmanız gerekir.

    7. Oluştur’u seçin.

      hizmet ayrıntılarını doldurma

  5. Oluştur'a tıkladığınızda hizmetin oluşturulmasını beklemeniz gerekir. Bu işlem bir dakika sürebilir.

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

    Bildirim

  7. Yeni Hizmet örneğinizi keşfetmek için bildirimdeki Kaynağa git düğmesine tıklayın. Yeni Notification Hub hizmet örneğine yönlendirilirsiniz.

    Bildirim penceresinde vurgulanan 'Kaynağa git' düğmesini gösteren ekran görüntüsü.

  8. Genel bakış sayfasında, sayfanın ortasında Windows (WNS) seçeneğine tıklayın. Sağdaki panel, daha önce ayarladığınız uygulamadan Paket SID'nizi ve Güvenlik Anahtarınızı gerektiren iki metin alanını gösterecek şekilde değişir.

    yeni oluşturulan hubs hizmeti

  9. Ayrıntıları doğru alanlara kopyaladıktan sonra Kaydet'e tıklayın; Bildirim Hub'ı başarıyla güncelleştirildiğinde bir bildirim alırsınız.

    güvenlik ayrıntılarını kopyalama

4. Bölüm - Azure Portal kurulumu: Tablo Hizmeti oluşturma

Notification Hubs Hizmeti örneğinizi oluşturduktan sonra Azure Portal'ınıza geri dönün. Burada bir Depolama Kaynağı oluşturarak Azure Tablolar Hizmeti oluşturacaksınız.

  1. Henüz oturum açmadıysanız Azure Portal'da oturum açın.

  2. Oturum açtıktan sonra sol üst köşedeki Yeni'ye tıklayın, Depolama hesabı'nı arayın ve Enter tuşuna basın.

    Not

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

  3. Listeden Depolama hesabı - blob, dosya, tablo, kuyruk'u seçin.

    depolama hesabı arama

  4. Yeni sayfada Depolama hesabı hizmetinin açıklaması sağlanır. Bu istemin sol alt kısmında Oluştur düğmesini seçerek bu hizmetin bir örneğini oluşturun.

    depolama örneği oluşturma

  5. Oluştur'a tıkladığınızda bir panel görüntülenir:

    1. Bu hizmet örneği için istediğiniz Adı ekleyin (tümü küçük harf olmalıdır).

    2. Dağıtım modeli için Kaynak yöneticisi'ne tıklayın.

    3. Hesap türü için açılan menüyü kullanarak Depolama (genel amaçlı v1) seçeneğini belirleyin.

    4. Uygun bir Konum seçin.

    5. Çoğaltma açılan menüsü için Okuma erişimli-coğrafi olarak yedekli depolama (RA-GRS) seçeneğini belirleyin.

    6. Performans için Standart'a tıklayın.

    7. Güvenli aktarım gerekli bölümünde Devre Dışı'nı seçin.

    8. Abonelik açılan menüsünden uygun bir abonelik seçin.

    9. Bir Kaynak Grubu seçin veya yeni bir grup oluşturun. Kaynak grubu, Azure varlıklarından oluşan bir koleksiyon için faturalamayı izlemek, denetlemek, sağlamak ve yönetmek 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 tutulması önerilir.

      Azure Kaynak Grupları hakkında daha fazla bilgi edinmek istiyorsanız lütfen Kaynak Grubunu yönetme ile ilgili bu bağlantıyı izleyin.

    10. Bu sizin için bir seçenekse Sanal ağlar seçeneğini Devre Dışı olarak bırakın.

    11. Oluştur’a tıklayın.

      depolama ayrıntılarını doldurma

  6. Oluştur'a tıkladığınızda hizmetin oluşturulmasını beklemeniz gerekir. Bu işlem bir dakika sürebilir.

  7. Hizmet örneği oluşturulduktan sonra portalda bir bildirim görüntülenir. Yeni Hizmet örneğinizi keşfetmek için bildirimlere tıklayın.

    yeni depolama bildirimi

  8. Yeni Hizmet örneğinizi keşfetmek için bildirimdeki Kaynağa git düğmesine tıklayın. Yeni Depolama Hizmeti örneğine genel bakış sayfanıza yönlendirilirsiniz.

    'Dağıtım başarılı oldu' penceresinde vurgulanan 'Kaynağa git' düğmesini gösteren ekran görüntüsü.

  9. Genel bakış sayfasında sağ taraftaki Tablolar'a tıklayın.

    Tabloların seçileceği yeri gösteren ekran görüntüsü.

  10. Sağdaki panel, yeni tablo eklemeniz gereken Tablo hizmeti bilgilerini gösterecek şekilde değişir. Bunu yapmak için sol üst köşedeki +Tablo düğmesine tıklayın.

    Açık Tablolar

  11. Tablo adı girmeniz gereken yeni bir sayfa gösterilir. Bu, sonraki Bölümlerde uygulamanızdaki verilere başvurmak için kullanacağınız addır. Uygun bir ad ekleyin ve Tamam'a tıklayın.

    yeni tablo oluşturma

  12. Yeni tablo oluşturulduktan sonra Tablo hizmeti sayfasında (en altta) görebilirsiniz.

    yeni tablo oluşturuldu

5. Bölüm - Visual Studio'da Azure Tablosunu Tamamlama

Tablo hizmeti depolama hesabınız ayarlandıysa, artık bilgileri depolamak ve almak için kullanılacak olan verilere veri eklemenin zamanı gelmiştir. Tablolarınızı düzenleme işlemi Visual Studio aracılığıyla gerçekleştirilebilir.

  1. Visual Studio'yu açın.

  2. MenüdenBulut GezgininiGörüntüle'ye> tıklayın.

    bulut gezginini açma

  3. Bulut Gezgini yerleşik bir öğe olarak açılır (yükleme zaman alabileceği için sabırlı olun).

    Not

    Depolama Hesaplarınızı oluşturmak için kullandığınız Abonelik görünmüyorsa aşağıdakilere sahip olduğunuzdan emin olun:

    • Azure Portal için kullandığınız hesapla aynı hesapta oturum açtınız.

    • Hesap Yönetimi Sayfasından Aboneliğinizi seçtiniz (hesap ayarlarınızdan bir filtre uygulamanız gerekebilir):

      abonelik bulma

  4. Azure bulut hizmetleriniz gösterilir. Depolama Hesapları'nı bulun ve hesaplarınızı genişletmek için bunun solundaki oka tıklayın.

    açık depolama hesapları

  5. Genişletildikten sonra yeni oluşturduğunuz Depolama hesabınızın kullanılabilir olması gerekir. Depolama alanınızın solundaki oka tıklayın ve genişletildikten sonra Tablolar'ı bulun ve bunun yanındaki oka tıklayarak son Bölümde oluşturduğunuz Tabloyu görüntüleyin. Tablonuza çift tıklayın.

    sahne nesneleri tablosunu açma

  6. Tablonuz Visual Studio pencerenizin ortasında açılır. Üzerinde (artı) bulunan + tablo simgesine tıklayın.

    yeni tablo ekleme

  7. Varlık Eklemenizi isteyen bir pencere görüntülenir. Toplamda her biri birkaç özelliğe sahip üç varlık oluşturacaksınız. Bunlar tablo tarafından verilerinizi bulmak için kullanıldığından PartitionKey ve RowKey değerlerinin zaten sağlandığını fark edeceksiniz.

    bölüm ve satır anahtarı

  8. PartitionKey ve RowKeydeğerlerini aşağıdaki gibi güncelleştirin (eklediğiniz her satır özelliği için bunu yapmayı unutmayın, ancak RowKey değerini her seferinde artırmayı unutmayın):

    doğru Değerler ekleme

  9. Ek veri satırları eklemek için Özellik ekle'ye tıklayın. İlk boş tablonuzun aşağıdaki tabloyla eşleşmesini sağlayın.

  10. İşiniz bittiğinde Tamam'a tıklayın.

    bitirdiğinizde Tamam'a tıklayın

    Uyarı

    X, Y ve Zgirişlerinin TürünüÇift olarak değiştirdiğinizden emin olun.

  11. Tablonuzda artık bir veri satırı olduğunu fark edeceksiniz. + Başka bir varlık eklemek için (artı) simgesine yeniden tıklayın.

    ilk satır

  12. Ek bir özellik oluşturun ve ardından yeni varlığın değerlerini aşağıda gösterilenlerle eşleşecek şekilde ayarlayın.

    küp ekle

  13. Başka bir varlık eklemek için son adımı yineleyin. Bu varlığın değerlerini aşağıda gösterilen değerlerle ayarlayın.

    silindir ekleme

  14. Tablonuz şimdi aşağıdaki gibi görünmelidir.

    tablo tamamlandı

  15. Bu Bölümü tamamladınız. Kaydetmeyi unutmayın.

6. Bölüm - Azure İşlev Uygulaması oluşturma

Tablo hizmetini güncelleştirmek ve Notification Hub aracılığıyla bildirim göndermek için Masaüstü uygulaması tarafından çağrılan bir Azure İşlev Uygulaması oluşturun.

İlk olarak, Azure İşlevinizin ihtiyacınız olan kitaplıkları yüklemesini sağlayacak bir dosya oluşturmanız gerekir.

  1. Not Defteri'nü açın (Windows Tuşu'ya basın ve not defteri yazın).

    not defterini açma

  2. Not Defteri açıkken, altına JSON yapısını ekleyin. Bunu yaptıktan sonra masaüstünüzde project.json olarak kaydedin. Adlandırmanın doğru olması önemlidir: .txtdosya uzantısına sahip OLMADıĞıNDAN emin olun. Bu dosya işlevinizin kullanacağı kitaplıkları tanımlar; NuGet kullandıysanız tanıdık görünür.

    {
    "frameworks": {
        "net46":{
        "dependencies": {
            "WindowsAzure.Storage": "7.0.0",
            "Microsoft.Azure.NotificationHubs" : "1.0.9",
            "Microsoft.Azure.WebJobs.Extensions.NotificationHubs" :"1.1.0"
        }
        }
    }
    }
    
  3. Azure Portal'da oturum açın.

  4. Oturum açtıktan sonra sol üst köşedeki Yeni'ye tıklayın ve İşlev Uygulaması'nı arayın ve Enter tuşuna basın.

    işlev uygulamasını arama

    Not

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

  5. Yeni sayfada İşlev Uygulaması hizmetinin açıklaması sağlanır. Bu komut isteminin sol alt kısmında Oluştur düğmesini seçerek bu hizmetle bir ilişki oluşturun.

    işlev uygulaması örneği

  6. Oluştur'a tıkladıktan sonra aşağıdakileri doldurun:

    1. Uygulama adı alanına bu hizmet örneği için istediğiniz adı ekleyin.

    2. Bir Abonelik seçin.

    3. sizin için uygun fiyatlandırma katmanını seçin. İlk kez bir İşlev App Service oluşturuyorsanız ücretsiz bir katmanın kullanımınıza sunulması gerekir.

    4. Bir Kaynak Grubu seçin veya yeni bir grup oluşturun. Kaynak grubu, Azure varlıklarından oluşan bir koleksiyon için faturalamayı izlemek, denetlemek, sağlamak ve yönetmek 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 tutulması önerilir.

      Azure Kaynak Grupları hakkında daha fazla bilgi edinmek istiyorsanız lütfen Kaynak Grubunu yönetme ile ilgili bu bağlantıyı izleyin.

    5. İşletim sistemi için, hedeflenen platform olduğu için Windows'a tıklayın.

    6. Bir Barındırma Planı seçin (bu öğreticide Tüketim Planı kullanılır.

    7. Konum seçin (önceki adımda oluşturduğunuz depolama alanıyla aynı konumu seçin)

    8. Depolama bölümünde, önceki adımda oluşturduğunuz Depolama Hizmeti'ni seçmeniz gerekir.

    9. Bu uygulamada Application Insights'a ihtiyacınız olmayacak, bu nedenle kapalı bırakmaktan çekinmeyin.

    10. Oluştur’a tıklayın.

      yeni örnek oluşturma

  7. Oluştur'a tıkladığınızda hizmetin oluşturulmasını beklemeniz gerekir, bu işlem bir dakika sürebilir.

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

    yeni bildirim

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

  10. Yeni Hizmet örneğinizi keşfetmek için bildirimdeki Kaynağa git düğmesine tıklayın.

    'Kaynağa git' düğmesinin vurgulandığı 'Dağıtım başarılı' ifadesini gösteren ekran görüntüsü.

  11. İşlevler'in+ yanındaki (artı) simgesine tıklayarak Yeni oluştur'a tıklayın.

    yeni işlev ekleme

  12. Merkezi panelde İşlev oluşturma penceresi görüntülenir. Panelin üst yarısındaki bilgileri yoksayın ve alt kısımda (aşağıda olduğu gibi mavi alanda) bulunan Özel işlev'e tıklayın.

    özel işlev

  13. Penceredeki yeni sayfada çeşitli işlev türleri gösterilir. Mor türleri görüntülemek için aşağı kaydırın ve HTTP PUT öğesi'ne tıklayın.

    http put link

    Önemli

    Sayfayı daha aşağı kaydırmanız gerekebilir (ve Azure Portal güncelleştirmeleri gerçekleştiyse bu görüntü tam olarak aynı görünmeyebilir), ancak HTTP PUT adlı bir öğe arıyorsunuz.

  14. İşlevi yapılandırmanız gereken HTTP PUT penceresi görüntülenir (görüntü için aşağıya bakın).

    1. Dil için açılan menüyü kullanarak C# öğesini seçin.

    2. Ad alanına uygun bir ad girin.

    3. Kimlik doğrulama düzeyi açılan menüsünde İşlev'i seçin.

    4. Tablo adı bölümünde, daha önce Tablo hizmetinizi oluşturmak için kullandığınız tam adı kullanmanız gerekir (aynı harf örneği dahil).

    5. Depolama hesabı bağlantısı bölümünde açılan menüyü kullanın ve oradan depolama hesabınızı seçin. Orada değilse, depolama hesabınızın listelenmesi gereken başka bir paneli göstermek için bölüm başlığının yanındaki Yeni köprüsüne tıklayın.

      'Yeni' köprüsü seçili depolama hesabı bağlantısı bölümünü gösteren ekran görüntüsü.

  15. Oluştur'a tıkladığınızda ayarlarınızın başarıyla güncelleştirildiğini belirten bir bildirim alırsınız.

    create işlevi

  16. Oluştur'a tıkladıktan sonra işlev düzenleyicisine yönlendirilirsiniz.

    update işlev kodu

  17. aşağıdaki kodu işlev düzenleyicisine ekleyin (işlevdeki kodu değiştirerek):

    #r "Microsoft.WindowsAzure.Storage"
    
    using System;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Table;
    using Microsoft.Azure.NotificationHubs;
    using Newtonsoft.Json;
    
    public static async Task Run(UnityGameObject gameObj, CloudTable table, IAsyncCollector<Notification> notification, TraceWriter log)
    {
        //RowKey of the table object to be changed
        string rowKey = gameObj.RowKey;
    
        //Retrieve the table object by its RowKey
        TableOperation operation = TableOperation.Retrieve<UnityGameObject>("UnityPartitionKey", rowKey); 
    
        TableResult result = table.Execute(operation);
    
        //Create a UnityGameObject so to set its parameters
        UnityGameObject existingGameObj = (UnityGameObject)result.Result; 
    
        existingGameObj.RowKey = rowKey;
        existingGameObj.X = gameObj.X;
        existingGameObj.Y = gameObj.Y;
        existingGameObj.Z = gameObj.Z;
    
        //Replace the table appropriate table Entity with the value of the UnityGameObject
        operation = TableOperation.Replace(existingGameObj); 
    
        table.Execute(operation);
    
        log.Verbose($"Updated object position");
    
        //Serialize the UnityGameObject
        string wnsNotificationPayload = JsonConvert.SerializeObject(existingGameObj);
    
        log.Info($"{wnsNotificationPayload}");
    
        var headers = new Dictionary<string, string>();
    
        headers["X-WNS-Type"] = @"wns/raw";
    
        //Send the raw notification to subscribed devices
        await notification.AddAsync(new WindowsNotification(wnsNotificationPayload, headers)); 
    
        log.Verbose($"Sent notification");
    }
    
    // This UnityGameObject represent a Table Entity
    public class UnityGameObject : TableEntity
    {
        public string Type { get; set; }
        public double X { get; set; }
        public double Y { get; set; }
        public double Z { get; set; }
        public string RowKey { get; set; }
    }
    

    Not

    İşlev, dahil edilen kitaplıkları kullanarak Unity sahnesinde taşınan nesnenin adını ve konumunu alır ( UnityGameObject adlı bir C# nesnesi olarak). Bu nesne daha sonra oluşturulan tablo içindeki nesne parametrelerini güncelleştirmek için kullanılır. Bunun ardından işlev, oluşturulan Notification Hub hizmetinize bir çağrı yapar ve bu çağrı abone olunan tüm uygulamaları bilgilendirir.

  18. Kod yerine yerleştirildikten sonra Kaydet'e tıklayın.

  19. Ardından, sayfanın sağ tarafındaki (ok) simgesine tıklayın < .

    karşıya yükleme panelini açma

  20. Sağdan bir panel içeri kaydırılır. Bu panelde Karşıya Yükle'ye tıklayın; bir Dosya Tarayıcısı görüntülenir.

  21. Daha önce Not Defteri'nde oluşturduğunuz project.json dosyasına gidin ve tıklayın ve ardından düğmesine tıklayın. Bu dosya işlevinizin kullanacağı kitaplıkları tanımlar.

    json dosyasını karşıya yükleme

  22. Dosya karşıya yüklendiğinde, sağ taraftaki panelde görünür. Tıklanırken İşlev düzenleyicisinde açılır. Sonraki görüntüyle tam olarak aynı görünmelidir (23. adımın altında).

  23. Ardından, soldaki panelde, İşlevler'in altında Tümleştir bağlantısına tıklayın.

    tümleştirme işlevi

  24. Sonraki sayfada, sağ üst köşede Gelişmiş düzenleyici'ye tıklayın (aşağıda olduğu gibi).

    gelişmiş düzenleyiciyi açma

  25. Orta panelde bir function.json dosyası açılır ve bu dosyanın aşağıdaki kod parçacığıyla değiştirilmesi gerekir. Bu, oluşturduğunuz işlevi ve işleve geçirilen parametreleri tanımlar.

    {
    "bindings": [
        {
        "authLevel": "function",
        "type": "httpTrigger",
        "methods": [
            "get",
            "post"
        ],
        "name": "gameObj",
        "direction": "in"
        },
        {
        "type": "table",
        "name": "table",
        "tableName": "SceneObjectsTable",
        "connection": "mrnothubstorage_STORAGE",
        "direction": "in"
        },
        {
        "type": "notificationHub",
        "direction": "out",
        "name": "notification",
        "hubName": "MR_NotHub_ServiceInstance",
        "connection": "MRNotHubNS_DefaultFullSharedAccessSignature_NH",
        "platform": "wns"
        }
    ]
    }
    
  26. Düzenleyiciniz şimdi aşağıdaki görüntüye benzemelidir:

    standart düzenleyiciye geri dön

  27. Yeni eklediğiniz giriş parametrelerinin tablonuzla ve depolama ayrıntılarınızla eşleşmediğini ve bu nedenle bilgilerinizle güncelleştirilmesi gerektiğini fark edebilirsiniz. Bunu burada yapmayın, daha sonra ele alınmıştır. Geri dönmek için sayfanın sağ üst köşesindeki Standart düzenleyici bağlantısına tıklamanız yeterlidir.

  28. Standart düzenleyiciye geri dönüp Girişler'in altındaki Azure Tablo Depolama (tablo) öğesine tıklayın.

    Tablo girişleri

  29. Farklı olabilecekleri için aşağıdaki bilgilerin bilgilerinizle eşleştiğinden emin olun (aşağıdaki adımların altında bir görüntü vardır):

    1. Tablo adı: Azure Depolama, Tablolar hizmetinizde oluşturduğunuz tablonun adı.

    2. Depolama hesabı bağlantısı: Açılan menünün yanında görünen Yeni'ye tıklayın; pencerenin sağ tarafında bir panel görüntülenir.

      Pencerenin sağındaki panelde 'Yeni oluştur' seçeneğinin vurgulandığı Depolama Hesabı penceresini gösteren ekran görüntüsü.

      1. İşlev Uygulamalarını barındırmak için daha önce oluşturduğunuz Depolama Hesabınızı seçin.

      2. Depolama Hesabı bağlantı değerinin oluşturulduğunu fark edeceksiniz.

      3. İşiniz bittiğinde Kaydet'e bastığınızdan emin olun.

    3. Girişler sayfası artık bilgilerinizi gösteren aşağıdakiyle eşleşmelidir.

      girişler tamamlandı

  30. Ardından, Çıkışlar'ın altında Azure Notification Hub (bildirim) seçeneğine tıklayın. Farklı olabileceğinden aşağıdakilerin bilgilerinizle eşleştiğinden emin olun (aşağıdaki adımların altında bir görüntü vardır):

    1. Bildirim Hub'ı Adı: Bu, daha önce oluşturduğunuz Notification Hub hizmet örneğinizin adıdır.

    2. Notification Hubs ad alanı bağlantısı: Açılan menüyle birlikte görüntülenen Yeni'ye tıklayın.

      çıkışları denetleme

    3. Daha önce ayarladığınız Bildirim Hub'ınınAd Alanını seçmeniz gereken Bağlantı açılır penceresi görüntülenir (aşağıdaki resme bakın).

    4. Ortadaki açılan menüden Bildirim Hub'ınızın adını seçin.

    5. İlke açılan menüsünü DefaultFullSharedAccessSignature olarak ayarlayın.

    6. Geri dönmek için Seç düğmesine tıklayın.

      çıkış güncelleştirmesi

  31. Çıkışlar sayfası artık aşağıdakiyle eşleşmelidir, ancak bunun yerine sizin bilgilerinizle eşleşmelidir. Kaydet'e bastığınizden emin olun.

Uyarı

Bildirim Hub'ı adını doğrudan düzenlemeyin (önceki adımları doğru izlemiş olmanız koşuluyla tüm bunlar Gelişmiş Düzenleyici kullanılarak yapılmalıdır.

Genel bilgiler içeren Çıkışlar sayfasını gösteren ekran görüntüsü.

  1. Bu noktada, çalıştığından emin olmak için işlevi test etmelisiniz. Bunu yapmak için:

    1. İşlev sayfasına bir kez daha gidin:

      Yeni oluşturulan işlevin vurgulandığı işlevler sayfasını gösteren ekran görüntüsü.

    2. İşlev sayfasına dönün, sayfanın sağ ucundaki Test sekmesine tıklayarak Test dikey penceresini açın:

      Sağ tarafta 'Test' vurgulanmış işlevler sayfasının ekran görüntüsü.

    3. Dikey penceredeki İstek gövdesi metin kutusuna aşağıdaki kodu yapıştırın:

      {  
          "Type":null,
          "X":3,
          "Y":0,
          "Z":1,
          "PartitionKey":null,
          "RowKey":"Obj2",
          "Timestamp":"0001-01-01T00:00:00+00:00",
          "ETag":null
      }
      
    4. Test kodu yerindeyse, sağ alt kısımdaki Çalıştır düğmesine tıkladığınızda test çalıştırılır. Testin çıkış günlükleri, işlev kodunuzun altındaki konsol alanında görünür.

      Konsol alanındaki testin çıkış günlüklerini gösteren ekran görüntüsü.

    Uyarı

    Yukarıdaki test başarısız olursa, özellikle tümleştirme panelindeki ayarlar olmak üzere yukarıdaki adımları tam olarak izlemiş olup olmadığınızı bir kez daha denetlemeniz gerekir.

7. Bölüm - Desktop Unity Projesi'ni ayarlama

Önemli

Şimdi oluşturduğunuz Masaüstü uygulaması Unity Düzenleyicisi'nde çalışmaz . Visual Studio (veya dağıtılan uygulama) kullanılarak uygulamanın Derlemesi'nin ardından Düzenleyici dışında çalıştırılması gerekir.

Aşağıda Unity ve karma gerçeklik ile geliştirmeye yönelik tipik bir kurulum verilmiştir ve bu nedenle diğer projeler için iyi bir şablondur.

Karma gerçeklik çevreleyici başlığınızı ayarlayın ve test edin.

Not

Bu kurs için Hareket Denetleyicilerine ihtiyacınız olmayacaktır . Çevreleyici mikrofonlu kulaklığı ayarlama konusunda desteğe ihtiyacınız varsa lütfen Windows Mixed Reality ayarlama ile ilgili bu bağlantıyı izleyin.

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

    Sağ üst kısımda 'Yeni' proje simgesinin vurgulandığı Unity Projeleri penceresinin ekran görüntüsü.

  2. Unity Projesi adı sağlamanız, UnityDesktopNotifHub eklemeniz gerekir. Proje türünün 3B olarak ayarlandığından emin olun. Konum'u sizin için uygun bir yere ayarlayın (kök dizinlere daha yakın olanın daha iyi olduğunu unutmayın). Ardından Proje oluştur'a tıklayın.

    proje oluşturma

  3. Unity açıkken, varsayılan Betik Düzenleyicisi'ninVisual Studio olarak ayarlandığını denetlemeye değer. TercihleriDüzenle'ye> gidin ve yeni pencerede Dış Araçlar'a gidin. Dış Betik Düzenleyicisi'niVisual Studio 2017 olarak değiştirin. Tercihler penceresini kapatın.

    dış VS araçlarını ayarlama

  4. Ardından Dosya>Derleme Ayarları'na gidin ve Evrensel Windows Platformu seçin, ardından seçiminizi uygulamak için Platform Değiştir düğmesine tıklayın.

    platformları değiştirme

  5. Dosya>Derleme Ayarları'ndayken şunları yaptığınızdan emin olun:

    1. Hedef CihazHerhangi Bir Cihaz olarak ayarlanır

      Bu Uygulama masaüstünüz için olacaktır, bu nedenle Herhangi Bir Cihaz olmalıdır

    2. Derleme TürüD3D olarak ayarlandı

    3. SDK, En son yüklenen olarak ayarlandı

    4. Visual Studio SürümüEn son yüklenen olarak ayarlandı

    5. Derleme ve Çalıştırma, Yerel Makine olarak ayarlanır

    6. Buradayken, sahneyi kaydetmeye ve derlemeye eklemeye değer.

      1. Bunu yapmak için Açık Sahne Ekle'yi seçin. Bir kaydetme penceresi görüntülenir.

        Sağ üst kısımda vurgulanmış 'Açık Sahne Ekle'yi gösteren ekran görüntüsü.

      2. Bunun için yeni bir klasör oluşturun ve gelecekte herhangi bir sahne oluşturun, ardından Yeni klasör düğmesini seçerek yeni bir klasör oluşturun ve bunu Sahneler olarak adlandırın.

        Sol üst kısımda 'Yeni klasör' vurgulanmış şekilde oluşturulan yeni Sahneler klasörünü gösteren ekran görüntüsü.

      3. Yeni oluşturulan Sahneler klasörünüzü açın ve Dosya adı: metin alanına NH_Desktop_Scene yazın ve Kaydet'e basın.

        yeni NH_Desktop_Scene

    7. Derleme Ayarları'nda kalan ayarlar şimdilik varsayılan olarak bırakılmalıdır.

  6. Aynı pencerede Yürütücü Ayarları düğmesine tıkladığınızda, denetçinin bulunduğu alanda ilgili panel açılır.

  7. Bu panelde birkaç ayarın doğrulanması gerekir:

    1. Diğer Ayarlar sekmesinde:

      1. Betik Çalışma Zamanı SürümüDeneysel olmalıdır (.NET 4.6 Eşdeğeri)

      2. Betik Arka Ucu.NET olmalıdır

      3. API Uyumluluk Düzeyi.NET 4.6 olmalıdır

        4.6 net sürümü

    2. Yayımlama Ayarları sekmesindeki Özellikler'in altında şunları denetleyin:

      • InternetClient

        Özellikler'in altında InternetClient'ın seçili olduğunu gösteren ekran görüntüsü.

  8. Derleme AyarlarıUnity C# Projeleri artık gri değil; bunun yanındaki onay kutusunu işaretleyin.

  9. Derleme Ayarları penceresini kapatın.

  10. Sahnenizi ve Proje Dosyası>Kaydetme Sahnenizi / Dosya>Kaydetme Projenizi kaydedin.

    Önemli

    Bu proje (Masaüstü Uygulaması) için Unity Kurulum bileşenini atlamak ve doğrudan koda devam etmek istiyorsanız , bu .unitypackage'ı indirebilir, özel paket olarak projenize aktarıp 9. Bölümden devam edebilirsiniz. Yine de betik bileşenlerini eklemeniz gerekir.

8. Bölüm - Unity'de DLL'leri içeri aktarma

Unity için Azure Depolama'yı (Azure için .Net SDK'sını kullanır) kullanacaksınız. Daha fazla bilgi için Unity için Azure Depolama hakkındaki bu bağlantıyı izleyin.

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

SDK'yı kendi projenize aktarmak için GitHub'dan en son .unitypackage dosyasını indirdiğinizden emin olun. Ardından aşağıdakileri yapın:

  1. Varlıkları > İçeri Aktar Paketi Özel Paket > menü seçeneğini kullanarak .unitypackage öğesini Unity'ye ekleyin.

  2. Açılan Unity Paketini İçeri Aktar kutusunda Eklenti>Depolama'nın altındaki her şeyi seçebilirsiniz. Bu kurs için gerekli olmadığından, 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. Proje görünümünde Eklentiler'in altındaki Depolama 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

Herhangi bir platformun işaretini kaldırma

  1. Bu belirli eklentiler seçiliyken Herhangi birPlatform'un işaretini kaldırın ve WSAPlayer'ınişaretini kaldırın ve Uygula'ya tıklayın.

    platform dll'lerini uygulama

    Not

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

  2. Depolama eklentisi klasöründe yalnızca şunları seçin:

    • Microsoft.Data.Services.Client

      küme dll'ler için işlenmez

  3. Platform Ayarları'nın altındaki İşlem Yapma kutusunu işaretleyin ve Uygula'ya tıklayın.

    işlem uygulama

    Not

    Unity derleme yama aracının bu eklentiyi işlemekte zorlandığı için bu eklentiyi "İşleme" olarak işaretledik. Eklenti işlenmese bile çalışmaya devam eder.

9. Bölüm - Desktop Unity projesinde TableToScene sınıfını oluşturma

Şimdi bu uygulamayı çalıştırmak için kodu içeren betikleri oluşturmanız gerekir.

Oluşturmanız gereken ilk betik, aşağıdakilerden sorumlu olan TableToScene betiğidir:

  • Azure Tablosu içindeki varlıkları okuma.
  • Tablo verilerini kullanarak, hangi nesnelerin hangi konumda yerleneceğini belirleyin.

Oluşturmanız gereken ikinci betik, aşağıdakilerden sorumlu olan CloudScene betiğidir:

  • Kullanıcının nesneleri sahnenin çevresine sürüklemesine izin vermek için sol tıklama olayını kaydetme.
  • Bu Unity sahnesinden nesne verilerini seri hale getirme ve Azure İşlev Uygulaması'na gönderme.

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

  1. Proje Paneli,KlasörOluştur'da> bulunan Varlık Klasörü'ne sağ tıklayın. Klasöre Betikler adını verin.

    betikler klasörü oluşturma

    betikler oluşturma klasörü 2

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

  3. Betikler klasörünün içine sağ tıklayın,C# BetiğiOluştur'a> tıklayın. Betiği TableToScene olarak adlandırın.

    Yeni 'TableToScene' betiğinin nasıl oluşturulacağını gösteren ekran görüntüsü.TableToScene yeniden adlandırma

  4. Betiği çift tıklayarak Visual Studio 2017'de açın.

  5. Aşağıdaki ad alanlarını ekleyin:

    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Auth;
    using Microsoft.WindowsAzure.Storage.Table;
    using UnityEngine;
    
  6. sınıfının içine aşağıdaki değişkenleri ekleyin:

        /// <summary>    
        /// allows this class to behave like a singleton
        /// </summary>    
        public static TableToScene instance;
    
        /// <summary>    
        /// Insert here you Azure Storage name     
        /// </summary>    
        private string accountName = " -- Insert your Azure Storage name -- ";
    
        /// <summary>    
        /// Insert here you Azure Storage key    
        /// </summary>    
        private string accountKey = " -- Insert your Azure Storage key -- ";
    

    Not

    accountName değerini Azure Depolama Hizmeti adınızla ve accountKey değeriyle, Azure Portal'daki Azure Depolama Hizmeti'nde bulunan anahtar değeriyle değiştirin (aşağıdaki görüntüye bakın).

    hesap anahtarını getirme

  7. Şimdi sınıfı başlatmak için Start() ve Awake() yöntemlerini ekleyin.

        /// <summary>
        /// Triggers before initialization
        /// </summary>
        void Awake()
        {
            // static instance of this class
            instance = this;
        }
    
        /// <summary>
        /// Use this for initialization
        /// </summary>
        void Start()
        {  
            // Call method to populate the scene with new objects as 
            // pecified in the Azure Table
            PopulateSceneFromTableAsync();
        }
    
  8. TableToScene sınıfı içinde, Azure Tablosundan değerleri alacak yöntemi ekleyin ve bunları kullanarak sahnede uygun ilkelleri oluşturun.

        /// <summary>    
        /// Populate the scene with new objects as specified in the Azure Table    
        /// </summary>    
        private async void PopulateSceneFromTableAsync()
        {
            // Obtain credentials for the Azure Storage
            StorageCredentials creds = new StorageCredentials(accountName, accountKey);
    
            // Storage account
            CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);
    
            // Storage client
            CloudTableClient client = account.CreateCloudTableClient(); 
    
            // Table reference
            CloudTable table = client.GetTableReference("SceneObjectsTable");
    
            TableContinuationToken token = null;
    
            // Query the table for every existing Entity
            do
            {
                // Queries the whole table by breaking it into segments
                // (would happen only if the table had huge number of Entities)
                TableQuerySegment<AzureTableEntity> queryResult = await table.ExecuteQuerySegmentedAsync(new TableQuery<AzureTableEntity>(), token); 
    
                foreach (AzureTableEntity entity in queryResult.Results)
                {
                    GameObject newSceneGameObject = null;
                    Color newColor;
    
                    // check for the Entity Type and spawn in the scene the appropriate Primitive
                    switch (entity.Type)
                    {
                        case "Cube":
                            // Create a Cube in the scene
                            newSceneGameObject = GameObject.CreatePrimitive(PrimitiveType.Cube);
                            newColor = Color.blue;
                            break;
    
                        case "Sphere":
                            // Create a Sphere in the scene
                            newSceneGameObject = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                            newColor = Color.red;
                            break;
    
                        case "Cylinder":
                            // Create a Cylinder in the scene
                            newSceneGameObject = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
                            newColor = Color.yellow;
                            break;
                        default:
                            newColor = Color.white;
                            break;
                    }
    
                    newSceneGameObject.name = entity.RowKey;
    
                    newSceneGameObject.GetComponent<MeshRenderer>().material = new Material(Shader.Find("Diffuse"))
                    {
                        color = newColor
                    };
    
                    //check for the Entity X,Y,Z and move the Primitive at those coordinates
                    newSceneGameObject.transform.position = new Vector3((float)entity.X, (float)entity.Y, (float)entity.Z);
                }
    
                // if the token is null, it means there are no more segments left to query
                token = queryResult.ContinuationToken;
            }
    
            while (token != null);
        }
    
  9. TableToScene sınıfının dışında, Tablo Varlıklarını seri hale getirmek ve seri durumdan çıkarabilmek için uygulama tarafından kullanılan sınıfı tanımlamanız gerekir.

        /// <summary>
        /// This objects is used to serialize and deserialize the Azure Table Entity
        /// </summary>
        [System.Serializable]
        public class AzureTableEntity : TableEntity
        {
            public AzureTableEntity(string partitionKey, string rowKey)
                : base(partitionKey, rowKey) { }
    
            public AzureTableEntity() { }
            public string Type { get; set; }
            public double X { get; set; }
            public double Y { get; set; }
            public double Z { get; set; }
        }
    
  10. Unity Düzenleyicisi'ne dönmeden önce Kaydet'i seçtiğinizden emin olun.

  11. Hiyerarşipanelinden Ana Kamera'ya tıklayın, böylece özellikleri Denetçi'de görünür.

  12. Betikler klasörü açıkken TableToScene dosyasını seçin ve ana kameraya sürükleyin. Sonuç aşağıdaki gibi olmalıdır:

    ana kameraya betik ekleme

10. Bölüm - Desktop Unity Projesinde CloudScene sınıfını oluşturma

Oluşturmanız gereken ikinci betik, aşağıdakilerden sorumlu olan CloudScene betiğidir:

  • Kullanıcının nesneleri sahnenin çevresine sürüklemesine izin vermek için sol tıklama olayını kaydetme.

  • Bu Unity sahnesinden nesne verilerini seri hale getirme ve Azure İşlev Uygulaması'na gönderme.

İkinci betiği oluşturmak için:

  1. Betikler klasörünün içine sağ tıklayın, Oluştur, C# Betiği'ne tıklayın. Betiği CloudScene olarak adlandırın

    Yeni 'CloudScene' betiğinin nasıl oluşturulacağını gösteren ekran görüntüsü.CloudScene'i yeniden adlandırma

  2. Aşağıdaki ad alanlarını ekleyin:

    using Newtonsoft.Json;
    using System.Collections;
    using System.Text;
    using System.Threading.Tasks;
    using UnityEngine;
    using UnityEngine.Networking;
    
  3. Aşağıdaki değişkenleri ekleyin:

        /// <summary>
        /// Allows this class to behave like a singleton
        /// </summary>
        public static CloudScene instance;
    
        /// <summary>
        /// Insert here you Azure Function Url
        /// </summary>
        private string azureFunctionEndpoint = "--Insert here you Azure Function Endpoint--";
    
        /// <summary>
        /// Flag for object being moved
        /// </summary>
        private bool gameObjHasMoved;
    
        /// <summary>
        /// Transform of the object being dragged by the mouse
        /// </summary>
        private Transform gameObjHeld;
    
        /// <summary>
        /// Class hosted in the TableToScene script
        /// </summary>
        private AzureTableEntity azureTableEntity;
    
  4. aşağıdaki görüntüde gösterildiği gibi azureFunctionEndpoint değerini Azure İşlevi App Service Azure Portalı'nda bulunan Azure İşlev Uygulaması URL'nizle değiştirin:

    işlev URL'si alma

  5. Şimdi sınıfı başlatmak için Start() ve Awake() yöntemlerini ekleyin.

        /// <summary>
        /// Triggers before initialization
        /// </summary>
        void Awake()
        {
            // static instance of this class
            instance = this;
        }
    
        /// <summary>
        /// Use this for initialization
        /// </summary>
        void Start()
        {
            // initialise an AzureTableEntity
            azureTableEntity = new AzureTableEntity();
        }
    
  6. Update() yönteminde, fare girişini algılayacak ve sürükleyecek aşağıdaki kodu ekleyin. Bu kod, GameObjects'i sahne içinde taşıyacaktır. Kullanıcı bir nesneyi sürükleyip bıraktıysa, nesnenin adını ve koordinatlarını UpdateCloudScene() yöntemine geçirir. Bu yöntem, Azure tablosunu güncelleştirecek ve bildirimi tetikleyecek olan Azure İşlev Uygulaması hizmetini çağıracaktır.

        /// <summary>
        /// Update is called once per frame
        /// </summary>
        void Update()
        {
            //Enable Drag if button is held down
            if (Input.GetMouseButton(0))
            {
                // Get the mouse position
                Vector3 mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10);
    
                Vector3 objPos = Camera.main.ScreenToWorldPoint(mousePosition);
    
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    
                RaycastHit hit;
    
                // Raycast from the current mouse position to the object overlapped by the mouse
                if (Physics.Raycast(ray, out hit))
                {
                    // update the position of the object "hit" by the mouse
                    hit.transform.position = objPos;
    
                    gameObjHasMoved = true;
    
                    gameObjHeld = hit.transform;
                }
            }
    
            // check if the left button mouse is released while holding an object
            if (Input.GetMouseButtonUp(0) && gameObjHasMoved)
            {
                gameObjHasMoved = false;
    
                // Call the Azure Function that will update the appropriate Entity in the Azure Table
                // and send a Notification to all subscribed Apps
                Debug.Log("Calling Azure Function");
    
                StartCoroutine(UpdateCloudScene(gameObjHeld.name, gameObjHeld.position.x, gameObjHeld.position.y, gameObjHeld.position.z));
            }
        }
    
  7. Şimdi UpdateCloudScene() yöntemini aşağıdaki gibi ekleyin:

        private IEnumerator UpdateCloudScene(string objName, double xPos, double yPos, double zPos)
        {
            WWWForm form = new WWWForm();
    
            // set the properties of the AzureTableEntity
            azureTableEntity.RowKey = objName;
    
            azureTableEntity.X = xPos;
    
            azureTableEntity.Y = yPos;
    
            azureTableEntity.Z = zPos;
    
            // Serialize the AzureTableEntity object to be sent to Azure
            string jsonObject = JsonConvert.SerializeObject(azureTableEntity);
    
            using (UnityWebRequest www = UnityWebRequest.Post(azureFunctionEndpoint, jsonObject))
            {
                byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(jsonObject);
    
                www.uploadHandler = new UploadHandlerRaw(jsonToSend);
    
                www.uploadHandler.contentType = "application/json";
    
                www.downloadHandler = new DownloadHandlerBuffer();
    
                www.SetRequestHeader("Content-Type", "application/json");
    
                yield return www.SendWebRequest();
    
                string response = www.responseCode.ToString();
            }
        }
    
  8. Kodu kaydedin ve Unity'ye dönün

  9. CloudScene betiğini Ana Kamera'ya sürükleyin.

    1. Hiyerarşipanelinden Ana Kamera'ya tıklayın, böylece özellikleri Denetçi'de görünür.

    2. Betikler klasörü açıkken CloudScene betiğini seçin ve Ana Kamera'ya sürükleyin. Sonuç aşağıdaki gibi olmalıdır:

      bulut betiğini ana kameraya sürükleyin

11. Bölüm - Masaüstü Projesini UWP'ye Derleme

Bu projenin Unity bölümü için gereken her şey tamamlandı.

  1. Derleme Ayarları'na (Dosya>Derleme Ayarları) gidin.

  2. Derleme Ayarları penceresinde Derle'ye tıklayın.

    Sağ altta Evrensel Windows Platformu seçili ve 'Oluştur' düğmesinin vurgulandığı Derleme Ayarları penceresini gösteren ekran görüntüsü.

  3. Bir Dosya Gezgini penceresi açılır ve Sizden Derleme konumu girmeniz istenir. Yeni bir klasör oluşturun (sol üst köşedeki Yeni Klasör'e tıklayarak) ve buildS olarak adlandırın.

    derleme için yeni klasör

    1. Yeni BUILDS klasörünü açın ve başka bir klasör oluşturun ( Yeni Klasör'i bir kez daha kullanarak) ve NH_Desktop_App olarak adlandırın.

      klasör adı NH_Desktop_App

    2. NH_Desktop_App seçili durumdayken. Klasör Seç'e tıklayın. Projenin oluşturulması bir dakika kadar sürer.

  4. Derlemenin ardından, yeni projenizin konumunu gösteren Dosya Gezgini görüntülenir. Ancak, sonraki birkaç Bölümde önce diğer Unity projesini oluşturmanız gerektiğinden, bu projeyi açmanız gerekmez.

12. Bölüm - Unity Projesi Karma Gerçeklik Ayarlama

Aşağıda karma gerçeklikle geliştirmeye yönelik tipik bir kurulum verilmiştir ve bu nedenle diğer projeler için iyi bir şablondur.

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

    Sağ üst köşede 'Yeni' vurgulanmış Unity Projeleri penceresini gösteren ekran görüntüsü.

  2. Şimdi bir Unity Projesi adı sağlamanız ve UnityMRNotifHub eklemeniz gerekir. Proje türünün 3B olarak ayarlandığından emin olun. Konum değerini sizin için uygun bir konuma ayarlayın (kök dizinlere daha yakın olmak daha iyidir). Ardından Proje oluştur'a tıklayın.

    name UnityMRNotifHub

  3. Unity açıkken, varsayılan Betik Düzenleyicisi'ninVisual Studio olarak ayarlandığını denetlemeye değer. TercihleriDüzenle'ye> gidin ve yeni pencerede Dış Araçlar'a gidin. Dış Betik Düzenleyicisi'niVisual Studio 2017 olarak değiştirin. Tercihler penceresini kapatın.

    dış düzenleyiciyi VS olarak ayarlama

  4. Ardından Dosya>Derleme Ayarları'na gidin ve Platformu Değiştir düğmesine tıklayarak platformu Evrensel Windows Platformu olarak değiştirin.

    platformları UWP'ye değiştirme

  5. Dosya>Derleme Ayarları'na gidin ve şunları yaptığınızdan emin olun:

    1. Hedef CihazHerhangi Bir Cihaz olarak ayarlanır

      Microsoft HoloLens için Hedef Cihaz'ıHoloLens olarak ayarlayın.

    2. Derleme TürüD3D olarak ayarlandı

    3. SDK en son yüklü olarak ayarlandı

    4. Visual Studio SürümüEn son yüklü olarak ayarlandı

    5. Derleme ve Çalıştırma, Yerel Makine olarak ayarlanır

    6. Buradayken, sahneyi kaydetmeye ve derlemeye eklemeye değer.

      1. Bunu yapmak için Açık Sahne Ekle'yi seçin. Bir kaydetme penceresi görüntülenir.

        Sağ üst köşede 'Açık Sahne Ekle' düğmesinin vurgulandığı Derleme Ayarları penceresini gösteren ekran görüntüsü.

      2. Bunun için yeni bir klasör oluşturun ve gelecekteki herhangi bir sahneyi oluşturun, ardından Yeni klasör düğmesini seçerek yeni bir klasör oluşturun ve bu klasörü Sahneler olarak adlandırın.

        Sahneyi Kaydet penceresinde sol üst köşede vurgulanmış 'Yeni klasör' ifadesini gösteren ekran görüntüsü.

      3. Yeni oluşturduğunuz Sahneler klasörünüzü açın ve Dosya adı: metin alanına NH_MR_Scene yazın ve Kaydet'e basın.

        yeni sahne - NH_MR_Scene

    7. Derleme Ayarları'nda kalan ayarlar şimdilik varsayılan olarak bırakılmalıdır.

  6. Aynı pencerede Oynatıcı Ayarları düğmesine tıkladığınızda, denetçinin bulunduğu alanda ilgili panel açılır.

    oyuncu ayarlarını açma

  7. Bu panelde birkaç ayarın doğrulanması gerekir:

    1. Diğer Ayarlar sekmesinde:

      1. Betik Çalışma Zamanı SürümüDeneysel Olmalıdır (.NET 4.6 Eşdeğeri)

      2. Betik Arka Ucu.NET olmalıdır

      3. API Uyumluluk Düzeyi.NET 4.6 olmalıdır

        api uyumluluğu

    2. Panelin ilerisinde, XR Ayarları'nda (Yayımlama Ayarları'nın altında bulunur), Sanal Gerçeklik Desteği'ni işaretleyin, Windows Mixed Reality SDK'sının eklendiğinden emin olun

      xr ayarlarını güncelleştirme

    3. Yayımlama Ayarları sekmesindeki Özellikler'in altında şunları denetleyin:

      • InternetClient

        InternetClient seçeneğinin işaretli olduğu Yayımlama Ayarları sekmesini gösteren ekran görüntüsü.

  8. Derleme Ayarları'na döndüğünüzde Unity C# Projeleri artık gri değil: Bunun yanındaki onay kutusunu işaretleyin.

  9. Bu değişiklikler yapıldıktan sonra Derleme Ayarları penceresini kapatın.

  10. Sahnenizi ve Proje DosyaNızı>Kaydetme Sahnenizi / Dosya>Kaydetme Projenizi kaydedin.

    Önemli

    Bu projenin Unity Set up bileşenini (karma gerçeklik Uygulaması) atlamak ve doğrudan koda geçmek istiyorsanız , bu .unitypackage'ı indirebilir, Özel Paket olarak projenize aktarıp 14. Bölümden devam edebilirsiniz. Yine de betik bileşenlerini eklemeniz gerekir.

13. Bölüm - Karma Gerçeklik Unity Projesindeki DLL'leri İçeri Aktarma

Unity için Azure Depolama kitaplığını (Azure için .Net SDK'sını kullanır) kullanacaksınız. Unity ile Azure Depolama'yı kullanma konusunda lütfen bu bağlantıyı izleyin. Şu anda Unity'de eklentilerin içeri aktarma işleminden sonra yeniden yapılandırılmasını gerektiren bilinen bir sorun vardır. Hata çözüldükten sonra bu adımlar (bu bölümdeki 4 - 7) artık gerekli olmayacaktır.

SDK'yı kendi projenize aktarmak için en son .unitypackage dosyasını indirdiğinizden emin olun. Ardından aşağıdakileri yapın:

  1. Yukarıdanindirdiğiniz .unitypackage öğesini Varlıklar > İçeriAktarma Paketi>Özel Paket menü seçeneğini kullanarak Unity'ye ekleyin.

  2. Açılan Unity Paketini İçeri Aktar kutusunda Eklenti>Depolama altında her şeyi seçebilirsiniz.

    paketi içeri aktarma

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

  4. Proje görünümünde Eklentiler'in altındaki Depolama 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

    eklentileri seçme

  5. Bu belirli eklentiler seçiliyken Herhangi birPlatform'un işaretini kaldırın ve WSAPlayer'ınişaretini kaldırın ve Uygula'ya tıklayın.

    platform değişikliklerini uygulama

    Not

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

  6. Depolama eklentisi klasöründe yalnızca şunları seçin:

    • Microsoft.Data.Services.Client

      veri hizmetleri istemcisi seçme

  7. Platform Ayarları'nın altındaki İşlem Yapma kutusunu işaretleyin ve Uygula'ya tıklayın.

    işleme

    Not

    Unity derleme patcher bu eklentiyi işlemekte zorlandığı için bu eklentiyi "İşleme" olarak işaretlisiniz. Eklenti işlenmese bile çalışmaya devam eder.

14. Bölüm - Karma gerçeklik Unity projesinde TableToScene sınıfını oluşturma

TableToScene sınıfı, 9. Bölümde açıklanan sınıfla aynıdır. 9. Bölümde açıklanan yordamı izleyerek karma gerçeklik Unity Projesi'nde aynı sınıfı oluşturun.

Bu Bölümü tamamladıktan sonra , Unity Projelerinizin her ikisi de ana kamerada bu sınıfı ayarlar.

15. Bölüm - Karma Gerçeklik Unity Projesinde NotificationReceiver sınıfını oluşturma

Oluşturmanız gereken ikinci betik, aşağıdakiler için sorumlu olan NotificationReceiver betiğidir:

  • Uygulamayı başlatma sırasında Bildirim Hub'ına kaydetme.
  • Bildirim Hub'ından gelen bildirimleri dinleme.
  • Alınan bildirimlerden nesne verilerinin seri durumdan çıkarılması.
  • Seri durumdan çıkarılmış verilere göre sahnedeki GameObjects'i taşıyın.

NotificationReceiver betiğini oluşturmak için:

  1. Betikler klasörünün içine sağ tıklayın, Oluştur, C# Betiği'ne tıklayın. Betiği NotificationReceiver olarak adlandırın.

    yeni c# betikadı oluşturun NotificationReceiver

  2. Betiği çift tıklayarak açın.

  3. Aşağıdaki ad alanlarını ekleyin:

    //using Microsoft.WindowsAzure.Messaging;
    using Newtonsoft.Json;
    using System;
    using System.Collections;
    using UnityEngine;
    
    #if UNITY_WSA_10_0 && !UNITY_EDITOR
    using Windows.Networking.PushNotifications;
    #endif
    
  4. Aşağıdaki değişkenleri ekleyin:

        /// <summary>
        /// allows this class to behave like a singleton
        /// </summary>
        public static NotificationReceiver instance;
    
        /// <summary>
        /// Value set by the notification, new object position
        /// </summary>
        Vector3 newObjPosition;
    
        /// <summary>
        /// Value set by the notification, object name
        /// </summary>
        string gameObjectName;
    
        /// <summary>
        /// Value set by the notification, new object position
        /// </summary>
        bool notifReceived;
    
        /// <summary>
        /// Insert here your Notification Hub Service name 
        /// </summary>
        private string hubName = " -- Insert the name of your service -- ";
    
        /// <summary>
        /// Insert here your Notification Hub Service "Listen endpoint"
        /// </summary>
        private string hubListenEndpoint = "-Insert your Notification Hub Service Listen endpoint-";
    
  5. hubName değerini Notification Hub Hizmeti adınızla, hubListenEndpoint değerini ise Azure Portal'daki Erişim İlkeleri sekmesinde, Azure Notification Hub Hizmeti'nde bulunan uç nokta değeriyle değiştirin (aşağıdaki resme bakın).

    notification hubs ilke uç noktası ekleme

  6. Şimdi sınıfı başlatmak için Start() ve Awake() yöntemlerini ekleyin.

        /// <summary>
        /// Triggers before initialization
        /// </summary>
        void Awake()
        {
            // static instance of this class
            instance = this;
        }
    
        /// <summary>
        /// Use this for initialization
        /// </summary>
        void Start()
        {
            // Register the App at launch
            InitNotificationsAsync();
    
            // Begin listening for notifications
            StartCoroutine(WaitForNotification());
        }
    
  7. Uygulamanın Notification Hub Kitaplığı'ndan Ana İş Parçacığı ile çakışmadan bildirim almasına izin vermek için WaitForNotification yöntemini ekleyin:

        /// <summary>
        /// This notification listener is necessary to avoid clashes 
        /// between the notification hub and the main thread   
        /// </summary>
        private IEnumerator WaitForNotification()
        {
            while (true)
            {
                // Checks for notifications each second
                yield return new WaitForSeconds(1f);
    
                if (notifReceived)
                {
                    // If a notification is arrived, moved the appropriate object to the new position
                    GameObject.Find(gameObjectName).transform.position = newObjPosition;
    
                    // Reset the flag
                    notifReceived = false;
                }
            }
        }
    
  8. Aşağıdaki yöntem olan InitNotificationAsync(), başlatma sırasında uygulamayı Hub Hizmeti bildirimine kaydeder. Unity projeyi oluşturamayacağından koda açıklama eklenir. Visual Studio'da Azure Messaging Nuget paketini içeri aktardığınızda açıklamaları kaldıracaksınız.

        /// <summary>
        /// Register this application to the Notification Hub Service
        /// </summary>
        private async void InitNotificationsAsync()
        {
            // PushNotificationChannel channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    
            // NotificationHub hub = new NotificationHub(hubName, hubListenEndpoint);
    
            // Registration result = await hub.RegisterNativeAsync(channel.Uri);
    
            // If registration was successful, subscribe to Push Notifications
            // if (result.RegistrationId != null)
            // {
            //     Debug.Log($"Registration Successful: {result.RegistrationId}");
            //     channel.PushNotificationReceived += Channel_PushNotificationReceived;
            // }
        }
    
  9. Aşağıdaki Channel_PushNotificationReceived() işleyicisi her bildirim alındığında tetiklenir. Masaüstü Uygulamasında taşınan Azure Tablo Varlığı olan bildirimi seri durumdan çıkartır ve ardından MR sahnesindeki ilgili GameObject'i aynı konuma taşır.

    Önemli

    Kod, Visual Studio'da Nuget Paket Yöneticisi'ni kullanarak Unity projesini derledikten sonra ekleyeceğiniz Azure Mesajlaşma kitaplığına başvuracağından kod açıklama satırı yapılır. Bu nedenle, Unity projesi açıklama satırı yapılmadığı sürece derlenemez. Projenizi derleyip Unity'ye dönmek istediğinizde bu kodu yeniden açıklamanız gerektiğini unutmayın.

        ///// <summary>
        ///// Handler called when a Push Notification is received
        ///// </summary>
        //private void Channel_PushNotificationReceived(PushNotificationChannel sender, PushNotificationReceivedEventArgs args)    
        //{
        //    Debug.Log("New Push Notification Received");
        //
        //    if (args.NotificationType == PushNotificationType.Raw)
        //    {
        //        //  Raw content of the Notification
        //        string jsonContent = args.RawNotification.Content;
        //
        //        // Deserialise the Raw content into an AzureTableEntity object
        //        AzureTableEntity ate = JsonConvert.DeserializeObject<AzureTableEntity>(jsonContent);
        //
        //        // The name of the Game Object to be moved
        //        gameObjectName = ate.RowKey;          
        //
        //        // The position where the Game Object has to be moved
        //        newObjPosition = new Vector3((float)ate.X, (float)ate.Y, (float)ate.Z);
        //
        //        // Flag thats a notification has been received
        //        notifReceived = true;
        //    }
        //}
    
  10. Unity Düzenleyicisi'ne dönmeden önce değişikliklerinizi kaydetmeyi unutmayın.

  11. Hiyerarşipanelinden Ana Kamera'ya tıklayın, böylece özellikleri Denetçi'de görünür.

  12. Betikler klasörü açıkken NotificationReceiver betiğini seçin ve Ana Kamera'ya sürükleyin. Sonuç aşağıdaki gibi olmalıdır:

    bildirim alıcı betiğini kameraya sürükleyin

    Not

    Bunu Microsoft HoloLens için geliştiriyorsanız Ana Kameranın Kamera bileşenini güncelleştirmeniz gerekir, böylece:

    • Bayrakları Temizle: Düz Renk
    • Arka Plan: Siyah

16. Bölüm - UWP'ye Karma Gerçeklik Projesi Oluşturma

Bu Bölüm, önceki proje için derleme işlemiyle aynıdır. Bu projenin Unity bölümü için gereken her şey artık tamamlandı, bu nedenle Unity'den derleme zamanı geldi.

  1. Derleme Ayarları 'na gidin ( Dosya>Derleme Ayarları ).

  2. Derleme Ayarları menüsünde Unity C# Projeleri* seçeneğinin işaretli olduğundan emin olun (derlemeden sonra bu projedeki betikleri düzenlemenize olanak tanır).

  3. Bu işlem tamamlandıktan sonra Oluştur'a tıklayın.

    Sağ altta 'Derle' düğmesinin vurgulandığı Derleme Ayarları penceresini gösteren ekran görüntüsü.

  4. Bir Dosya Gezgini penceresi açılır ve oluştur'a bir konum girmeniz istenir. Yeni bir klasör oluşturun (sol üst köşedeki Yeni Klasör'e tıklayarak) ve bunu BUILDS olarak adlandırın.

    builds klasörü oluşturma

    1. Yeni BUILDS klasörünü açın ve başka bir klasör oluşturun ( Yeni Klasör'i bir kez daha kullanarak) ve NH_MR_App olarak adlandırın.

      NH_MR_Apps klasör oluşturma

    2. NH_MR_App seçili durumda. Klasör Seç'e tıklayın. Projenin oluşturulması bir dakika kadar sürer.

  5. Derlemenin ardından, yeni projenizin konumunda bir Dosya Gezgini penceresi açılır.

17. Bölüm - UnityMRNotifHub Çözümüne NuGet paketleri ekleme

Uyarı

Aşağıdaki NuGet Paketlerini eklediğinizde (ve bir sonraki Bölümde kodun açıklamasını kaldırdığınızda), Unity Projesi içinde yeniden açıldığında Kod'un hatalar göstereceğini unutmayın. Unity Düzenleyicisi'nde geri dönüp düzenlemeye devam etmek isterseniz, bu yorucu kodu açıklama satırı yapmanız ve daha sonra Visual Studio'ya geri döndüğünüzde açıklamayı yeniden kaldırmanız gerekir.

Karma gerçeklik derlemesi tamamlandıktan sonra, oluşturduğunuz karma gerçeklik projesine gidin ve bu klasördeki çözüm (.sln) dosyasına çift tıklayarak çözümünüzü Visual Studio 2017 ile açın. Şimdi WindowsAzure.Messaging.managed NuGet paketini eklemeniz gerekir; Bu, Bildirim Hub'ından Bildirim almak için kullanılan bir kitaplıktır.

NuGet paketini içeri aktarmak için:

  1. Çözüm Gezgini, Çözümünüz'e sağ tıklayın

  2. NuGet Paketlerini Yönet'e tıklayın.

    nuget yöneticisini açma

  3. Gözat sekmesini seçin ve WindowsAzure.Messaging.managed araması yapın.

    windows azure mesajlaşma paketini bulma

  4. Sonucu seçin (aşağıda gösterildiği gibi) ve sağdaki pencerede Project'in yanındaki onay kutusunu seçin. Bu işlem, Assembly-CSharp ve UnityMRNotifHub projesinin yanındaki onay kutusunun yanı sıra Project'in yanındaki onay kutusuna bir onay işareti yerleştirir.

    tüm projeleri işaretle

  5. Başlangıçta sağlanan sürüm bu projeyle uyumlu olmayabilir . Bu nedenle, Sürüm'un yanındaki açılan menüye tıklayın ve Sürüm 0.1.7.9'a ve ardından Yükle'ye tıklayın.

  6. NuGet paketini yüklemeyi tamamladınız. NotificationReceiver sınıfına girdiğiniz açıklamalı kodu bulun ve açıklamaları kaldırın...

Bölüm 18 - UnityMRNotifHub uygulamasını düzenleme, NotificationReceiver sınıfı

NuGet Paketlerini ekledikten sonra NotificationReceiver sınıfındaki bazı kodun açıklamasını kaldırmanız gerekir.

Buna aşağıdakiler dahildir:

  1. En üstteki ad alanı:

    using Microsoft.WindowsAzure.Messaging;
    
  2. InitNotificationsAsync() yöntemindeki tüm kod:

        /// <summary>
        /// Register this application to the Notification Hub Service
        /// </summary>
        private async void InitNotificationsAsync()
        {
            PushNotificationChannel channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    
            NotificationHub hub = new NotificationHub(hubName, hubListenEndpoint);
    
            Registration result = await hub.RegisterNativeAsync(channel.Uri);
    
            // If registration was successful, subscribe to Push Notifications
            if (result.RegistrationId != null)
            {
                Debug.Log($"Registration Successful: {result.RegistrationId}");
                channel.PushNotificationReceived += Channel_PushNotificationReceived;
            }
        }
    

Uyarı

Yukarıdaki kodun içinde bir açıklama vardır: Bu açıklamayı yanlışlıkla açıklamadan kaldırmadığınızdan emin olun (kodunuz varsa kod derlenmeyeceği için!).

  1. Son olarak , Channel_PushNotificationReceived olayı:

        /// <summary>
        /// Handler called when a Push Notification is received
        /// </summary>
        private void Channel_PushNotificationReceived(PushNotificationChannel sender, PushNotificationReceivedEventArgs args)
        {
            Debug.Log("New Push Notification Received");
    
            if (args.NotificationType == PushNotificationType.Raw)
            {
                //  Raw content of the Notification
                string jsonContent = args.RawNotification.Content;
    
                // Deserialize the Raw content into an AzureTableEntity object
                AzureTableEntity ate = JsonConvert.DeserializeObject<AzureTableEntity>(jsonContent);
    
                // The name of the Game Object to be moved
                gameObjectName = ate.RowKey;
    
                // The position where the Game Object has to be moved
                newObjPosition = new Vector3((float)ate.X, (float)ate.Y, (float)ate.Z);
    
                // Flag thats a notification has been received
                notifReceived = true;
            }
        }
    

Bunlar açıklamalı olarak kaydedildiğinden emin olun ve sonraki Bölüme geçin.

19. Bölüm - Karma gerçeklik projesini Mağaza uygulamasıyla ilişkilendirme

Şimdi karma gerçeklik projesini laboratuvarın başında oluşturduğunuz Mağaza Uygulaması ile ilişkilendirmeniz gerekir.

  1. Çözümü açın.

  2. Çözüm Gezgini panelinde UWP uygulaması Projesi'ne sağ tıklayın, Mağaza'ya gidin ve Uygulamayı Mağaza ile ilişkilendirin....

    açık mağaza ilişkilendirmesi

  3. Uygulamanızı Windows Mağazası ile İlişkilendirin adlı yeni bir pencere görüntülenir. İleri’ye tıklayın.

    sonraki ekrana gitme

  4. Oturum açtığınız Hesapla ilişkili tüm Uygulamaları yükler. Hesabınızda oturum açmadıysanız bu sayfada Oturum Açabilirsiniz .

  5. Bu öğreticinin başında oluşturduğunuz Mağaza Uygulaması adını bulun ve seçin. Ardından İleri'ye tıklayın.

    mağazanızın adını bulma ve seçme

  6. İlişkilendir’e tıklayın.

    uygulamayı ilişkilendirme

  7. Uygulamanız artık Mağaza Uygulaması ile İlişkili . Bu, Bildirimleri etkinleştirmek için gereklidir.

20. Bölüm - UnityMRNotifHub ve UnityDesktopNotifHub uygulamalarını dağıtma

Bu Bölüm iki kişi için daha kolay olabilir, sonuçta biri masaüstü bilgisayarınızda çalışan uygulamalar, diğeri de çevreleyici başlığınızda çalışan uygulamalar yer alır.

Çevreleyici başlık uygulaması, sahnedeki değişiklikleri (yerel GameObjects konum değişiklikleri) almayı bekliyor ve Masaüstü uygulaması, MR uygulamasıyla paylaşılacak olan yerel sahnelerinde (konum değişiklikleri) değişiklikler yapıyor olacak. Alıcının dinlemeye başlayabilmesi için önce MR uygulamasını, ardından Masaüstü uygulamasını dağıtmak mantıklıdır.

UnityMRNotifHub uygulamasını Yerel Makinenizde dağıtmak için:

  1. UnityMRNotifHub uygulamanızın çözüm dosyasını Visual Studio 2017'de açın.

  2. Çözüm Platformu'ndax86, Yerel Makine'yi seçin.

  3. Çözüm Yapılandırması'ndaHata Ayıkla'ya tıklayın.

    Araç çubuğunda Çözüm Yapılandırması'nın 'Hata Ayıkla' olarak ayarlandığını gösteren ekran görüntüsü.

  4. Uygulamayı makinenize dışarıdan yüklemek için Oluştur menüsüne gidin ve Çözümü Dağıt'a tıklayın.

  5. Uygulamanız artık yüklenmeye hazır yüklü uygulamalar listesinde görünmelidir.

UnityDesktopNotifHub uygulamasını Yerel Makinede dağıtmak için:

  1. UnityDesktopNotifHub uygulamanızın çözüm dosyasını Visual Studio 2017'de açın.

  2. Çözüm Platformu'ndax86, Yerel Makine'yi seçin.

  3. Çözüm Yapılandırması'ndaHata Ayıkla'ya tıklayın.

    Çözüm Yapılandırması'nın 'Hata Ayıkla' olarak ayarlandığını gösteren ekran görüntüsü.

  4. Uygulamayı makinenize dışarıdan yüklemek için Oluştur menüsüne gidin ve Çözümü Dağıt'a tıklayın.

  5. Uygulamanız artık yüklenmeye hazır yüklü uygulamalar listesinde görünmelidir.

  6. Karma gerçeklik uygulamasını ve ardından Masaüstü uygulamasını başlatın.

Her iki uygulama da çalışırken, masaüstü sahnesindeki bir nesneyi taşıyın (Sol Fare Düğmesi'ni kullanarak). Bu konum değişiklikleri yerel olarak yapılır, seri hale getirilir ve İşlev Uygulaması hizmetine gönderilir. ardından İşlev Uygulaması hizmeti, Notification Hub ile birlikte Tabloyu da güncelleştirir. Bir güncelleştirme aldıktan sonra Bildirim Hub'ı güncelleştirilmiş verileri doğrudan tüm kayıtlı uygulamalara (bu durumda çevreleyici başlık uygulaması) gönderir. Bu uygulama, gelen verileri seri durumdan kaldırır ve yeni konum verilerini yerel nesnelere uygulayarak bunları görünüme taşır.

Azure Notification Hubs uygulamanızı tamamladınız

Tebrikler, Azure Notification Hubs Hizmetinden yararlanan ve uygulamalar arasında iletişime izin veren bir karma gerçeklik uygulaması oluşturacaksınız.

son ürün -end

Ek alıştırmalar

Alıştırma 1

GameObjects'in rengini nasıl değiştirebileceğinizi ve bu bildirimi sahneyi görüntüleyen diğer uygulamalara nasıl gönderebileceğinizi açıklayabilir misiniz?

Alıştırma 2

GameObjects'in hareketini MR uygulamanıza ekleyebilir ve masaüstü uygulamanızda güncelleştirilmiş sahneyi görebilir misiniz?