Bagikan melalui


HoloLens (generasi ke-1) dan Azure 308: Pemberitahuan lintas perangkat


Catatan

Tutorial Mixed Reality Academy dirancang dengan HoloLens (generasi ke-1) dan Mixed Reality Immersive Headsets dalam pikiran. Dengan demikian, kami merasa penting untuk meninggalkan tutorial ini di tempat bagi pengembang yang masih mencari panduan dalam mengembangkan untuk perangkat tersebut. Tutorial ini tidak akan diperbarui dengan toolset atau interaksi terbaru yang digunakan untuk HoloLens 2. Mereka akan dipertahankan untuk terus bekerja pada perangkat yang didukung. Akan ada serangkaian tutorial baru yang akan diposting di masa depan yang akan menunjukkan cara mengembangkan untuk HoloLens 2. Pemberitahuan ini akan diperbarui dengan tautan ke tutorial tersebut ketika diposting.


produk akhir -start

Dalam kursus ini, Anda akan mempelajari cara menambahkan kemampuan Notification Hubs ke aplikasi realitas campuran menggunakan Azure Notification Hubs, Azure Tables, dan Azure Functions.

Azure Notification Hubs adalah layanan Microsoft, yang memungkinkan pengembang mengirim pemberitahuan push yang ditargetkan dan dipersonalisasi ke platform apa pun, semuanya didukung dalam cloud. Ini dapat secara efektif memungkinkan pengembang untuk berkomunikasi dengan pengguna akhir, atau bahkan berkomunikasi antara berbagai aplikasi, tergantung pada skenarionya. Untuk informasi selengkapnya, kunjungi halaman Azure Notification Hubs.

Azure Functions adalah layanan Microsoft, yang memungkinkan pengembang menjalankan bagian kecil kode, 'fungsi', di Azure. Ini menyediakan cara untuk mendelegasikan pekerjaan ke cloud, daripada aplikasi lokal Anda, yang dapat memiliki banyak manfaat. Azure Functions mendukung beberapa bahasa pengembangan, termasuk C#, F#, Node.js, Java, dan PHP. Untuk informasi selengkapnya, kunjungi halaman Azure Functions.

Azure Tables adalah layanan cloud Microsoft, yang memungkinkan pengembang untuk menyimpan data non-SQL terstruktur di cloud, membuatnya mudah diakses di mana saja. Layanan ini menawarkan desain tanpa skema, memungkinkan evolusi tabel sesuai kebutuhan, dan dengan demikian sangat fleksibel. Untuk informasi selengkapnya, kunjungi halaman Tabel Azure

Setelah menyelesaikan kursus ini, Anda akan memiliki aplikasi headset imersif realitas campuran, dan aplikasi PC Desktop, yang akan dapat melakukan hal berikut:

  1. Aplikasi PC Desktop akan memungkinkan pengguna untuk memindahkan objek dalam ruang 2D (X dan Y), menggunakan mouse.

  2. Pergerakan objek dalam aplikasi PC akan dikirim ke cloud menggunakan JSON, yang akan dalam bentuk string, berisi ID objek, jenis, dan informasi transformasi (koordinat X dan Y).

  3. Aplikasi realitas campuran, yang memiliki adegan yang identik dengan aplikasi desktop, akan menerima pemberitahuan mengenai pergerakan objek, dari layanan Notification Hubs (yang baru saja diperbarui oleh aplikasi PC Desktop).

  4. Setelah menerima pemberitahuan, yang akan berisi ID objek, jenis, dan informasi transformasi, aplikasi realitas campuran akan menerapkan informasi yang diterima ke adegannya sendiri.

Dalam aplikasi Anda, terserah Anda tentang bagaimana Anda akan mengintegrasikan hasilnya dengan desain Anda. Kursus ini dirancang untuk mengajari Anda cara mengintegrasikan Layanan Azure dengan Proyek Unity Anda. Ini adalah tugas Anda untuk menggunakan pengetahuan yang Anda peroleh dari kursus ini untuk meningkatkan aplikasi realitas campuran Anda. Kursus ini adalah tutorial mandiri, yang tidak secara langsung melibatkan Mixed Reality Labs lainnya.

Dukungan perangkat

Kursus HoloLens Headset imersif
MR dan Azure 308: Pemberitahuan lintas perangkat ✔️ ✔️

Catatan

Meskipun kursus ini terutama berfokus pada headset imersif Windows Mixed Reality (VR), Anda juga dapat menerapkan apa yang Anda pelajari dalam kursus ini ke Microsoft HoloLens. Saat mengikuti kursus, Anda akan melihat catatan tentang perubahan apa pun yang mungkin perlu Anda gunakan untuk mendukung HoloLens. Saat menggunakan HoloLens, Anda mungkin melihat beberapa gema selama pengambilan suara.

Prasyarat

Catatan

Tutorial ini dirancang untuk pengembang yang memiliki pengalaman dasar dengan Unity dan C#. Perlu diketahui juga bahwa prasyarat dan instruksi tertulis dalam dokumen ini mewakili apa yang telah diuji dan diverifikasi pada saat penulisan (Mei 2018). Anda bebas menggunakan perangkat lunak terbaru, seperti yang tercantum dalam artikel instal alat , meskipun tidak boleh diasumsikan bahwa informasi dalam kursus ini akan sangat cocok dengan apa yang akan Anda temukan di perangkat lunak yang lebih baru daripada apa yang tercantum di bawah ini.

Kami merekomendasikan perangkat keras dan perangkat lunak berikut untuk kursus ini:

Sebelum memulai

  • Untuk menghindari masalah saat membangun proyek ini, sangat disarankan agar Anda membuat proyek yang disebutkan dalam tutorial ini di folder root atau near-root (jalur folder panjang dapat menyebabkan masalah pada build-time).
  • Anda harus menjadi pemilik Portal Pengembang Microsoft dan Portal Pendaftaran Aplikasi, jika tidak, Anda tidak akan memiliki izin untuk mengakses aplikasi di Bab 2.

Bab 1 - Membuat aplikasi di Portal Pengembang Microsoft

Untuk menggunakan Azure Notification Hubs Service, Anda harus membuat Aplikasi di Portal Pengembang Microsoft, karena aplikasi Anda perlu didaftarkan, sehingga dapat mengirim dan menerima pemberitahuan.

  1. Masuk ke Portal Pengembang Microsoft.

    Anda harus masuk ke Akun Microsoft Anda.

  2. Dari Dasbor, klik Buat aplikasi baru.

    membuat aplikasi

  3. Popup akan muncul, di mana Anda perlu memesan nama untuk aplikasi baru Anda. Di kotak teks, sisipkan nama yang sesuai; jika nama yang dipilih tersedia, tanda centang akan muncul di sebelah kanan kotak teks. Setelah Anda menyisipkan nama yang tersedia, klik tombol Pesan nama produk di kiri bawah popup.

    membalikkan nama

  4. Dengan aplikasi yang sekarang dibuat, Anda siap untuk pindah ke Bab berikutnya.

Bab 2 - Ambil kredensial aplikasi baru Anda

Masuk ke Portal Pendaftaran Aplikasi, tempat aplikasi baru Anda akan dicantumkan, dan ambil kredensial yang akan digunakan untuk menyiapkan Layanan Notification Hubs dalam Portal Microsoft Azure.

  1. Navigasi ke Portal Pendaftaran Aplikasi.

    portal pendaftaran aplikasi

    Peringatan

    Anda harus menggunakan Akun Microsoft Anda untuk Masuk.
    Ini harus merupakan Akun Microsoft yang Anda gunakan di Bab sebelumnya, dengan portal Pengembang Bursa Windows.

  2. Anda akan menemukan aplikasi Anda di bawah bagian Aplikasi saya. Setelah Anda menemukannya, klik di atasnya dan Anda akan dibawa ke halaman baru yang memiliki nama aplikasi ditambah Pendaftaran.

    aplikasi Anda yang baru terdaftar

  3. Gulir ke bawah halaman pendaftaran untuk menemukan bagian Rahasia Aplikasi dan Paket SID untuk aplikasi Anda. Salin keduanya untuk digunakan dengan menyiapkan Azure Notification Hubs Service di Bab berikutnya.

    rahasia aplikasi

