HoloLens (1. gen) ve Azure 312: Bot tümleştirmesi

Not

karışık gerçeklik akademik öğreticiler, HoloLens (1. gen) ve karma gerçeklik derinlikli kulaklıkları göz önünde bulundurularak tasarlandı. Bu nedenle, hala bu cihazlarda geliştirme konusunda rehberlik arayan geliştiriciler için Bu öğreticilerin yerinde ayrılmanız önemlidir. bu öğreticiler, HoloLens 2 ' de kullanılan en son araç kümeleri veya etkileşimler ile güncelleştirilmeyecek. Desteklenen cihazlarda çalışmaya devam etmek için tutulacağız. gelecekte HoloLens 2 için geliştirmeyi gösteren yeni bir öğretici serisi olacaktır. Bu bildirim, ne zaman nakledildiklerinde Bu öğreticilerin bir bağlantısıyla güncelleştirilir.

bu kursta, Microsoft Bot Framework V4 kullanarak bir bot oluşturup dağıtmayı ve Windows Mixed Reality bir uygulama aracılığıyla onunla iletişim kurmayı öğreneceksiniz.

Microsoft Bot Framework V4 , geliştiricilere genişletilebilir ve ölçeklenebilir bir Bot uygulaması oluşturmak için araçlar sağlamak üzere tasarlanan bir apı kümesidir. daha fazla bilgi için Microsoft Bot Framework sayfasını veya V4 Git deposunuziyaret edin.

bu kursu tamamladıktan sonra, aşağıdakileri yapabilecekler Windows Mixed Reality bir uygulama oluşturacaksınız:

  1. Kullanıcıların sesini dinlemek için bir dokunma hareketi kullanın.
  2. Kullanıcı bir şeyi söyledi, bot bir yanıt sağlamaya çalışacaktır.
  3. Olan botları, bir metin olarak, Unity sahnede bulunan bot 'ın yakınında görüntüler.

Uygulamanızda, sonuçları tasarımınızla nasıl tümleştirileceğini öğrenmek sizin için önemlidir. Bu kurs, Unity projenizle bir Azure hizmetini nasıl tümleştirileceğini öğretirecek şekilde tasarlanmıştır. Bu kursta, karma gerçeklik uygulamanızı geliştirmek üzere elde ettiğiniz bilgileri kullanmak sizin işimdir.

Cihaz desteği

Kurs HoloLens Modern kulaklıklar
MR ve Azure 312: bot tümleştirmesi ✔️ ✔️

Not

bu kurs öncelikle HoloLens odaklanırken, bu kursta öğrendiklerinizi, modern (VR) kulaklıklar Windows Mixed Reality için de uygulayabilirsiniz. Modern (VR) kulaklıklar, erişilebilir kameralara sahip olmadığından, bilgisayarınıza bağlı bir dış kameranın olması gerekir. Kursla birlikte takip ettiğiniz gibi, modern (VR) kulaklıkları desteklemek için kullanmanız gerekebilecek değişiklikler hakkında notlar görürsünüz.

Önkoşullar

Not

Bu öğretici, Unity ve C# ile temel deneyimi olan geliştiriciler için tasarlanmıştır. Ayrıca, bu belge içindeki önkoşulların ve yazılı yönergelerin yazma sırasında nelerin sınanmış ve doğrulandığını temsil ettiğini lütfen unutmayın (Temmuz 2018). Araçları yüklemek için en son yazılımı kullanabilirsiniz, ancak bu kursla ilgili bilgilerin aşağıda listelenenlerden daha yeni yazılımda bulacağınız şekilde tam olarak eşleştiğini varsaymamalıdır.

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

Başlamadan önce

  1. Bu projeyi oluşturma sorunlarından kaçınmak için, bu öğreticide bahsedilen projeyi bir kök veya yakın kök klasörde oluşturmanız önemle önerilir (uzun klasör yolları derleme sırasında sorunlara neden olabilir).
  2. HoloLens ayarlayın ve test edin. HoloLens ayarlamayı desteklemek istiyorsanız, HoloLens kurulum makalesini ziyaret ettiğinizden emin olun.
  3. yeni bir HoloLens uygulaması geliştirmeye başlarken ayarlama ve algılayıcı ayarlamayı gerçekleştirmek iyi bir fikirdir (bazen bu görevleri her kullanıcı için gerçekleştirmeye yardımcı olabilir).

ayarlama hakkında yardım için lütfen bu bağlantıyı HoloLens ayarlama makalesineuygulayın.

algılayıcı ayarlaması hakkında yardım için lütfen bu bağlantıyı HoloLens algılayıcı ayarlama makalesineuygulayın.

Bölüm 1 – bot uygulaması oluşturma