Bab 3 - Menyiapkan Portal Microsoft Azure: membuat Notification Hubs Service

Dengan kredensial aplikasi yang diambil, Anda harus masuk ke Portal Microsoft Azure, tempat Anda akan membuat Azure Notification Hubs Service.

  1. Masuk ke Portal Microsoft Azure.

    Catatan

    Jika Anda belum memiliki akun Azure, Anda harus membuatnya. Jika Anda mengikuti tutorial ini dalam situasi ruang kelas atau lab, mintalah instruktur atau salah satu proktor untuk membantu menyiapkan akun baru Anda.

  2. Setelah Anda masuk, klik Baru di sudut kiri atas, dan cari Notification Hub, dan klik Enter.

    cari hub pemberitahuan

    Catatan

    Kata Baru mungkin telah diganti dengan Buat sumber daya, di portal yang lebih baru.

  3. Halaman baru akan memberikan deskripsi layanan Notification Hubs . Di kiri bawah prompt ini, pilih tombol Buat , untuk membuat asosiasi dengan layanan ini.

    membuat instans hub pemberitahuan

  4. Setelah Anda mengklik Buat:

    1. Masukkan nama yang Anda inginkan untuk instans layanan ini.

    2. Berikan namespace layanan yang dapat Anda kaitkan dengan aplikasi ini.

    3. Pilih Lokasi.

    4. Pilih Grup Sumber Daya atau buat yang baru. Grup sumber daya menyediakan cara untuk memantau, mengontrol akses, menyediakan, dan mengelola penagihan untuk kumpulan aset Azure. Disarankan untuk menyimpan semua layanan Azure yang terkait dengan satu proyek (misalnya seperti lab ini) di bawah grup sumber daya umum).

      Jika Anda ingin membaca selengkapnya tentang Grup Sumber Daya Azure, ikuti tautan ini tentang cara mengelola Grup Sumber Daya.

    5. Pilih Langganan yang sesuai.

    6. Anda juga perlu mengonfirmasi bahwa Anda telah memahami Syarat dan Ketentuan yang diterapkan pada Layanan ini.

    7. Pilih Buat.

      isi detail layanan

  5. Setelah mengklik Buat, Anda harus menunggu layanan dibuat, ini mungkin memakan waktu satu menit.

  6. Pemberitahuan akan muncul di portal setelah instans Layanan dibuat.

    notification

  7. Klik tombol Buka sumber daya di pemberitahuan untuk menjelajahi instans Layanan baru Anda. Anda akan dibawa ke instans layanan Notification Hub baru Anda.

    Cuplikan layar yang memperlihatkan tombol 'Buka sumber daya' disorot di jendela pemberitahuan.

  8. Dari halaman gambaran umum, setengah bagian bawah halaman, klik Windows (WNS). Panel di sebelah kanan akan berubah untuk menampilkan dua bidang teks, yang memerlukan SID Paket dan Kunci Keamanan Anda, dari aplikasi yang Anda siapkan sebelumnya.

    layanan hub yang baru dibuat

  9. Setelah Anda menyalin detail ke bidang yang benar, klik Simpan, dan Anda akan menerima pemberitahuan ketika Notification Hub berhasil diperbarui.

    salin detail keamanan

Bab 4 - Menyiapkan Portal Microsoft Azure: membuat Layanan Tabel

Setelah membuat instans Notification Hubs Service, navigasikan kembali ke Portal Microsoft Azure, tempat Anda akan membuat Layanan Tabel Azure dengan membuat Sumber Daya Penyimpanan.

  1. Jika belum masuk, masuk ke Portal Microsoft Azure.

  2. Setelah masuk, klik Baru di sudut kiri atas, dan cari akun Penyimpanan, dan klik Enter.

    Catatan

    Kata Baru mungkin telah diganti dengan Buat sumber daya, di portal yang lebih baru.

  3. Pilih Akun penyimpanan - blob, file, tabel, antrean dari daftar.

    cari akun penyimpanan

  4. Halaman baru akan memberikan deskripsi layanan akun Penyimpanan. Di kiri bawah prompt ini, pilih tombol Buat , untuk membuat instans layanan ini.

    membuat instans penyimpanan

  5. Setelah Anda mengklik Buat, panel akan muncul:

    1. Masukkan Nama yang Anda inginkan untuk instans layanan ini (harus semua huruf kecil).

    2. Untuk Model penyebaran, klik Resource manager.

    3. Untuk Jenis akun, menggunakan menu dropdown, pilih Penyimpanan (tujuan umum v1).

    4. Pilih Lokasi yang sesuai.

    5. Untuk menu dropdown Replikasi, pilih Penyimpanan baca-akses-geo-redundan (RA-GRS).

    6. Untuk Performa, klik Standar.

    7. Di dalam bagian Transfer aman diperlukan , pilih Dinonaktifkan.

    8. Dari menu dropdown Langganan , pilih langganan yang sesuai.

    9. Pilih Grup Sumber Daya atau buat yang baru. Grup sumber daya menyediakan cara untuk memantau, mengontrol akses, menyediakan, dan mengelola penagihan untuk kumpulan aset Azure. Disarankan untuk menyimpan semua layanan Azure yang terkait dengan satu proyek (misalnya seperti lab ini) di bawah grup sumber daya umum).

      Jika Anda ingin membaca selengkapnya tentang Grup Sumber Daya Azure, ikuti tautan ini tentang cara mengelola Grup Sumber Daya.

    10. Biarkan Jaringan virtual sebagai Dinonaktifkan jika ini adalah opsi untuk Anda.

    11. Klik Buat.

      isi detail penyimpanan

  6. Setelah mengklik Buat, Anda harus menunggu layanan dibuat, ini mungkin memakan waktu satu menit.

  7. Pemberitahuan akan muncul di portal setelah instans Layanan dibuat. Klik pemberitahuan untuk menjelajahi instans Layanan baru Anda.

    pemberitahuan penyimpanan baru

  8. Klik tombol Buka sumber daya di pemberitahuan untuk menjelajahi instans Layanan baru Anda. Anda akan dibawa ke halaman gambaran umum instans Storage Service baru Anda.

    Cuplikan layar yang memperlihatkan tombol 'Buka sumber daya' disorot di jendela 'Penyebaran berhasil'.

  9. Dari halaman gambaran umum, ke sisi kanan, klik Tabel.

    Cuplikan layar yang memperlihatkan tempat memilih Tabel.

  10. Panel di sebelah kanan akan berubah untuk menampilkan informasi layanan Tabel, di mana Anda perlu menambahkan tabel baru. Lakukan ini dengan mengklik tombol + Tabel di sudut kiri atas.

    buka Tabel

  11. Halaman baru akan ditampilkan, di mana Anda perlu memasukkan nama Tabel. Ini adalah nama yang akan Anda gunakan untuk merujuk ke data dalam aplikasi Anda di Bab selanjutnya. Sisipkan nama yang sesuai dan klik OK.

    buat tabel baru

  12. Setelah tabel baru dibuat, Anda akan dapat melihatnya di dalam halaman Layanan tabel (di bagian bawah).

    tabel baru dibuat

Bab 5 - Menyelesaikan Tabel Azure di Visual Studio

Sekarang setelah akun penyimpanan layanan Tabel Anda telah disiapkan, saatnya untuk menambahkan data ke akun tersebut, yang akan digunakan untuk menyimpan dan mengambil informasi. Pengeditan Tabel Anda dapat dilakukan melalui Visual Studio.

  1. Membuka Visual Studio.

  2. Dari menu, klik Tampilkan>Cloud Explorer.

    buka penjelajah cloud

  3. Cloud Explorer akan terbuka sebagai item yang ditambatkan (bersabar, karena pemuatan mungkin memakan waktu).

    Catatan

    Jika Langganan yang Anda gunakan untuk membuat Akun Penyimpanan Anda tidak terlihat, pastikan Anda memiliki:

    • Masuk ke akun yang sama dengan yang Anda gunakan untuk Portal Microsoft Azure.

    • Memilih Langganan Anda dari Halaman Manajemen Akun (Anda mungkin perlu menerapkan filter dari pengaturan akun Anda):

      temukan langganan

  4. Layanan cloud Azure Anda akan ditampilkan. Temukan Akun Penyimpanan dan klik panah di sebelah kirinya untuk memperluas akun Anda.

    buka akun penyimpanan

  5. Setelah diperluas, akun Penyimpanan yang baru dibuat akan tersedia. Klik panah di sebelah kiri penyimpanan Anda, lalu setelah diperluas, temukan Tabel dan klik panah di sampingnya, untuk menampilkan Tabel yang Anda buat di Bab terakhir. Klik dua kali Tabel Anda.

    buka tabel objek adegan

  6. Tabel Anda akan dibuka di tengah jendela Visual Studio Anda. Klik ikon tabel dengan + (plus) di atasnya.

    tambahkan tabel baru

  7. Jendela akan muncul yang meminta Anda untuk Menambahkan Entitas. Anda akan membuat tiga entitas secara total, masing-masing dengan beberapa properti. Anda akan melihat bahwa PartitionKey dan RowKey sudah disediakan, karena ini digunakan oleh tabel untuk menemukan data Anda.

    kunci partisi dan baris

  8. Perbarui Nilai PartitionKey dan RowKey sebagai berikut (ingatlah untuk melakukan ini untuk setiap properti baris yang Anda tambahkan, meskipun menambah RowKey setiap kali):

    tambahkan Nilai yang benar

  9. Klik Tambahkan properti untuk menambahkan baris data tambahan. Buat tabel kosong pertama Anda cocok dengan tabel di bawah ini.

  10. Klik OK setelah Anda selesai.

    klik ok setelah selesai

    Peringatan

    Pastikan Anda telah mengubah jenis entri X, Y, dan Z menjadi Ganda.

  11. Anda akan melihat tabel Anda sekarang memiliki baris data. + Klik ikon (plus) lagi untuk menambahkan entitas lain.

    baris pertama

  12. Buat properti tambahan, lalu atur nilai entitas baru agar sesuai dengan yang ditunjukkan di bawah ini.

    tambahkan kubus

  13. Ulangi langkah terakhir untuk menambahkan entitas lain. Atur nilai untuk entitas ini ke yang ditunjukkan di bawah ini.

    tambahkan silinder

  14. Tabel Anda sekarang akan terlihat seperti yang di bawah ini.

    tabel selesai

  15. Anda telah menyelesaikan Bab ini. Pastikan untuk menyimpan.

Bab 6 - Membuat Aplikasi Fungsi Azure

Buat Aplikasi Fungsi Azure, yang akan dipanggil oleh aplikasi Desktop untuk memperbarui layanan Tabel dan mengirim pemberitahuan melalui Notification Hub.