İlk adım, bir yerel ASP.Net Core Web uygulaması olarak botunuzu oluşturmaktır. İşiniz bittiğinde ve test edildikten sonra Azure portalında yayımlarsınız.

  1. Visual Studio'yu açın. Yeni bir proje oluşturun, proje türü olarak ASP NET Core Web uygulaması ' nı seçin (.NET Core alt bölümünde bulacaksınız) ve mybot' ı çağırın. Tamam'a tıklayın.

  2. Görüntülenecek pencerede boş' ı seçin. Ayrıca, hedefin ASP NET Core 2,0 olarak ayarlandığından ve kimlik doğrulamasının kimlik doğrulaması yokolarak ayarlandığından emin olun. Tamam'a tıklayın.

    Bot uygulaması oluşturma

  3. Çözüm şimdi açılır. Çözüm Gezgini çözüm mybot ' a sağ tıklayın ve çözüm için NuGet paketlerini yönet' e tıklayın.

    Bot uygulaması oluşturma

  4. Araştır sekmesinde Microsoft. bot. Builder. Integration. Aspnet. Core için arama yapın ( yayın öncesi sürüm denetimli olduğundan emin olun). Paket sürümü 4.0.1-Preview' i seçin ve proje kutularını işaretleyin. Ardından Install'a tıklayın. Artık, bot Framework v4için gereken kitaplıkları yüklediniz. NuGet sayfasını kapatın.

    Bot uygulaması oluşturma

  5. Project, mybot' a sağ tıklayıp, Çözüm Gezgini sınıf ekle' ye tıklayın .

    Bot uygulaması oluşturma

  6. Sınıfı mybot olarak adlandırın ve Ekle' ye tıklayın.

    Bot uygulaması oluşturma

  7. Konuşmaadı adlı başka bir sınıf oluşturmak için önceki noktayı tekrarlayın.

  8. Çözüm GezginiWwwroot ' a sağ tıklayın ve Yeni öğeEkle ' ye tıklayın. HTML sayfasını seçin (onu Web bölümü altında bulacaksınız). Dosyayı default.htmlolarak adlandırın. Ekle'ye tıklayın.

    Bot uygulaması oluşturma

  9. Çözüm Gezgini sınıfların/nesnelerin listesi aşağıdaki görüntü gibi görünmelidir.

    Bot uygulaması oluşturma

  10. Konuşma bağlamı sınıfına çift tıklayın. Bu sınıf, konuşmanın bağlamını sürdürmek için bot tarafından kullanılan değişkenlerin tutulmasından sorumludur. Bu görüşme bağlamı değerleri, bir etkinlik her alındığında mybot sınıfının herhangi bir örneği yenileneceği için bu sınıfın bir örneğinde tutulur. Sınıfına aşağıdaki kodu ekleyin:

    namespace MyBot
    {
        public static class ConversationContext
        {
            internal static string userName;
    
            internal static string userMsg;
        }
    }
    
  11. Mybot sınıfına çift tıklayın. Bu sınıf, müşteriden gelen herhangi bir etkinlik tarafından çağrılan işleyicileri barındırır. Bu sınıfta, bot ve Customer arasında konuşmayı oluşturmak için kullanılan kodu eklersiniz. Daha önce belirtildiği gibi, bu sınıfın bir örneği bir etkinlik her alındığında başlatılır. Aşağıdaki kodu bu sınıfa ekleyin:

    using Microsoft.Bot;
    using Microsoft.Bot.Builder;
    using Microsoft.Bot.Schema;
    using System.Threading.Tasks;
    
    namespace MyBot
    {
        public class MyBot : IBot
        {       
            public async Task OnTurn(ITurnContext context)
            {
                ConversationContext.userMsg = context.Activity.Text;
    
                if (context.Activity.Type is ActivityTypes.Message)
                {
                    if (string.IsNullOrEmpty(ConversationContext.userName))
                    {
                        ConversationContext.userName = ConversationContext.userMsg;
                        await context.SendActivity($"Hello {ConversationContext.userName}. Looks like today it is going to rain. \nLuckily I have umbrellas and waterproof jackets to sell!");
                    }
                    else
                    {
                        if (ConversationContext.userMsg.Contains("how much"))
                        {
                            if (ConversationContext.userMsg.Contains("umbrella")) await context.SendActivity($"Umbrellas are $13.");
                            else if (ConversationContext.userMsg.Contains("jacket")) await context.SendActivity($"Waterproof jackets are $30.");
                            else await context.SendActivity($"Umbrellas are $13. \nWaterproof jackets are $30.");
                        }
                        else if (ConversationContext.userMsg.Contains("color") || ConversationContext.userMsg.Contains("colour"))
                        {
                            await context.SendActivity($"Umbrellas are black. \nWaterproof jackets are yellow.");
                        }
                        else
                        {
                            await context.SendActivity($"Sorry {ConversationContext.userName}. I did not understand the question");
                        }
                    }
                }
                else
                {
    
                    ConversationContext.userMsg = string.Empty;
                    ConversationContext.userName = string.Empty;
                    await context.SendActivity($"Welcome! \nI am the Weather Shop Bot \nWhat is your name?");
                }
    
            }
        }
    }
    
  12. Başlangıç sınıfına çift tıklayın. Bu sınıf, bot 'ı başlatacak. Sınıfına aşağıdaki kodu ekleyin:

    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Bot.Builder.BotFramework;
    using Microsoft.Bot.Builder.Integration.AspNet.Core;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    
    namespace MyBot
    {
    public class Startup
        {
            public IConfiguration Configuration { get; }
    
            public Startup(IHostingEnvironment env)
            {
                var builder = new ConfigurationBuilder()
                    .SetBasePath(env.ContentRootPath)
                    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                    .AddEnvironmentVariables();
                Configuration = builder.Build();
            }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddSingleton(_ => Configuration);
                services.AddBot<MyBot>(options =>
                {
                    options.CredentialProvider = new ConfigurationCredentialProvider(Configuration);
                });
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                app.UseDefaultFiles();
                app.UseStaticFiles();
                app.UseBotFramework();
            }
        }
    }
    
  13. Program sınıfı dosyasını açın ve içindeki kodu aşağıdaki gibi doğrulayın:

    using Microsoft.AspNetCore;
    using Microsoft.AspNetCore.Hosting;
    
    namespace MyBot
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                BuildWebHost(args).Run();
            }
    
            public static IWebHost BuildWebHost(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>()
                    .Build();
        }
    }
    
  14. değişikliklerinizi kaydetmeyi unutmayın, bunu yapmak için Visual Studio en üstündeki araç çubuğundan dosyakaydet' e gidin.

Bölüm 2-Azure bot hizmetini oluşturma

Artık botunuzun kodunu oluşturduğunuza göre, Azure portalında Web App bot hizmetinin bir örneğine yayımlamanız gerekir. Bu bölümde, Azure'da Bot Hizmeti'nin nasıl oluşturularak yapılandırılma ve ardından kodunuzun bu hizmette nasıl yayımlanları gösterebilirsiniz.

  1. İlk olarak Azure Portal'da ( ) oturum https://portal.azure.com açın.

    1. Henüz bir Azure hesabınız yoksa bir tane oluşturmanız gerekir. Bu öğreticiyi bir sınıf veya laboratuvar ortamında takip ediyorsanız, eğitmenden veya eğitmenden birinin yeni hesabı ayarlarken yardım istemesini sorun.
  2. Oturum açtıktan sonra sol üst köşedeki Kaynak oluştur'a tıklayın ve Web App botunuarayın ve Enter'a tıklayın.

    Azure Bot Hizmeti

  3. Yeni sayfa, Web App Bot Hizmeti'nin açıklamasını sağlar. Bu sayfanın sol alt kısmında Oluştur düğmesini seçerek bu Hizmetle bir ilişki oluşturun.

    Azure Bot Hizmeti

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

    1. Bu Hizmet örneği için istediğiniz Adı girin.

    2. Bir Abonelik seçin.

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

      Azure Kaynak Grupları hakkında daha fazla bilgi için lütfen bu bağlantıyı izleyin

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

    5. Web App BotHizmeti'nin ilk kez oluşturulması için uygun Fiyatlandırma Katmanını seçin. Ücretsiz katmanı (F0 adlı) kullanabilirsiniz

    6. Uygulama adı, Bot adıyla aynı şekilde bırakabilirsiniz.

    7. Bot şablonunu Temel (C#) olarak bırakın.

    8. App Service planı/Konum, hesabınız için otomatik olarak doldurulmuş olması gerekir.

    9. Bot'Depolama barındırmak için kullanmak istediğiniz Azure aboneliğini ayarlayın. Henüz yoksa, burada oluşturabilirsiniz.

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

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

      Azure Bot Hizmeti

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

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

    Azure Bot Hizmeti

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

    Azure Bot Hizmeti

  8. Yeni Hizmet örneğinizi keşfetmek için bildirimde Kaynağa git düğmesine tıklayın. Yeni Azure Hizmeti örneğine götürüleceksiniz.

    Azure Bot Hizmeti

  9. Bu noktada istemci uygulamanıza bu Bot Hizmeti ile iletişim Direct Line için Direct Line adlı bir özellik kurmanız gerekir. Kanallar'atıklayın, ardından Öne çıkan kanal ekle bölümünde Kanal yapılandırma'ya Direct Line tıklayın.

    Azure Bot Hizmeti

  10. Bu sayfada istemci uygulamanıza botla kimlik doğrulaması yapma izin verecek Gizli anahtarları bulabilirsiniz. Göster düğmesine tıklayın ve görüntülenen Anahtarlar'ın bir kopyasını kopyalayın çünkü buna daha sonra projeniz içinde ihtiyacınız olacak.

    Azure Bot Hizmeti

Bölüm 3 – Botu Azure Web App Bot Hizmeti'ne yayımlama

Hizmetiniz hazır olduğunu göre, daha önce oluşturduğunuz Bot kodunuzu yeni oluşturduğunuz Web App Bot Hizmeti'ne yayımlamanız gerekir.

Not

Bot çözümünde/kodunda her değişiklik yaptığınız zaman Bot'unu Azure Hizmeti'ne yayımlamanız gerekir.

  1. Geri dön oluşturduğunuz Visual Studio Çözüme geri tnin.

  2. MyBot projenize sağ tıklayın ve Çözüm Gezgini'atıklayın.

    Botu Azure Web App Bot Hizmeti'ne yayımlama

  3. Yayımlama hedefi seçin sayfasında,App Service'ave ardından Var Olanı Seç'e tıklayın,son olarak Profil Oluştur'a tıklayın (bu görünür durumda değilse Yayımla düğmesinin yanı sıra açılan oka tıklamanız gerekir).

    Botu Azure Web App Bot Hizmeti'ne yayımlama

  4. Henüz Microsoft Hesabınızla oturum açmadıysanız burada oturum açabilirsiniz.

  5. Yayımla sayfasında, Web App Bot Hizmeti oluşturma işlemi için kullanılan aboneliğin aynısını ayarlamanız gerekir. Ardından Kaynak Grubu olarak Görüntüle'yi ayarlayın ve açılan klasör yapısında daha önce oluşturduğunuz Kaynak Grubunu seçin. Tamam'a tıklayın.

    Botu Azure Web App Bot Hizmeti'ne yayımlama

  6. Şimdi Yayımla düğmesine tıklayın ve Botun yayımlanacak şekilde bekleyin (birkaç dakika sürebilir).

    Botu Azure Web App Bot Hizmeti'ne yayımlama

Bölüm 4 – Unity projesini ayarlama

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

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

    Unity projesini ayarlama

  2. Şimdi bir Unity proje adı sağlamanız gerekir. Bot HoloLens ekleme. Proje şablonunun 3Dolarak ayarlanmış olduğundan emin olun. Konum'a sizin için uygun bir yere ayarlayın (kök dizinlere daha yakın bir yerde olmak daha iyidir). Ardından Proje oluştur'a tıklayın.

    Unity projesini ayarlama

  3. Unity açıkken, varsayılan Betik Düzenleyicisi'nin Visual Studio. Tercihleri Düzenle'ye gidin ve yeni pencerede Dış Araçlar'a gidin. Dış Betik Düzenleyicisi'niVisual Studio 2017 olarak değiştirme. Tercihler penceresini kapatın.

    Unity projesini ayarlama

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

    Unity projesini ayarlama

  5. Dosya Derlemesi'Ayarlar ve şunların doğru olduğundan emin olun:

    1. Hedef Cihaz HoloLens

      Çevreleyici başlığı için Hedef Cihazı Herhangi Bir Cihazolarak ayarlayın.

    2. Derleme TürüD3D olarak ayarlanmış

    3. SDK En son yüklü olarak ayarlanır

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

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

    6. Sahneyi kaydedin ve derlemeye ekleyin.

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

        Unity projesini ayarlama

      2. Bunun için yeni bir klasör oluşturun ve herhangi bir gelecek, sahne ve sonra Yeni klasör düğmesini seçerek yeni bir klasör oluşturun ve Bu klasörü Sahneler olarak adlayabilirsiniz.

        Unity projesini ayarlama

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

        Unity projesini ayarlama

    7. Derleme ve Derleme Ayarlarkalan ayarlar şimdilik varsayılan olarak bırak bırak gerekir.

  6. Derleme AyarlarPlayer Ayarlar düğmesine tıklayın. Bu, Denetçinin bulunduğu alanda ilgili paneli açar.

    Unity projesini ayarlama

  7. Bu panelde birkaç ayarın doğrulanmış olması gerekir:

    1. Diğer Ayarlar:

      1. Betik Çalışma Zamanı Sürümü Deneysel olmalıdır (NET 4.6 Eşdeğeri); bunu değiştirmek için Düzenleyici'nin yeniden başlatılması gerekir.

      2. Betik Arka Ucu.NET olmalı

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

        Unity projesini ayarlama

    2. Yayımlama sekmesi Ayarlar altında şunlarıkontrol edin:

      • InternetClient

      • Mikrofon

        Unity projesini ayarlama

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

      Unity projesini ayarlama

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

  9. derleme Ayarlar penceresini kapatın.

  10. Sahnesinizi ve projenizi kaydedin (Dosya sahneyi Kaydet/dosya > projeyi kaydet).

Bölüm 5 – kamera kurulumu

Önemli

Bu kursun Unity kümesi bileşenini atlamak ve doğrudan koda devam etmek istiyorsanız, bu Azure-Mr-312-Package. unitypackage' ı Indirmek için bir özel paketolarak projenize aktarın ve ardından Bölüm 7' den devam edin.

  1. Hiyerarşi panelinde, ana kamerayıseçin.

  2. Seçildiğinde, Inspector panelindeana kameranın tüm bileşenlerini görebilirsiniz.

    1. Kamera nesnesiana kamera olarak adlandırılmalıdır (yazımı aklınızda)
    2. Ana kamera etiketimaincamera olarak ayarlanmalıdır (yazımı aklınızda)
    3. Dönüştürme konumunun0, 0, 0 olarak ayarlandığından emin olun
    4. Clear bayraklarınıdüz renkolarak ayarlayın.
    5. Kamera bileşeninin arka plan rengini Siyah, Alfa 0 (onaltılı kod: #00000000) olarak ayarlayın

    Kamera kurulumu

Bölüm 6 – Newtonsoft Library Içeri aktarma

Alınan ve bot hizmetine gönderilen nesneleri seri durumdan çıkarmak ve seri hale getirmenize yardımcı olmak için Newtonsoft kitaplığını indirmeniz gerekir. Zaten doğru Unity klasör yapısıyla düzenlenmiş uyumlu bir sürümü buradabulabilirsiniz.

Newtonsoft kitaplığını projenize aktarmak için Bu kursla birlikte gelen Unity paketini kullanın.

  1. Varlıklariçin özel paket içeri aktarma menü seçeneğini kullanarak . unitypackage öğesini Unity 'ye ekleyin .

    Newtonsoft Library içeri aktarma

  2. Açılan Unity paketi Içeri aktar kutusunda, (ve dahil) eklentilerin altındaki her şeyin seçili olduğundan emin olun.

    Newtonsoft Library içeri aktarma

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

  4. Proje görünümündeki Eklentiler altındaki Newtonsoft klasörüne gidin ve Newtonsoft eklentisini seçin.

  5. Newtonsoft eklentisi seçiliyken, tüm platformunişaretliolmadığından emin olun, sonra da wsaplayer 'ın işaretinin kaldırıldığındanemin olun ve Uygula' ya tıklayın. Bu, dosyaların doğru şekilde yapılandırıldığını onaylamak için yeterlidir.

    Not

    Bu eklentileri işaretlemek, bunları yalnızca Unity düzenleyicisinde kullanılmak üzere yapılandırır. Proje Unity 'den verildikten sonra kullanılacak, WSA klasöründe farklı bir kümesi vardır.

  6. Ardından, Newtonsoft klasörü içinde wsa klasörünü açmanız gerekir. Yeni yapılandırdığınız dosyanın bir kopyasını görürsünüz. Dosyayı seçin ve sonra denetçisinde şunları doğrulayın

    • Herhangi bir platformişaretli değil
    • yalnızcawsaplayerişaretlendi
    • Dont işlemiişaretlendi

Bölüm 7 – BotTag oluşturun

  1. Bottagadlı yeni bir etiket nesnesi oluşturun. Sahnede ana kamerayı seçin. Inspector panelinde etiket açılan menüsüne tıklayın. Etiket ekle' ye tıklayın.

    Kamera kurulumu

  2. +Simgeye tıklayın. Yeni etiketibottagolarak adlandırın, kaydedin.

    Kamera kurulumu

Uyarı

Bottag 'ı ana kameraya uygulamayın. Yanlışlıkla bunu yaptıysanız, ana kamera etiketini Maincameraolarak değiştirdiğinizden emin olun.

Bölüm 8 – BotObjects sınıfını oluşturma

Oluşturmanız gereken ilk betik, bir dizi diğer sınıf nesnesinin aynı komut dosyasında depolanabilmesi ve sahnedeki diğer betikler tarafından erişilebilmesi için boş bir sınıf oluşturulan Botobjects sınıfıdır.

Bu sınıfın oluşturulması yalnızca bir mimari seçimdir, bu nesneler bunun yerine bu elbette daha sonra oluşturacağınız bot betiğinden barındırılabilir.

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

  1. Project panelinesağ tıklayıp klasör oluştur' u tıklatın. Klasör betikleriniadlandırın.

    Betikler klasörü oluştur.

  2. Betikler klasörünü açmak için çift tıklayın. Ardından bu klasörde, sağ tıklayın ve C# betiği oluştur' u seçin. Betiği Botobjectsolarak adlandırın.

  3. Yeni Botobjects betiğine çift tıklayarak Visual Studioaçın.

  4. Betiğin içeriğini silin ve aşağıdaki kodla değiştirin:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class BotObjects : MonoBehaviour{}
    
    /// <summary>
    /// Object received when first opening a conversation
    /// </summary>
    [Serializable]
    public class ConversationObject
    {
        public string ConversationId;
        public string token;
        public string expires_in;
        public string streamUrl;
        public string referenceGrammarId;
    }
    
    /// <summary>
    /// Object including all Activities
    /// </summary>
    [Serializable]
    public class ActivitiesRootObject
    {
        public List<Activity> activities { get; set; }
        public string watermark { get; set; }
    }
    [Serializable]
    public class Conversation
    {
        public string id { get; set; }
    }
    [Serializable]
    public class From
    {
        public string id { get; set; }
        public string name { get; set; }
    }
    [Serializable]
    public class Activity
    {
        public string type { get; set; }
        public string channelId { get; set; }
        public Conversation conversation { get; set; }
        public string id { get; set; }
        public From from { get; set; }
        public string text { get; set; }
        public string textFormat { get; set; }
        public DateTime timestamp { get; set; }
        public string serviceUrl { get; set; }
    }
    
  5. Unity'ye dönmeden önce Visual Studio değişikliklerinizi kaydettiğinizden emin olun.

Bölüm 9 – GazeInput sınıfını oluşturma

Oluşturacağınız bir sonraki sınıf GazeInput sınıfıdır. Bu sınıfın sorumluluğundadır:

  • Player 'ın gaboyutunu temsil edecek bir imleç oluşturma.
  • Player 'ın Gaze ve algılanan nesnelere başvuru tutan nesneleri algılama.

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

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

  2. Klasörün içine sağ tıklayın, C# betiği oluşturun. GazeInputbetiğini çağırın.

  3. Yeni GazeInput betiğine çift tıklayarak Visual Studioaçın.

  4. Aşağıdaki satırı doğrudan sınıf adının üstüne ekleyin:

    /// <summary>
    /// Class responsible for the User's gaze interactions
    /// </summary>
    [System.Serializable]
    public class GazeInput : MonoBehaviour
    
  5. Sonra, Start () yönteminin üzerinde aşağıdaki değişkenleri GazeInput sınıfının içine ekleyin:

        [Tooltip("Used to compare whether an object is to be interacted with.")]
        internal string InteractibleTag = "BotTag";
    
        /// <summary>
        /// Length of the gaze
        /// </summary>
        internal float GazeMaxDistance = 300;
    
        /// <summary>
        /// Object currently gazed
        /// </summary>
        internal GameObject FocusedObject { get; private set; }
    
        internal GameObject _oldFocusedObject { get; private set; }
    
        internal RaycastHit HitInfo { get; private set; }
    
        /// <summary>
        /// Cursor object visible in the scene
        /// </summary>
        internal GameObject Cursor { get; private set; }
    
        internal bool Hit { get; private set; }
    
        internal Vector3 Position { get; private set; }
    
        internal Vector3 Normal { get; private set; }
    
        private Vector3 _gazeOrigin;
    
        private Vector3 _gazeDirection;
    
  6. Start () yöntemi için kod eklenmelidir. Bu, sınıf başlatıldığında çağrılır:

        /// <summary>
        /// Start method used upon initialization.
        /// </summary>
        internal virtual void Start()
        {
            FocusedObject = null;
            Cursor = CreateCursor();
        }
    
  7. Gaze imlecini örneklendirilecek ve ayarlamaya yönelik bir yöntem uygulayın:

        /// <summary>
        /// Method to create a cursor object.
        /// </summary>
        internal GameObject CreateCursor()
        {
            GameObject newCursor = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            newCursor.SetActive(false);
            // Remove the collider, so it does not block Raycast.
            Destroy(newCursor.GetComponent<SphereCollider>());
            newCursor.transform.localScale = new Vector3(0.05f, 0.05f, 0.05f);
            Material mat = new Material(Shader.Find("Diffuse"));
            newCursor.GetComponent<MeshRenderer>().material = mat;
            mat.color = Color.HSVToRGB(0.0223f, 0.7922f, 1.000f);
            newCursor.SetActive(true);
    
            return newCursor;
        }
    
  8. Ana kameradan Raycast 'u ayarlamaya yönelik yöntemleri uygulayın ve geçerli odaklanan nesneyi takip edecektir.

        /// <summary>
        /// Called every frame
        /// </summary>
        internal virtual void Update()
        {
            _gazeOrigin = Camera.main.transform.position;
    
            _gazeDirection = Camera.main.transform.forward;
    
            UpdateRaycast();
        }
    
    
        /// <summary>
        /// Reset the old focused object, stop the gaze timer, and send data if it
        /// is greater than one.
        /// </summary>
        private void ResetFocusedObject()
        {
            // Ensure the old focused object is not null.
            if (_oldFocusedObject != null)
            {
                if (_oldFocusedObject.CompareTag(InteractibleTag))
                {
                    // Provide the OnGazeExited event.
                    _oldFocusedObject.SendMessage("OnGazeExited", 
                        SendMessageOptions.DontRequireReceiver);
                }
            }
        }
    
    
        private void UpdateRaycast()
        {
            // Set the old focused gameobject.
            _oldFocusedObject = FocusedObject;
            RaycastHit hitInfo;
    
            // Initialize Raycasting.
            Hit = Physics.Raycast(_gazeOrigin,
                _gazeDirection,
                out hitInfo,
                GazeMaxDistance);
            HitInfo = hitInfo;
    
            // Check whether raycast has hit.
            if (Hit == true)
            {
                Position = hitInfo.point;
                Normal = hitInfo.normal;
    
                // Check whether the hit has a collider.
                if (hitInfo.collider != null)
                {
                    // Set the focused object with what the user just looked at.
                    FocusedObject = hitInfo.collider.gameObject;
                }
                else
                {
                    // Object looked on is not valid, set focused gameobject to null.
                    FocusedObject = null;
                }
            }
            else
            {
                // No object looked upon, set focused gameobject to null.
                FocusedObject = null;
    
                // Provide default position for cursor.
                Position = _gazeOrigin + (_gazeDirection * GazeMaxDistance);
    
                // Provide a default normal.
                Normal = _gazeDirection;
            }
    
            // Lerp the cursor to the given position, which helps to stabilize the gaze.
            Cursor.transform.position = Vector3.Lerp(Cursor.transform.position, Position, 0.6f);
    
            // Check whether the previous focused object is this same. If so, reset the focused object.
            if (FocusedObject != _oldFocusedObject)
            {
                ResetFocusedObject();
                if (FocusedObject != null)
                {
                    if (FocusedObject.CompareTag(InteractibleTag))
                    {
                        // Provide the OnGazeEntered event.
                        FocusedObject.SendMessage("OnGazeEntered",
                            SendMessageOptions.DontRequireReceiver);
                    }
                }
            }
        }
    
  9. Unity'ye dönmeden önce Visual Studio değişikliklerinizi kaydettiğinizden emin olun.

Bölüm 10 – bot sınıfını oluşturma

Şimdi oluşturacağınız betiğe botadı verilir. Bu, uygulamanızın temel sınıfındır ve şunları depolar:

  • Web uygulaması bot kimlik bilgileri
  • Kullanıcı sesli komutlarını toplayan yöntemi
  • Web uygulaması bot ile konuşmaları başlatmak için gereken Yöntem
  • Web uygulaması bot 'a ileti göndermek için gereken Yöntem

Bot hizmetine ileti göndermek için sendmessagetobot () eş yordam olamaz, bir etkinlik oluşturur ve bu, Kullanıcı tarafından gönderilen veriler olarak bot çerçevesi tarafından tanınan bir nesnedir.

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

  1. Dosyaları açmak için betikler klasörüne çift tıklayın.

  2. Betikler klasörünün içine sağ tıklayın, C# betiği oluştur' a tıklayın. Betik bot'ı adlandırın.

  3. Yeni komut dosyasına çift tıklayarak Visual Studio açın.

  4. Ad alanlarını, bot sınıfının en üstünde bulunan, aşağıdaki gibi olacak şekilde güncelleştirin:

    using Newtonsoft.Json;
    using System.Collections;
    using System.Text;
    using UnityEngine;
    using UnityEngine.Networking;
    using UnityEngine.Windows.Speech;
    
  5. Bot sınıfının içinde aşağıdaki değişkenleri ekleyin:

        /// <summary>
        /// Static instance of this class
        /// </summary>
        public static Bot Instance;
    
        /// <summary>
        /// Material of the sphere representing the Bot in the scene
        /// </summary>
        internal Material botMaterial;
    
        /// <summary>
        /// Speech recognizer class reference, which will convert speech to text.
        /// </summary>
        private DictationRecognizer dictationRecognizer;
    
        /// <summary>
        /// Use this variable to identify the Bot Id
        /// Can be any value
        /// </summary>
        private string botId = "MRBotId";
    
        /// <summary>
        /// Use this variable to identify the Bot Name
        /// Can be any value
        /// </summary>
        private string botName = "MRBotName";
    
        /// <summary>
        /// The Bot Secret key found on the Web App Bot Service on the Azure Portal
        /// </summary>
        private string botSecret = "-- Add your Secret Key here --"; 
    
        /// <summary>
        /// Bot Endpoint, v4 Framework uses v3 endpoint at this point in time
        /// </summary>
        private string botEndpoint = "https://directline.botframework.com/v3/directline";
    
        /// <summary>
        /// The conversation object reference
        /// </summary>
        private ConversationObject conversation;
    
        /// <summary>
        /// Bot states to regulate the application flow
        /// </summary>
        internal enum BotState {ReadyToListen, Listening, Processing}
    
        /// <summary>
        /// Flag for the Bot state
        /// </summary>
        internal BotState botState;
    
        /// <summary>
        /// Flag for the conversation status
        /// </summary>
        internal bool conversationStarted = false;
    

    Not

    Botsecret değişkenine bot gizli anahtarını eklediğinizden emin olun. Bu kursun başlangıcında, Bölüm 2' de adım 10 ' da,bot gizli anahtarınızı not etmiştiniz.

  6. Artık uyanık () ve Start () için kod eklenmesi gerekiyor.

        /// <summary>
        /// Called on Initialization
        /// </summary>
        void Awake()
        {
            Instance = this;
        }
    
        /// <summary>
        /// Called immediately after Awake method
        /// </summary>
        void Start()
        {
            botState = BotState.ReadyToListen;
        }
    
  7. Ses yakalama başladığında ve sona erdiğinde konuşma kitaplıkları tarafından çağrılan iki işleyiciyi ekleyin. Dictationtanıyıcı Kullanıcı konuşmayı durdurduğunuzda Kullanıcı sesinizin yakalanmasını otomatik olarak durdurur.

        /// <summary>
        /// Start microphone capture.
        /// </summary>
        public void StartCapturingAudio()
        {
            botState = BotState.Listening;
            botMaterial.color = Color.red;
    
            // Start dictation
            dictationRecognizer = new DictationRecognizer();
            dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
            dictationRecognizer.Start();
        }
    
    
        /// <summary>
        /// Stop microphone capture.
        /// </summary>
        public void StopCapturingAudio()
        {
            botState = BotState.Processing;
            dictationRecognizer.Stop();
        }
    
    
  8. Aşağıdaki işleyici, Kullanıcı Ses girişinin sonucunu toplar ve iletiyi Web uygulaması bot hizmetine göndermekten sorumlu olan bağıntıyı çağırır.

        /// <summary>
        /// This handler is called every time the Dictation detects a pause in the speech. 
        /// </summary>
        private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
        {
            // Update UI with dictation captured
            Debug.Log($"User just said: {text}");      
    
            // Send dictation to Bot
            StartCoroutine(SendMessageToBot(text, botId, botName, "message"));
            StopCapturingAudio();
        }     
    
  9. Bu, bot ile konuşmaya başlamak için aşağıdaki eş yordamın çağrılması. Konuşma çağrısının tamamlandığına göre, bir dizi parametreyi geçirerek, bir etkinliğin bir boş ileti olarak bot hizmetine gönderilmesini sağlayacak bir parametre dizisi geçirerek Sendmessagetocoroutine () çağrısı olacağını fark edeceksiniz. Bu işlem, bot hizmetini iletişim kutusu başlatmasını istemek için yapılır.

        /// <summary>
        /// Request a conversation with the Bot Service
        /// </summary>
        internal IEnumerator StartConversation()
        {
            string conversationEndpoint = string.Format("{0}/conversations", botEndpoint);
    
            WWWForm webForm = new WWWForm();
    
            using (UnityWebRequest unityWebRequest = UnityWebRequest.Post(conversationEndpoint, webForm))
            {
                unityWebRequest.SetRequestHeader("Authorization", "Bearer " + botSecret);
                unityWebRequest.downloadHandler = new DownloadHandlerBuffer();
    
                yield return unityWebRequest.SendWebRequest();
                string jsonResponse = unityWebRequest.downloadHandler.text;
    
                conversation = new ConversationObject();
                conversation = JsonConvert.DeserializeObject<ConversationObject>(jsonResponse);
                Debug.Log($"Start Conversation - Id: {conversation.ConversationId}");
                conversationStarted = true; 
            }
    
            // The following call is necessary to create and inject an activity of type //"conversationUpdate" to request a first "introduction" from the Bot Service.
            StartCoroutine(SendMessageToBot("", botId, botName, "conversationUpdate"));
        }    
    
  10. Aşağıdaki eş yordam olamaz, bot hizmetine gönderilecek etkinliği oluşturmak için çağırılır.

        /// <summary>
        /// Send the user message to the Bot Service in form of activity
        /// and call for a response
        /// </summary>
        private IEnumerator SendMessageToBot(string message, string fromId, string fromName, string activityType)
        {
            Debug.Log($"SendMessageCoroutine: {conversation.ConversationId}, message: {message} from Id: {fromId} from name: {fromName}");
    
            // Create a new activity here
            Activity activity = new Activity();
            activity.from = new From();
            activity.conversation = new Conversation();
            activity.from.id = fromId;
            activity.from.name = fromName;
            activity.text = message;
            activity.type = activityType;
            activity.channelId = "DirectLineChannelId";
            activity.conversation.id = conversation.ConversationId;     
    
            // Serialize the activity
            string json = JsonConvert.SerializeObject(activity);
    
            string sendActivityEndpoint = string.Format("{0}/conversations/{1}/activities", botEndpoint, conversation.ConversationId);
    
            // Send the activity to the Bot
            using (UnityWebRequest www = new UnityWebRequest(sendActivityEndpoint, "POST"))
            {
                www.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(json));
    
                www.downloadHandler = new DownloadHandlerBuffer();
                www.SetRequestHeader("Authorization", "Bearer " + botSecret);
                www.SetRequestHeader("Content-Type", "application/json");
    
                yield return www.SendWebRequest();
    
                // extrapolate the response Id used to keep track of the conversation
                string jsonResponse = www.downloadHandler.text;
                string cleanedJsonResponse = jsonResponse.Replace("\r\n", string.Empty);
                string responseConvId = cleanedJsonResponse.Substring(10, 30);
    
                // Request a response from the Bot Service
                StartCoroutine(GetResponseFromBot(activity));
            }
        }
    
  11. Aşağıdaki eş yordam, bot hizmetine etkinlik gönderdikten sonra bir yanıt istemek üzere çağırılır.

        /// <summary>
        /// Request a response from the Bot by using a previously sent activity
        /// </summary>
        private IEnumerator GetResponseFromBot(Activity activity)
        {
            string getActivityEndpoint = string.Format("{0}/conversations/{1}/activities", botEndpoint, conversation.ConversationId);
    
            using (UnityWebRequest unityWebRequest1 = UnityWebRequest.Get(getActivityEndpoint))
            {
                unityWebRequest1.downloadHandler = new DownloadHandlerBuffer();
                unityWebRequest1.SetRequestHeader("Authorization", "Bearer " + botSecret);
    
                yield return unityWebRequest1.SendWebRequest();
    
                string jsonResponse = unityWebRequest1.downloadHandler.text;
    
                ActivitiesRootObject root = new ActivitiesRootObject();
                root = JsonConvert.DeserializeObject<ActivitiesRootObject>(jsonResponse);
    
                foreach (var act in root.activities)
                {
                    Debug.Log($"Bot Response: {act.text}");
                    SetBotResponseText(act.text);
                }
    
                botState = BotState.ReadyToListen;
                botMaterial.color = Color.blue;
            }
        } 
    
  12. Bu sınıfa eklenecek son yöntem, görüntülenecek iletiyi göstermek için gereklidir:

        /// <summary>
        /// Set the UI Response Text of the bot
        /// </summary>
        internal void SetBotResponseText(string responseString)
        {        
            SceneOrganiser.Instance.botResponseText.text =  responseString;
        }
    

    Not

    Unity düzenleyici konsolunda bir hata görebilirsiniz. Bu, manzara sınıfının eksik olduğu hakkında bilgi alabilirsiniz. Bu sınıfı öğreticide daha sonra oluşturacağınız için bu iletiyi göz ardı edin.

  13. Unity'ye dönmeden önce Visual Studio değişikliklerinizi kaydettiğinizden emin olun.

Bölüm 11 – etkileşimler sınıfını oluşturma

Şimdi oluşturacağınız sınıfa etkileşimleradı verilir. bu sınıf, kullanıcıdan girişe HoloLens Tap 'ı algılamak için kullanılır.

Kullanıcı sahnede bot nesnesine bakırken bir dokunduğunda ve bot, sesli girişleri dinlemek için hazırsanız, bot nesnesi rengi Red olarak değiştirecek ve ses girişlerini dinlemeye başlayacaktır.

Bu sınıf GazeInput sınıfından devralınır ve bu nedenle, tabankullanımı tarafından belirtilen sınıftan Start () yöntemine ve değişkenlerine başvurabilir.

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

  1. Dosyaları açmak için betikler klasörüne çift tıklayın.

  2. Betikler klasörünün içine sağ tıklayın, C# betiği oluştur' a tıklayın. Betik etkileşiminiadlandırın.

  3. Yeni komut dosyasına çift tıklayarak Visual Studio açın.

  4. Ad alanlarını ve sınıf devralmayı, etkileşimler sınıfının en üstünde bulunan, aşağıdaki gibi olacak şekilde güncelleştirin:

    using UnityEngine.XR.WSA.Input;
    
    public class Interactions : GazeInput
    {
    
  5. Etkileşimler sınıfının içinde aşağıdaki değişkeni ekleyin:

        /// <summary>
        /// Allows input recognition with the HoloLens
        /// </summary>
        private GestureRecognizer _gestureRecognizer;
    
  6. Sonra Start () yöntemini ekleyin:

        /// <summary>
        /// Called on initialization, after Awake
        /// </summary>
        internal override void Start()
        {
            base.Start();
    
            //Register the application to recognize HoloLens user inputs
            _gestureRecognizer = new GestureRecognizer();
            _gestureRecognizer.SetRecognizableGestures(GestureSettings.Tap);
            _gestureRecognizer.Tapped += GestureRecognizer_Tapped;
            _gestureRecognizer.StartCapturingGestures();
        }
    
  7. kullanıcı HoloLens kameranın önünde dokunma hareketini gerçekleştirdiğinde tetiklenecek işleyiciyi ekleyin

        /// <summary>
        /// Detects the User Tap Input
        /// </summary>
        private void GestureRecognizer_Tapped(TappedEventArgs obj)
        {
            // Ensure the bot is being gazed upon.
            if(base.FocusedObject != null)
            {
                // If the user is tapping on Bot and the Bot is ready to listen
                if (base.FocusedObject.name == "Bot" && Bot.Instance.botState == Bot.BotState.ReadyToListen)
                {
                    // If a conversation has not started yet, request one
                    if(Bot.Instance.conversationStarted)
                    {
                        Bot.Instance.SetBotResponseText("Listening...");
                        Bot.Instance.StartCapturingAudio();
                    }
                    else
                    {
                        Bot.Instance.SetBotResponseText("Requesting Conversation...");
                        StartCoroutine(Bot.Instance.StartConversation());
                    }                                  
                }
            }
        }
    
  8. Unity'ye dönmeden önce Visual Studio değişikliklerinizi kaydettiğinizden emin olun.

Bölüm 12 – manzara sınıfı oluşturma

Bu laboratuvarda gerekli olan son sınıfa, manzara Iseradı verilir. Bu sınıf, ana kameraya bileşenler ve betikler ekleyerek ve sahnede uygun nesneleri oluşturarak sahneyi programsal olarak ayarlar.

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

  1. Dosyaları açmak için betikler klasörüne çift tıklayın.

  2. Betikler klasörünün içine sağ tıklayın, C# betiği oluştur' a tıklayın. Betiği manzaraadına adlandırın.

  3. Yeni komut dosyasına çift tıklayarak Visual Studio açın.

  4. Manzara sınıfının içinde aşağıdaki değişkenleri ekleyin:

        /// <summary>
        /// Static instance of this class
        /// </summary>
        public static SceneOrganiser Instance;
    
        /// <summary>
        /// The 3D text representing the Bot response
        /// </summary>
        internal TextMesh botResponseText;
    
  5. Ardından, uyanık () ve Start () yöntemlerini ekleyin:

        /// <summary>
        /// Called on Initialization
        /// </summary>
        private void Awake()
        {
            Instance = this;
        }
    
        /// <summary>
        /// Called immediately after Awake method
        /// </summary>
        void Start ()
        {
            // Add the GazeInput class to this object
            gameObject.AddComponent<GazeInput>();
    
            // Add the Interactions class to this object
            gameObject.AddComponent<Interactions>();
    
            // Create the Bot in the scene
            CreateBotInScene();
        }
    
  6. Sahnede bot nesnesini oluşturmaktan ve parametreleri ve bileşenleri ayarlamaktan sorumlu olan aşağıdaki yöntemi ekleyin:

        /// <summary>
        /// Create the Sign In button object in the scene
        /// and sets its properties
        /// </summary>
        private void CreateBotInScene()
        {
            GameObject botObjInScene = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            botObjInScene.name = "Bot";
    
            // Add the Bot class to the Bot GameObject
            botObjInScene.AddComponent<Bot>();
    
            // Create the Bot UI
            botResponseText = CreateBotResponseText();
    
            // Set properties of Bot GameObject
            Bot.Instance.botMaterial = new Material(Shader.Find("Diffuse"));
            botObjInScene.GetComponent<Renderer>().material = Bot.Instance.botMaterial;
            Bot.Instance.botMaterial.color = Color.blue;
            botObjInScene.transform.position = new Vector3(0f, 2f, 10f);
            botObjInScene.tag = "BotTag";
        }
    
  7. Botdaki yanıtları temsil eden sahnede UI nesnesini oluşturmaktan sorumlu aşağıdaki yöntemi ekleyin:

        /// <summary>
        /// Spawns cursor for the Main Camera
        /// </summary>
        private TextMesh CreateBotResponseText()
        {
            // Create a sphere as new cursor
            GameObject textObject = new GameObject();
            textObject.transform.parent = Bot.Instance.transform;
            textObject.transform.localPosition = new Vector3(0,1,0);
    
            // Resize the new cursor
            textObject.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
    
            // Creating the text of the Label
            TextMesh textMesh = textObject.AddComponent<TextMesh>();
            textMesh.anchor = TextAnchor.MiddleCenter;
            textMesh.alignment = TextAlignment.Center;
            textMesh.fontSize = 50;
            textMesh.text = "Hi there, tap on me and I will start listening.";
    
            return textMesh;
        }
    
  8. Unity'ye dönmeden önce Visual Studio değişikliklerinizi kaydettiğinizden emin olun.

  9. Unity düzenleyicisinde, manzara komut dosyasını betikler klasöründen ana kameraya sürükleyin. Sahne kuruluşu bileşeni, aşağıdaki görüntüde gösterildiği gibi artık ana kamera nesnesinde görünmelidir.

    Azure bot hizmetini oluşturma

Bölüm 13 – derlemeden önce

Uygulamanızın kapsamlı bir testini gerçekleştirmek için, HoloLens üzerine dışarıdan yüklemeniz gerekir. Bunu yapmadan önce aşağıdakilerden emin olun:

  • Bölüm 4 ' te bahsedilen tüm ayarlar doğru şekilde ayarlanır.
  • Komut dosyası,ana kamera nesnesine eklenir.
  • Bot sınıfında, bot gizli anahtarınızıbotsecret değişkenine yerleştirdiğinizden emin olun.

Bölüm 14 – HoloLens derleme ve dışarıdan yükleme

Bu projenin Unity bölümü için gereken her şey tamamlandı, bu nedenle Unity 'den derlemek için zaman.

  1. derleme Ayarlar, dosya derleme Ayarlar git...

  2. yapı Ayarlar penceresinde, oluştur' a tıklayın.

    Unity 'den uygulama oluşturma

  3. Henüz değilse, Unity C# projeleriniTick yapın.

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

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

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

Bölüm 15 – HoloLens dağıtım

HoloLens dağıtmak için:

  1. HoloLens (uzaktan dağıtım için) ıp adresine ihtiyacınız olacak ve HoloLens geliştirici modundaolduğundan emin olmanız gerekir. Bunu yapmak için:

    1. HoloLens, Ayarlaraçın.
    2. Internet > Wi-Fi > Gelişmiş Seçenekler 'e gidin
    3. IPv4 adresini aklınızda edin.
    4. sonra, Ayarlar' ye dönüp, geliştiricilerin güvenliğini güncelleştirmek için
    5. Geliştirici modunu açık olarak ayarlayın.
  2. Yeni Unity derlemenize ( uygulama klasörü) gidin ve çözüm dosyasını Visual Studioaçın.

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

  4. Çözüm platformundax86, uzak makine' yi seçin.

    Çözümü Visual Studio dağıtım.

  5. Uygulamayı HoloLens dışarıdan yüklemek için derleme menüsüne gidin ve Çözümü dağıt' a tıklayın.

  6. uygulamanız artık HoloLens yüklü uygulamalar listesinde görünmelidir, başlamaya hazır!

    Not

    Modern bir kulaklığa dağıtmak için, çözüm platformunuyerel makineyeayarlayın ve yapılandırmayıPlatformolarak x86 ile hata ayıklamaolarak ayarlayın. Ardından, derleme menüsünükullanarak çözüm dağıt' ı seçerek yerel makineye dağıtın.

Bölüm 16 – HoloLens uygulama kullanma

  • Uygulamayı etkinleştirdikten sonra, bot 'un önünde mavi bir kürenin olduğunu görürsünüz.

  • Konuşmayı başlatmak için kürede kasteken dokunma hareketini kullanın.

  • Görüşmenin başlamasını bekleyin (Kullanıcı arabirimi olduğunda bir ileti görüntülenir). Bot 'tan giriş iletisini aldıktan sonra, kırmızı kalacak ve sesinize dinlemeye başlamak için bot 'ta tekrar dokunun.

  • Konuşmayı durdurduktan sonra uygulamanız iletinizi bot 'a gönderir ve Kullanıcı arabiriminde görüntülenecek bir yanıt alırsınız.

  • Bot 'a daha fazla ileti göndermek için işlemi tekrarlayın (bir iletiyi almak istediğiniz her seferinde dokunmanız gerekir).

Bu konuşmada, bot 'ın bilgileri (adınız) nasıl koruabileceği gösterilmektedir. Ayrıca, bilinen bilgileri (örneğin, stoklandığı öğeler) de sağlar.

Bot 'a sormaya yönelik bazı sorular:

what do you sell? 

how much are umbrellas?

how much are raincoats?

Tamamlanmış Web uygulaması bot (v4) uygulamanız

tebrikler, Azure Web app Bot 'tan yararlanan bir karma gerçeklik uygulaması (Microsoft Bot Framework v4) derlediniz.

Son ürün

Ek alıştırmalar

Alıştırma 1

Bu laboratuvardaki konuşma yapısı çok temel. Botunuza doğal dil özelliklerini anlamak için Microsoft LUSıS 'yi kullanın.

Alıştırma 2

Bu örnek, bir konuşmayı sonlandırıp yenisini yeniden başlatmanıza dahil değildir. Bot özelliğinin tamamlanmasını sağlamak için, konuşmaya kapatma uygulamayı deneyin.