Pertama, Anda perlu membuat file yang akan memungkinkan Azure Function Memuat pustaka yang Anda butuhkan.

  1. Buka Notepad (tekan Tombol Windows dan ketik notepad).

    buka notepad

  2. Dengan Notepad terbuka, masukkan struktur JSON di bawah ini ke dalamnya. Setelah Anda melakukannya, simpan di desktop Anda sebagai project.json. Penting bahwa penamaan sudah benar: pastikan tidak memiliki ekstensi file .txt . File ini mendefinisikan pustaka yang akan digunakan fungsi Anda, jika Anda telah menggunakan NuGet, itu akan terlihat akrab.

    {
    "frameworks": {
        "net46":{
        "dependencies": {
            "WindowsAzure.Storage": "7.0.0",
            "Microsoft.Azure.NotificationHubs" : "1.0.9",
            "Microsoft.Azure.WebJobs.Extensions.NotificationHubs" :"1.1.0"
        }
        }
    }
    }
    
  3. Masuk ke Portal Microsoft Azure.

  4. Setelah Anda masuk, klik Baru di sudut kiri atas, dan cari Aplikasi Fungsi, tekan Enter.

    cari aplikasi fungsi

    Catatan

    Kata Baru mungkin telah diganti dengan Buat sumber daya, di portal yang lebih baru.

  5. Halaman baru akan memberikan deskripsi layanan Aplikasi Fungsi. Di kiri bawah prompt ini, pilih tombol Buat , untuk membuat asosiasi dengan layanan ini.

    instans aplikasi fungsi

  6. Setelah Anda mengklik Buat, isi yang berikut ini:

    1. Untuk Nama aplikasi, sisipkan nama yang Anda inginkan untuk instans layanan ini.

    2. Pilih Langganan.

    3. Pilih tingkat harga yang sesuai untuk Anda, jika ini pertama kalinya membuat Function App Service, tingkat gratis harus tersedia untuk Anda.

    4. Pilih Grup Sumber Daya atau buat yang baru. Grup sumber daya menyediakan cara untuk memantau, mengontrol akses, menyediakan, dan mengelola penagihan untuk kumpulan aset Azure. Disarankan untuk menyimpan semua layanan Azure yang terkait dengan satu proyek (misalnya seperti lab ini) di bawah grup sumber daya umum).

      Jika Anda ingin membaca selengkapnya tentang Grup Sumber Daya Azure, ikuti tautan ini tentang cara mengelola Grup Sumber Daya.

    5. Untuk OS, klik Windows, karena itu adalah platform yang dimaksudkan.

    6. Pilih Paket Hosting (tutorial ini menggunakan Paket Konsumsi.

    7. Pilih Lokasi (pilih lokasi yang sama dengan penyimpanan yang telah Anda buat di langkah sebelumnya)

    8. Untuk bagian Penyimpanan , Anda harus memilih Layanan Penyimpanan yang Anda buat di langkah sebelumnya.

    9. Anda tidak akan memerlukan Application Insights di aplikasi ini, jadi jangan ragu untuk membiarkannya Nonaktif.

    10. Klik Buat.

      buat instans baru

  7. Setelah mengklik Buat , Anda harus menunggu layanan dibuat, ini mungkin perlu waktu satu menit.

  8. Pemberitahuan akan muncul di portal setelah instans Layanan dibuat.

    pemberitahuan baru

  9. Klik pemberitahuan untuk menjelajahi instans Layanan baru Anda.

  10. Klik tombol Buka sumber daya di pemberitahuan untuk menjelajahi instans Layanan baru Anda.

    Cuplikan layar yang memperlihatkan 'Penyebaran berhasil' dengan tombol 'Buka sumber daya' disorot.

  11. Klik ikon (plus) di + samping Functions, untuk Membuat baru.

    tambahkan fungsi baru

  12. Di dalam panel pusat, jendela Pembuatan fungsi akan muncul. Abaikan informasi di bagian atas panel, dan klik Fungsi kustom, yang terletak di dekat bagian bawah (di area biru, seperti di bawah).

    fungsi kustom

  13. Halaman baru dalam jendela akan menampilkan berbagai jenis fungsi. Gulir ke bawah untuk melihat jenis ungu, dan klik elemen HTTP PUT .

    tautan taruh http

    Penting

    Anda mungkin harus menggulir lebih jauh ke bawah halaman (dan gambar ini mungkin tidak terlihat sama persis, jika pembaruan Portal Microsoft Azure telah terjadi), namun, Anda mencari elemen yang disebut HTTP PUT.

  14. Jendela HTTP PUT akan muncul, di mana Anda perlu mengonfigurasi fungsi (lihat di bawah ini untuk gambar).

    1. Untuk Bahasa, menggunakan menu dropdown, pilih C#.

    2. Untuk Nama, masukkan nama yang sesuai.

    3. Di menu dropdown Tingkat autentikasi, pilih Fungsi.

    4. Untuk bagian Nama tabel, Anda perlu menggunakan nama persis yang Anda gunakan untuk membuat layanan Tabel Sebelumnya (termasuk huruf besar/kecil yang sama).

    5. Di dalam bagian Koneksi akun penyimpanan, gunakan menu dropdown, dan pilih akun penyimpanan Anda dari sana. Jika tidak ada, klik hyperlink Baru bersama judul bagian, untuk menampilkan panel lain, tempat akun penyimpanan Anda harus dicantumkan.

      Cuplikan layar yang memperlihatkan bagian Koneksi akun penyimpanan dengan hyperlink 'Baru' dipilih.

  15. Klik Buat dan Anda akan menerima pemberitahuan bahwa pengaturan Anda telah berhasil diperbarui.

    buat fungsi

  16. Setelah mengklik Buat, Anda akan diarahkan ke editor fungsi.

    memperbarui kode fungsi

  17. Sisipkan kode berikut ke editor fungsi (mengganti kode dalam fungsi):

    #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; }
    }
    

    Catatan

    Menggunakan pustaka yang disertakan, fungsi menerima nama dan lokasi objek yang dipindahkan di adegan Unity (sebagai objek C#, yang disebut UnityGameObject). Objek ini kemudian digunakan untuk memperbarui parameter objek dalam tabel yang dibuat. Setelah ini, fungsi melakukan panggilan ke layanan Notification Hub yang Anda buat, yang memberi tahu semua aplikasi berlangganan.

  18. Dengan kode di tempat, klik Simpan.

  19. Selanjutnya, klik < ikon (panah), di sisi kanan halaman.

    buka panel unggah

  20. Panel akan meluncur masuk dari kanan. Di panel tersebut, klik Unggah, dan Browser File akan muncul.

  21. Navigasi ke, dan klik, file project.json , yang Anda buat di Notepad sebelumnya, lalu klik tombol Buka . File ini menentukan pustaka yang akan digunakan fungsi Anda.

    unggah json

  22. Ketika file telah diunggah, file akan muncul di panel di sebelah kanan. Mengkliknya akan membukanya dalam editor Fungsi . Ini harus terlihat sama persis dengan gambar berikutnya (di bawah langkah 23).

  23. Kemudian, di panel di sebelah kiri, di bawah Functions, klik tautan Integrasikan .

    mengintegrasikan fungsi

  24. Pada halaman berikutnya, di sudut kanan atas, klik Editor tingkat lanjut (seperti di bawah).

    buka editor tingkat lanjut

  25. File function.json akan dibuka di panel tengah, yang perlu diganti dengan cuplikan kode berikut. Ini mendefinisikan fungsi yang Anda bangun dan parameter yang diteruskan ke fungsi.

    {
    "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. Editor Anda sekarang akan terlihat seperti gambar di bawah ini:

    kembali ke editor standar

  27. Anda mungkin melihat parameter input yang baru saja Anda sisipkan mungkin tidak cocok dengan detail tabel dan penyimpanan Anda dan oleh karena itu perlu diperbarui dengan informasi Anda. Jangan lakukan ini di sini, karena tercakup berikutnya. Cukup klik tautan editor Standar, di sudut kanan atas halaman, untuk kembali.

  28. Kembali ke editor Standar, klik Azure Table Storage (tabel), di bawah Input.

    Input tabel

  29. Pastikan kecocokan berikut dengan informasi Anda , karena mungkin berbeda (ada gambar di bawah langkah-langkah berikut):

    1. Nama tabel: nama tabel yang Anda buat dalam Azure Storage, layanan Tabel.

    2. Koneksi akun penyimpanan: klik baru, yang muncul di samping menu dropdown, dan panel akan muncul di sebelah kanan jendela.

      Cuplikan layar yang memperlihatkan jendela Akun Penyimpanan dengan 'Buat baru' disorot di panel di sebelah kanan jendela.

      1. Pilih Akun Penyimpanan Anda, yang Anda buat sebelumnya untuk menghosting Aplikasi Fungsi.

      2. Anda akan melihat bahwa nilai koneksi Akun Penyimpanan telah dibuat.

      3. Pastikan untuk menekan Simpan setelah Anda selesai.

    3. Halaman Input sekarang harus cocok dengan yang di bawah ini, memperlihatkan informasi Anda .

      input selesai

  30. Selanjutnya, klik Azure Notification Hub (pemberitahuan) - di bawah Output. Pastikan berikut ini cocok dengan informasi Anda , karena mungkin berbeda (ada gambar di bawah langkah-langkah berikut):

    1. Nama Hub Pemberitahuan: ini adalah nama instans layanan Notification Hub Anda, yang Anda buat sebelumnya.

    2. Koneksi namespace Notification Hubs: klik baru, yang muncul bersama menu dropdown.

      periksa output

    3. Popup Koneksi akan muncul (lihat gambar di bawah), tempat Anda perlu memilih Namespace Notification Hub, yang Anda siapkan sebelumnya.

    4. Pilih nama Notification Hub Anda dari menu dropdown tengah.

    5. Atur menu dropdown Kebijakan ke DefaultFullSharedAccessSignature.

    6. Klik tombol Pilih untuk kembali.

      pembaruan output

  31. Halaman Output sekarang harus cocok dengan di bawah ini, tetapi dengan informasi Anda sebagai gantinya. Pastikan untuk menekan Simpan.

Peringatan

Jangan edit nama Notification Hub secara langsung (ini semua harus dilakukan menggunakan Editor Lanjutan, asalkan Anda mengikuti langkah-langkah sebelumnya dengan benar.

Cuplikan layar yang memperlihatkan halaman Output dengan informasi umum.

  1. Pada titik ini, Anda harus menguji fungsi , untuk memastikan fungsi berfungsi. Untuk melakukan ini:

    1. Navigasi ke halaman fungsi sekali lagi:

      Cuplikan layar yang memperlihatkan halaman fungsi dengan fungsi yang baru dibuat disorot.

    2. Kembali ke halaman fungsi, klik tab Uji di sisi paling kanan halaman, untuk membuka bilah Uji :

      Cuplikan layar halaman fungsi dengan 'Uji' disorot di sisi kanan.

    3. Dalam kotak teks Isi permintaan bilah, tempelkan kode di bawah ini:

      {  
          "Type":null,
          "X":3,
          "Y":0,
          "Z":1,
          "PartitionKey":null,
          "RowKey":"Obj2",
          "Timestamp":"0001-01-01T00:00:00+00:00",
          "ETag":null
      }
      
    4. Dengan kode pengujian di tempat, klik tombol Jalankan di kanan bawah, dan pengujian akan dijalankan. Log output pengujian akan muncul di area konsol, di bawah kode fungsi Anda.

      Cuplikan layar yang menunjukkan log output pengujian di area konsol.

    Peringatan

    Jika pengujian di atas gagal, Anda harus memeriksa kembali apakah Anda telah mengikuti langkah-langkah di atas dengan tepat, terutama pengaturan dalam panel integrasi.

Bab 7 - Menyiapkan Proyek Unity Desktop

Penting

Aplikasi Desktop yang sekarang Anda buat, tidak akan berfungsi di Editor Unity. Ini perlu dijalankan di luar Editor, mengikuti Bangunan aplikasi, menggunakan Visual Studio (atau aplikasi yang disebarkan).

Berikut ini adalah pengaturan khas untuk mengembangkan dengan Unity dan realitas campuran, dan dengan demikian, adalah templat yang baik untuk proyek lain.

Siapkan dan uji headset imersif realitas campuran Anda.

Catatan

Anda tidak akan memerlukan Pengontrol Gerakan untuk kursus ini. Jika Anda memerlukan dukungan untuk menyiapkan headset imersif, silakan ikuti tautan ini tentang cara menyiapkan Windows Mixed Reality.

  1. Buka Unity dan klik Baru.

    Cuplikan layar jendela Proyek Unity dengan ikon proyek 'Baru' disorot di kanan atas.

  2. Anda perlu memberikan nama Proyek Unity, sisipkan UnityDesktopNotifHub. Pastikan jenis proyek diatur ke 3D. Atur Lokasi ke tempat yang sesuai untuk Anda (ingat, lebih dekat ke direktori akar lebih baik). Lalu, klik Buat proyek.

    buat proyek

  3. Dengan Unity terbuka, ada baiknya memeriksa Editor Skrip default diatur ke Visual Studio. Buka Edit>Preferensi lalu dari jendela baru, navigasikan ke Alat Eksternal. Ubah Editor Skrip Eksternal ke Visual Studio 2017. Tutup jendela Preferensi .

    mengatur alat VS eksternal

  4. Selanjutnya, buka Pengaturan Build File>dan pilih Platform Windows Universal, lalu klik tombol Beralih Platform untuk menerapkan pilihan Anda.

    beralih platform

  5. Saat masih dalam >Pengaturan File Build, pastikan bahwa:

    1. Perangkat Target diatur ke Perangkat Apa Pun

      Aplikasi ini akan untuk desktop Anda, jadi harus Perangkat Apa Pun

    2. Jenis Build diatur ke D3D

    3. SDK diatur ke Terbaru diinstal

    4. Versi Visual Studio diatur ke Terbaru diinstal

    5. Build and Run diatur ke Komputer Lokal

    6. Sementara di sini, ada baiknya menyimpan adegan, dan menambahkannya ke build.

      1. Lakukan ini dengan memilih Tambahkan Adegan Terbuka. Jendela penyimpanan akan muncul.

        Cuplikan layar yang memperlihatkan 'Tambahkan Adegan Terbuka' disorot di kanan atas.

      2. Buat folder baru untuk ini, dan adegan di masa mendatang, lalu pilih tombol Folder baru, untuk membuat folder baru, beri nama Adegan.

        Cuplikan layar yang memperlihatkan folder Adegan baru yang dibuat dengan 'Folder baru' disorot di kiri atas.

      3. Buka folder Adegan yang baru dibuat, lalu di bidang Nama file: teks, ketik NH_Desktop_Scene, lalu tekan Simpan.

        NH_Desktop_Scene baru

    7. Pengaturan yang tersisa, di Pengaturan Build, harus dibiarkan sebagai default untuk saat ini.

  6. Di jendela yang sama klik tombol Pengaturan Pemutar, ini akan membuka panel terkait di ruang tempat Pemeriksa berada.

  7. Di panel ini, beberapa pengaturan perlu diverifikasi:

    1. Di tab Pengaturan Lainnya:

      1. Versi Runtime Pembuatan Skrip harus Eksperimental (Setara.NET 4.6)

      2. Scripting Backend harus .NET

      3. Tingkat Kompatibilitas API harus .NET 4.6

        Versi bersih 4.6

    2. Dalam tab Pengaturan Penerbitan, di bawah Kemampuan, periksa:

      • InternetClient

        Cuplikan layar yang memperlihatkan InternetClient dipilih di bawah Kemampuan.

  8. Kembali ke Pengaturan Build Proyek Unity C# tidak lagi berwarna abu-abu; centang kotak di samping ini.

  9. Tutup jendela Pengaturan Build.

  10. Simpan Scene dan Project File>Save Scene / File>Save Project Anda.

    Penting

    Jika Anda ingin melewati komponen Unity Siapkan untuk proyek ini (Aplikasi Desktop), dan lanjutkan langsung ke kode, jangan ragu untuk mengunduh .unitypackage ini, impor ke proyek Anda sebagai Paket Kustom, lalu lanjutkan dari Bab 9. Anda masih perlu menambahkan komponen skrip.

Bab 8 - Mengimpor DLL di Unity

Anda akan menggunakan Azure Storage for Unity (yang memanfaatkan .Net SDK untuk Azure). Untuk informasi selengkapnya, ikuti tautan ini tentang Azure Storage for Unity.

Saat ini ada masalah yang diketahui di Unity yang mengharuskan plugin dikonfigurasi ulang setelah impor. Langkah-langkah ini (4 - 7 di bagian ini) tidak akan lagi diperlukan setelah bug diselesaikan.

Untuk mengimpor SDK ke dalam proyek Anda sendiri, pastikan Anda telah mengunduh .unitypackage terbaru dari GitHub. Kemudian, lakukan hal berikut:

  1. Tambahkan .unitypackage ke Unity dengan menggunakan opsi menu Paket Kustom Paket > Impor Aset>.

  2. Dalam kotak Impor Paket Unity yang muncul, Anda dapat memilih semuanya di bawah Penyimpanan Plugin>. Hapus centang yang lain, karena tidak diperlukan untuk kursus ini.

    impor ke paket

  3. Klik tombol Impor untuk menambahkan item ke proyek Anda.

  4. Buka folder Penyimpanan di bawah Plugin dalam tampilan Proyek dan pilih plugin berikut saja:

    • Microsoft.Data.Edm
    • Microsoft.Data.OData
    • Microsoft.WindowsAzure.Storage
    • Newtonsoft.Json
    • System.Spatial

hapus centang Platform apa pun

  1. Dengan plugin khusus ini dipilih, hapus centang Platform Apa pun dan hapus centang WSAPlayer lalu klik Terapkan.

    menerapkan dll platform

    Catatan

    Kami menandai plugin khusus ini untuk hanya digunakan di Editor Unity. Ini karena ada berbagai versi plugin yang sama di folder WSA yang akan digunakan setelah proyek diekspor dari Unity.

  2. Di folder Plugin penyimpanan, pilih saja:

    • Microsoft.Data.Services.Client

      set jangan proses untuk dll

  3. Centang kotak Jangan Proses di bawah Pengaturan Platform dan klik Terapkan.

    terapkan tidak ada pemrosesan

    Catatan

    Kami menandai plugin ini "Jangan proses", karena patcher rakitan Unity mengalami kesulitan memproses plugin ini. Plugin akan tetap berfungsi meskipun tidak diproses.

Bab 9 - Buat kelas TableToScene di proyek Unity Desktop

Anda sekarang perlu membuat skrip yang berisi kode untuk menjalankan aplikasi ini.

Skrip pertama yang perlu Anda buat adalah TableToScene, yang bertanggung jawab untuk:

  • Membaca entitas dalam Tabel Azure.
  • Menggunakan data Tabel, tentukan objek mana yang akan ditelurkan, dan di posisi mana.

Skrip kedua yang perlu Anda buat adalah CloudScene, yang bertanggung jawab untuk:

  • Mendaftarkan peristiwa klik kiri, untuk memungkinkan pengguna menyeret objek di sekitar adegan.
  • Menserialisasikan data objek dari adegan Unity ini, dan mengirimkannya ke Aplikasi Fungsi Azure.

Untuk membuat kelas ini:

  1. Klik kanan di Folder Aset yang terletak di Panel Proyek, Buat>Folder. Beri nama folder Skrip.

    membuat folder skrip

    buat folder skrip 2

  2. Klik dua kali pada folder yang baru saja dibuat, untuk membukanya.

  3. Klik kanan di dalam folder Skrip, klik Buat>Skrip C#. Beri nama skrip TableToScene.

    Cuplikan layar yang memperlihatkan cara membuat skrip 'TableToScene' baru.Ganti nama TableToScene

  4. Klik dua kali pada skrip untuk membukanya di Visual Studio 2017.

  5. Menambahkan namespace berikut:

    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Auth;
    using Microsoft.WindowsAzure.Storage.Table;
    using UnityEngine;
    
  6. Dalam kelas , sisipkan variabel berikut:

        /// <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 -- ";
    

    Catatan

    Ganti nilai accountName dengan nama Layanan Azure Storage dan nilai accountKey Anda dengan nilai kunci yang ditemukan di Azure Storage Service, di Portal Microsoft Azure (Lihat Gambar di bawah).

    ambil kunci akun

  7. Sekarang tambahkan metode Start() dan Awake() untuk menginisialisasi kelas.

        /// <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. Dalam kelas TableToScene, tambahkan metode yang akan mengambil nilai dari Azure Table dan menggunakannya untuk menelurkan primitif yang sesuai dalam adegan.

        /// <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. Di luar kelas TableToScene, Anda perlu menentukan kelas yang digunakan oleh aplikasi untuk membuat serialisasi dan mendeserialisasi Entitas Tabel.

        /// <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. Pastikan Anda Menyimpan sebelum kembali ke Editor Unity.

  11. Klik Kamera Utama dari panel Hierarki, sehingga propertinya muncul di Pemeriksa.

  12. Dengan folder Skrip terbuka, pilih skrip TableToScene dan seret ke Kamera Utama. Hasilnya harus seperti di bawah ini:

    tambahkan skrip ke kamera utama

Bab 10 - Buat kelas CloudScene di Proyek Unity Desktop

Skrip kedua yang perlu Anda buat adalah CloudScene, yang bertanggung jawab untuk:

  • Mendaftarkan peristiwa klik kiri, untuk memungkinkan pengguna menyeret objek di sekitar adegan.

  • Menserialisasikan data objek dari adegan Unity ini, dan mengirimkannya ke Aplikasi Fungsi Azure.

Untuk membuat skrip kedua:

  1. Klik kanan di dalam folder Skrip , klik Buat, Skrip C#. Beri nama skrip CloudScene

    Cuplikan layar yang memperlihatkan cara membuat skrip 'CloudScene' baru.ganti nama CloudScene

  2. Menambahkan namespace berikut:

    using Newtonsoft.Json;
    using System.Collections;
    using System.Text;
    using System.Threading.Tasks;
    using UnityEngine;
    using UnityEngine.Networking;
    
  3. Sisipkan variabel berikut:

        /// <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. Ganti nilai azureFunctionEndpoint dengan URL Aplikasi Fungsi Azure Anda yang ditemukan di Azure Function App Service, di Portal Microsoft Azure, seperti yang ditunjukkan pada gambar di bawah ini:

    dapatkan URL fungsi

  5. Sekarang tambahkan metode Start() dan Awake() untuk menginisialisasi kelas.

        /// <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. Dalam metode Update(), tambahkan kode berikut yang akan mendeteksi input dan seret mouse, yang pada gilirannya akan memindahkan GameObjects di adegan. Jika pengguna telah menyeret dan menjatuhkan objek, itu akan meneruskan nama dan koordinat objek ke metode UpdateCloudScene(), yang akan memanggil layanan Azure Function App, yang akan memperbarui tabel Azure dan memicu pemberitahuan.

        /// <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. Sekarang tambahkan metode UpdateCloudScene(), seperti di bawah ini:

        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. Simpan kode dan kembali ke Unity

  9. Seret skrip CloudScene ke Kamera Utama.

    1. Klik Kamera Utama dari panel Hierarki, sehingga propertinya muncul di Pemeriksa.

    2. Dengan folder Skrip terbuka, pilih skrip CloudScene dan seret ke Kamera Utama. Hasilnya harus seperti di bawah ini:

      seret skrip cloud ke kamera utama

Bab 11 - Bangun Proyek Desktop ke UWP

Semua yang diperlukan untuk bagian Unity dari proyek ini sekarang telah selesai.

  1. Navigasi ke Pengaturan Build (Pengaturan Build File>).

  2. Dari jendela Pengaturan Build, klik Bangun.

    Cuplikan layar yang memperlihatkan jendela Pengaturan Build dengan Platform Windows Universal dipilih dan tombol 'Build' disorot di kanan bawah.

  3. Jendela File Explorer akan muncul, yang meminta Anda untuk membuat lokasi. Buat folder baru (dengan mengklik Folder Baru di sudut kiri atas), dan beri nama BUILDS.

    folder baru untuk build

    1. Buka folder BUILDS baru, dan buat folder lain (menggunakan Folder Baru sekali lagi), dan beri nama NH_Desktop_App.

      nama folder NH_Desktop_App

    2. Dengan NH_Desktop_App dipilih. klik Pilih Folder. Proyek akan memakan waktu satu menit atau lebih untuk membangun.

  4. Setelah build, File Explorer akan muncul yang menunjukkan lokasi proyek baru Anda. Namun, tidak perlu membukanya karena Anda perlu membuat proyek Unity lainnya terlebih dahulu, dalam beberapa Bab berikutnya.

Bab 12 - Menyiapkan Proyek Unity Mixed Reality

Berikut ini adalah pengaturan khas untuk mengembangkan dengan realitas campuran, dan dengan demikian, adalah templat yang baik untuk proyek lain.

  1. Buka Unity dan klik Baru.

    Cuplikan layar yang memperlihatkan jendela Proyek Unity dengan 'Baru' disorot di kanan atas.

  2. Anda sekarang perlu memberikan nama Proyek Unity, menyisipkan UnityMRNotifHub. Pastikan jenis proyek diatur ke 3D. Atur Lokasi ke tempat yang sesuai untuk Anda (ingat, lebih dekat ke direktori akar lebih baik). Lalu, klik Buat proyek.

    nama UnityMRNotifHub

  3. Dengan Unity terbuka, ada baiknya memeriksa Editor Skrip default diatur ke Visual Studio. Buka Edit>Preferensi lalu dari jendela baru, navigasikan ke Alat Eksternal. Ubah Editor Skrip Eksternal ke Visual Studio 2017. Tutup jendela Preferensi .

    atur editor eksternal ke VS

  4. Selanjutnya, buka Pengaturan Build File>dan alihkan platform ke Platform Windows Universal, dengan mengklik tombol Beralih Platform.

    beralih platform ke UWP

  5. Buka Pengaturan Build File>dan pastikan bahwa:

    1. Perangkat Target diatur ke Perangkat Apa Pun

      Untuk Microsoft HoloLens, atur Perangkat Target ke HoloLens.

    2. Jenis Build diatur ke D3D

    3. SDK diatur ke Terbaru diinstal

    4. Versi Visual Studio diatur ke Terbaru diinstal

    5. Build and Run diatur ke Komputer Lokal

    6. Sementara di sini, ada baiknya menyimpan adegan, dan menambahkannya ke build.

      1. Lakukan ini dengan memilih Tambahkan Adegan Terbuka. Jendela penyimpanan akan muncul.

        Cuplikan layar yang memperlihatkan jendela Pengaturan Build dengan tombol 'Tambahkan Adegan Terbuka' disorot di kanan atas.

      2. Buat folder baru untuk ini, dan adegan di masa mendatang, lalu pilih tombol Folder baru, untuk membuat folder baru, beri nama Adegan.

        Cuplikan layar yang memperlihatkan 'Folder baru' disorot di kiri atas di jendela Simpan Adegan.

      3. Buka folder Adegan yang baru dibuat, lalu di bidang Nama file: teks, ketik NH_MR_Scene, lalu tekan Simpan.

        adegan baru - NH_MR_Scene

    7. Pengaturan yang tersisa, di Pengaturan Build, harus dibiarkan sebagai default untuk saat ini.

  6. Di jendela yang sama klik tombol Pengaturan Pemutar, ini akan membuka panel terkait di ruang tempat Pemeriksa berada.

    buka pengaturan pemutar

  7. Di panel ini, beberapa pengaturan perlu diverifikasi:

    1. Di tab Pengaturan Lainnya:

      1. Versi Runtime Pembuatan Skrip harus Eksperimental (Setara.NET 4.6)

      2. Scripting Backend harus .NET

      3. Tingkat Kompatibilitas API harus .NET 4.6

        kompatibilitas api

    2. Selanjutnya di bawah panel, di Pengaturan XR (ditemukan di bawah Pengaturan Penerbitan), centang Realitas Virtual yang Didukung, pastikan Windows Mixed Reality SDK ditambahkan

      memperbarui pengaturan xr

    3. Dalam tab Pengaturan Penerbitan, di bawah Kemampuan, periksa:

      • InternetClient

        Cuplikan layar yang memperlihatkan tab Pengaturan Penerbitan dengan InternetClient dicentang.

  8. Kembali ke Pengaturan Build, Proyek Unity C# tidak lagi berwarna abu-abu: centang kotak di samping ini.

  9. Setelah perubahan ini selesai, tutup jendela Pengaturan Build.

  10. Simpan Scene dan Project File>Save Scene / File>Save Project Anda.

    Penting

    Jika Anda ingin melewati komponen Unity Siapkan untuk proyek ini (Aplikasi realitas campuran), dan lanjutkan langsung ke dalam kode, jangan ragu untuk mengunduh .unitypackage ini, mengimpornya ke proyek Anda sebagai Paket Kustom, dan kemudian melanjutkan dari Bab 14. Anda masih perlu menambahkan komponen skrip.

Bab 13 - Mengimpor DLL dalam Proyek Mixed Reality Unity

Anda akan menggunakan Pustaka Azure Storage for Unity (yang menggunakan .Net SDK untuk Azure). Silakan ikuti tautan ini tentang cara menggunakan Azure Storage dengan Unity. Saat ini ada masalah yang diketahui di Unity yang mengharuskan plugin dikonfigurasi ulang setelah impor. Langkah-langkah ini (4 - 7 di bagian ini) tidak akan lagi diperlukan setelah bug diselesaikan.

Untuk mengimpor SDK ke dalam proyek Anda sendiri, pastikan Anda telah mengunduh .unitypackage terbaru. Kemudian, lakukan hal berikut:

  1. Tambahkan .unitypackage yang Anda unduh dari atas, ke Unity dengan menggunakan opsi menu Paket Kustom Paket>Impor Aset.>

  2. Dalam kotak Impor Paket Unity yang muncul, Anda dapat memilih semuanya di bawah Penyimpanan Plugin>.

    impor paket

  3. Klik tombol Impor untuk menambahkan item ke proyek Anda.

  4. Buka folder Penyimpanan di bawah Plugin dalam tampilan Proyek dan pilih plugin berikut saja:

    • Microsoft.Data.Edm
    • Microsoft.Data.OData
    • Microsoft.WindowsAzure.Storage
    • Newtonsoft.Json
    • System.Spatial

    pilih plugin

  5. Dengan plugin khusus ini dipilih, hapus centang Platform Apa pun dan hapus centang WSAPlayer lalu klik Terapkan.

    menerapkan perubahan platform

    Catatan

    Anda menandai plugin khusus ini untuk hanya digunakan di Editor Unity. Ini karena ada berbagai versi plugin yang sama di folder WSA yang akan digunakan setelah proyek diekspor dari Unity.

  6. Di folder Plugin penyimpanan, pilih saja:

    • Microsoft.Data.Services.Client

      pilih klien layanan data

  7. Centang kotak Jangan Proses di bawah Pengaturan Platform dan klik Terapkan.

    jangan memproses

    Catatan

    Anda menandai plugin ini "Jangan proses" karena patcher rakitan Unity mengalami kesulitan memproses plugin ini. Plugin masih akan berfungsi meskipun tidak diproses.

Bab 14 - Membuat kelas TableToScene dalam proyek Unity realitas campuran

Kelas TableToScene identik dengan yang dijelaskan dalam Bab 9. Buat kelas yang sama dalam Proyek Unity realitas campuran mengikuti prosedur yang sama yang dijelaskan dalam Bab 9.

Setelah Anda menyelesaikan Bab ini, kedua Proyek Unity Anda akan menyiapkan kelas ini di Kamera Utama.

Bab 15 - Membuat kelas NotificationReceiver di Proyek Mixed Reality Unity

Skrip kedua yang perlu Anda buat adalah NotificationReceiver, yang bertanggung jawab untuk:

  • Mendaftarkan aplikasi dengan Notification Hub saat inisialisasi.
  • Mendengarkan pemberitahuan yang berasal dari Notification Hub.
  • Mendeserialisasi data objek dari pemberitahuan yang diterima.
  • Pindahkan GameObjects di adegan, berdasarkan data yang dideserialisasi.

Untuk membuat skrip NotificationReceiver :

  1. Klik kanan di dalam folder Skrip , klik Buat, Skrip C#. Beri nama skrip NotificationReceiver.

    buat skrip c# baruberi nama NotificationReceiver

  2. Klik dua kali pada skrip untuk membukanya.

  3. Menambahkan namespace berikut:

    //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. Sisipkan variabel berikut:

        /// <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. Ganti nilai hubName dengan nama Notification Hub Service Anda, dan nilai hubListenEndpoint dengan nilai titik akhir yang ditemukan di tab Kebijakan Akses, Azure Notification Hub Service, di Portal Microsoft Azure (lihat gambar di bawah).

    sisipkan titik akhir kebijakan hub pemberitahuan

  6. Sekarang tambahkan metode Start() dan Awake() untuk menginisialisasi kelas.

        /// <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. Tambahkan metode WaitForNotification untuk memungkinkan aplikasi menerima pemberitahuan dari Pustaka Notification Hub tanpa berbenturan dengan Utas Utama:

        /// <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. Metode berikut, InitNotificationAsync(), akan mendaftarkan aplikasi dengan notification Hub Service saat inisialisasi. Kode dikomentari karena Unity tidak akan dapat Membangun proyek. Anda akan menghapus komentar saat mengimpor paket Azure Messaging Nuget di Visual Studio.

        /// <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. Handler berikut, Channel_PushNotificationReceived(), akan dipicu setiap kali pemberitahuan diterima. Ini akan mendeserialisasi pemberitahuan, yang akan menjadi Entitas Tabel Azure yang telah dipindahkan pada Aplikasi Desktop, dan kemudian memindahkan GameObject yang sesuai di adegan MR ke posisi yang sama.

    Penting

    Kode dikomentari karena kode mereferensikan pustaka Azure Messaging, yang akan Anda tambahkan setelah membangun proyek Unity menggunakan Nuget Package Manager, dalam Visual Studio. Dengan demikian, proyek Unity tidak akan dapat membangun, kecuali jika dikomentari. Ketahuilah, bahwa jika Anda membangun proyek Anda, dan kemudian ingin kembali ke Unity, Anda harus mengomentari ulang kode itu.

        ///// <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. Ingatlah untuk menyimpan perubahan Anda sebelum kembali ke Editor Unity.

  11. Klik Kamera Utama dari panel Hierarki, sehingga propertinya muncul di Pemeriksa.

  12. Dengan folder Skrip terbuka, pilih skrip NotificationReceiver dan seret ke Kamera Utama. Hasilnya harus seperti di bawah ini:

    seret skrip penerima pemberitahuan ke kamera

    Catatan

    Jika Anda mengembangkan ini untuk Microsoft HoloLens, Anda harus memperbarui komponen Kamera Kamera Utama, sehingga:

    • Bendera Bersih: Warna Solid
    • Latar Belakang: Hitam

Bab 16 - Bangun Proyek Mixed Reality ke UWP

Bab ini identik dengan proses build untuk proyek sebelumnya. Semua yang diperlukan untuk bagian Unity dari proyek ini sekarang telah selesai, jadi sekarang saatnya untuk membangunnya dari Unity.

  1. Navigasi ke Pengaturan Build (Pengaturan Build File>).

  2. Dari menu Pengaturan Build, pastikan Unity C# Projects* dicentang (yang akan memungkinkan Anda mengedit skrip dalam proyek ini, setelah build).

  3. Setelah ini selesai, klik Bangun.

    Cuplikan layar yang memperlihatkan jendela Pengaturan Build dengan tombol 'Build' disorot di kanan bawah.

  4. Jendela File Explorer akan muncul, yang meminta Anda untuk membuat lokasi. Buat folder baru (dengan mengklik Folder Baru di sudut kiri atas), dan beri nama BUILDS.

    membuat folder build

    1. Buka folder BUILDS baru, dan buat folder lain (menggunakan Folder Baru sekali lagi), dan beri nama NH_MR_App.

      membuat folder NH_MR_Apps

    2. Dengan NH_MR_App dipilih. klik Pilih Folder. Proyek akan memakan waktu satu menit atau lebih untuk membangun.

  5. Setelah build, jendela File Explorer akan terbuka di lokasi proyek baru Anda.

Bab 17 - Tambahkan paket NuGet ke Solusi UnityMRNotifHub

Peringatan

Harap diingat bahwa, setelah Anda menambahkan Paket NuGet berikut (dan membatalkan komentar kode di Bab berikutnya), Kode, ketika dibuka kembali dalam Proyek Unity, akan menampilkan kesalahan. Jika Anda ingin kembali dan melanjutkan pengeditan di Unity Editor, Anda akan memerlukan komentar kode yang salah, dan kemudian membatalkan komentar lagi nanti, setelah Anda kembali di Visual Studio.

Setelah build realitas campuran selesai, navigasikan ke proyek realitas campuran, yang Anda buat, dan klik dua kali pada file solusi (.sln) dalam folder tersebut, untuk membuka solusi Anda dengan Visual Studio 2017. Anda sekarang perlu menambahkan paket NuGet WindowsAzure.Messaging.managed ; ini adalah pustaka yang digunakan untuk menerima Pemberitahuan dari Notification Hub.

Untuk mengimpor paket NuGet:

  1. Di Penjelajah Solusi, klik kanan pada Solusi Anda

  2. Klik Kelola Paket NuGet.

    buka manajer nuget

  3. Pilih tab Telusuri dan cari WindowsAzure.Messaging.managed.

    temukan paket olahpesan windows azure

  4. Pilih hasilnya (seperti yang ditunjukkan di bawah), dan di jendela di sebelah kanan, pilih kotak centang di samping Proyek. Ini akan menempatkan centang di kotak centang di samping Project, bersama dengan kotak centang di samping proyek Assembly-CSharp dan UnityMRNotifHub .

    centang semua proyek

  5. Versi yang awalnya disediakan mungkin tidak kompatibel dengan proyek ini. Oleh karena itu, klik menu dropdown di samping Versi, dan klik Versi 0.1.7.9, lalu klik Instal.

  6. Anda sekarang telah selesai menginstal paket NuGet. Temukan kode berkomentar yang Anda masukkan di kelas NotificationReceiver dan hapus komentar..

Bab 18 - Edit aplikasi UnityMRNotifHub, kelas NotificationReceiver

Setelah menambahkan Paket NuGet, Anda harus membatalkan komentar beberapa kode dalam kelas NotificationReceiver.

Drive ini termasuk:

  1. Namespace layanan di bagian atas:

    using Microsoft.WindowsAzure.Messaging;
    
  2. Semua kode dalam metode InitNotificationsAsync():

        /// <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;
            }
        }
    

Peringatan

Kode di atas memiliki komentar di dalamnya: pastikan Anda tidak secara tidak sengaja membatalkan komentar tersebut (karena kode tidak akan dikompilasi jika Anda memilikinya!).

  1. Dan, terakhir, peristiwa Channel_PushNotificationReceived :

        /// <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;
            }
        }
    

Dengan tidak berkomentar ini, pastikan Anda menyimpan, lalu lanjutkan ke Bab berikutnya.

Bab 19 - Kaitkan proyek realitas campuran ke aplikasi Store

Anda sekarang perlu mengaitkan proyek realitas campuran ke Aplikasi Store yang Anda buat di awal lab.

  1. Buka solusi.

  2. Klik kanan pada Proyek aplikasi UWP di panel Penjelajah Solusi, buka Simpan, dan Kaitkan Aplikasi dengan Toko....

    asosiasi toko terbuka

  3. Jendela baru akan muncul yang disebut Kaitkan Aplikasi Anda dengan Bursa Windows. Klik Berikutnya.

    masuk ke layar berikutnya

  4. Ini akan memuat semua Aplikasi yang terkait dengan Akun yang telah Anda masuki. Jika Anda tidak masuk ke akun, Anda bisa Masuk di halaman ini.

  5. Temukan Nama Aplikasi Toko yang Anda buat di awal tutorial ini dan pilih. Lalu, klik Berikutnya.

    temukan dan pilih nama toko Anda

  6. Klik Kaitkan.

    mengaitkan aplikasi

  7. Aplikasi Anda sekarang Dikaitkan dengan Aplikasi Toko. Ini diperlukan untuk mengaktifkan Pemberitahuan.

Bab 20 - Menyebarkan aplikasi UnityMRNotifHub dan UnityDesktopNotifHub

Bab ini mungkin lebih mudah dengan dua orang, karena hasilnya akan mencakup kedua aplikasi yang berjalan, satu berjalan di Desktop komputer Anda, dan yang lainnya dalam headset imersif Anda.

Aplikasi headset imersif menunggu untuk menerima perubahan pada adegan (perubahan posisi GameObjects lokal), dan aplikasi Desktop akan membuat perubahan pada adegan lokal mereka (perubahan posisi), yang akan dibagikan ke aplikasi MR. Masuk akal untuk menyebarkan aplikasi MR terlebih dahulu, diikuti oleh aplikasi Desktop, sehingga penerima dapat mulai mendengarkan.

Untuk menyebarkan aplikasi UnityMRNotifHub di Komputer Lokal Anda:

  1. Buka file solusi aplikasi UnityMRNotifHub Anda di Visual Studio 2017.

  2. Di Platform Solusi, pilih x86, Komputer Lokal.

  3. Di Konfigurasi Solusi pilih Debug.

    Cuplikan layar yang memperlihatkan Konfigurasi Solusi diatur ke 'Debug' di toolbar.

  4. Buka menu Build dan klik Sebarkan Solusi untuk memuat samping aplikasi ke komputer Anda.

  5. Aplikasi Anda sekarang akan muncul dalam daftar aplikasi yang diinstal, siap untuk diluncurkan.

Untuk menyebarkan aplikasi UnityDesktopNotifHub di Komputer Lokal:

  1. Buka file solusi aplikasi UnityDesktopNotifHub Anda di Visual Studio 2017.

  2. Di Platform Solusi, pilih x86, Komputer Lokal.

  3. Di Konfigurasi Solusi pilih Debug.

    Cuplikan layar yang memperlihatkan Konfigurasi Solusi diatur ke 'Debug'.

  4. Buka menu Build dan klik Sebarkan Solusi untuk memuat samping aplikasi ke komputer Anda.

  5. Aplikasi Anda sekarang akan muncul dalam daftar aplikasi yang diinstal, siap untuk diluncurkan.

  6. Luncurkan aplikasi realitas campuran, diikuti oleh aplikasi Desktop.

Dengan kedua aplikasi berjalan, pindahkan objek di adegan desktop (menggunakan Tombol Mouse Kiri). Perubahan posisi ini akan dilakukan secara lokal, diserialisasikan, dan dikirim ke layanan Aplikasi Fungsi. Layanan Aplikasi Fungsi kemudian akan memperbarui Tabel bersama dengan Notification Hub. Setelah menerima pembaruan, Notification Hub akan mengirim data yang diperbarui langsung ke semua aplikasi terdaftar (dalam hal ini aplikasi headset imersif), yang kemudian akan mendeserialisasi data masuk, dan menerapkan data posisi baru ke objek lokal, memindahkannya dalam adegan.

Aplikasi Azure Notification Hubs Anda yang sudah selesai

Selamat, Anda membuat aplikasi realitas campuran yang memanfaatkan Azure Notification Hubs Service dan mengizinkan komunikasi antar aplikasi.

produk akhir -end

Latihan bonus

Latihan 1

Dapatkah Anda mencari tahu cara mengubah warna GameObjects dan mengirim pemberitahuan tersebut ke aplikasi lain yang melihat adegan?

Latihan 2

Dapatkah Anda menambahkan pergerakan GameObjects ke aplikasi MR Anda dan melihat adegan yang diperbarui di aplikasi desktop Anda?