Febbraio 2017

Volume 32 Numero 2

Il presente articolo è stato tradotto automaticamente.

HoloLens - Passaggio dalla realtà virtuale a quella mista

Da Tim Kulp

Virtuale realtà è subito tutti l'entusiasmo e gli sviluppatori sono competizione per compilare il contenuto. All'orizzonte realtà misto (MR) sta iniziando a stimolare l'immaginazione di sviluppatori e migliorare la nostra ripensare come il mondo digitale può interagire con il mondo reale. Come trazione guadagni MR, è necessario portare le tue App VR a una nuova piattaforma. In questo articolo, verrà illustrato come aggiornare un'app VR MR sul HoloLens, senza dover riscrivere l'intero paragrafo.

Nel numero di settembre di MSDN Magazine, ho creato un'app VR denominata Contoso viaggio (msdn.com/magazine/mt763231). Questa applicazione è consentito il reparto di Contoso viaggio vedere in tutti i dipendenti sono stati in viaggio in tutto il mondo tramite una mappa VR. L'idea dell'applicazione consiste nel fornire un'esperienza coinvolgente per gli utenti con un'interfaccia che è più di una serie di pin su una mappa. Nell'app, ogni viaggiatore è rappresentato da un avatar che mostra la destinazione di viaggio della persona e ore. Ho utilizzato lo ammirate rilevamento per sapere quando l'utente è stato osservando un avatar e quindi consentito all'utente di selezionare l'avatar per una finestra di dialogo visualizzare i dettagli di bagagli.

Prima di iniziare

In questo articolo si presuppone che si è già provveduto alcuni lettura sullo sviluppo di HoloLens, ad esempio articolo di novembre MSDN Magazine di Adam Tuliper (msdn.com/magazine/mt788624) o le esercitazioni Academy HoloLens (bit.ly/2gzYYr6). In particolare, questo articolo è incentrato sull'uso di alcuni, movimenti e vocali, pertanto si consiglia di consultare gli articoli non andrò dettagli forniti nel contenuto. Questo articolo si presuppone inoltre che aver letto il mio articolo di settembre come se fosse il punto di partenza per ciò che tratterò qui.

Per iniziare, scaricare il codice per vr_travel da GitHub (bit.ly/2fXiqy2). Questa è la base del codice che di avvio in questo articolo.

Visual Studio realtà virtuale. Realtà misto

Quando si creano applicazioni per qualsiasi piattaforma, è importante comprendere ciò che rende unico piattaforma e adottare in modo che fornisca valore per la piattaforma specifica. Ad esempio, se non fossero alcuna differenza tra un'applicazione Web e un'applicazione mobile, perché si mai sceglierà uno rispetto a altro? La chiave consiste nel fornire valore in base a diverse funzionalità di ogni piattaforma. Per VR, la forza della chiave è che gli utenti riscontrare solo ciò che vedono nella cuffia. Il resto del mondo di dissolvenza come contenuto distribuito all'utente è escluso il mondo reale. Ciò consente di creare incredibili vantaggi che non esistono nel mondo reale o evitare distrazioni da non può essere contenuto dell'applicazione. VR viene visualizzata un'altra posizione. Utilizzato per isolare l'utente all'interno di esperienza. Da una prospettiva di applicazione aziendale, potrebbe trattarsi di uno scenario di chiamata center in cui tutte le attività eseguite dall'utente sono vincolata alla piattaforma di operazioni del centro.

MR, è invece comprende tutto il mondo, poiché vengono combinati il mondo virtuale con il mondo reale per creare un'esperienza complessiva. HA esito positivo Usa contenuto virtuale per estendere il mondo reale. Utilizzare MR quando si desidera che gli utenti siano in grado di lavorare all'interno del mondo, pur consentendo di sperimentare le loro. Ad esempio, in ufficio, MR può essere utilizzato per visualizzare contenuto che deve sempre essere presente, ad esempio un calendario da tavolo connesso a Outlook o di un moderno schedario Rolodex che rappresenta i contatti come biglietti da visita olografiche. Questi ologrammi possono essere presenti, mentre gli utenti lavorano su monitor reale per elementi quali la scrittura di software. Tecnici possono utilizzare ologrammi per vedere olografiche rappresentazioni dei modelli di che cui stanno lavorando durante la progettazione del modello nei propri computer. Ufficio potrebbe aumentare propria area di lavoro senza ingombrare, con elementi fisici.

Per chi viaggia di Contoso, si desidero che gli utenti siano in grado di vedere i relativi utenti che viaggiano in qualsiasi momento. Ologramma sulla scrivania è ideale per quanto gli utenti potrebbero eseguire altre operazioni sullo schermo (ad esempio il viaggio di prenotazione), mentre un riepilogo rapido al lato viene visualizzata in cui gli utenti sono in qualsiasi momento. Sistemi di prenotazione di viaggio sono complessi e si desidera ricompilare VR, ma in modo da integrare sistemi esistenti con una mappa di MR di utenti che viaggiano qualcosa non è una soluzione perfetta per consentire gli aggiornamenti in modo immediato senza occupata area fisica dell'utente.

Preparazione per la realtà misto

Sviluppo HoloLens richiede in genere molte delle attività, ad esempio per rilevare lo ammirate, movimenti e vocale, indipendentemente dal tipo di applicazione che si sta creando. Fortunatamente, Microsoft ha creato una libreria di codice che consenta di passare a sviluppo HoloLens. Il HoloToolkit (bit.ly/2bO8XrT) fornisce un ottimo punto di partenza. Scaricare il HoloToolkit e seguire le istruzioni su GitHub per convertirlo in un pacchetto di Unity, è possibile importare i progetti HoloLens (bit.ly/2ftiOrY).

Con HoloToolkit pronti all'uso come pacchetto Unity, aprire la base di codice vr_travel e importare il HoloToolkit pacchetto utilizzando gli asset | Importa pacchetto | Pacchetto personalizzato. Spostarsi in cui è salvato il pacchetto HoloToolkit e selezionarla per l'importazione. Unity visualizzerà la finestra di dialogo Importa pacchetto, che mostra tutti i vari elementi del pacchetto. Per questo articolo importare tutti gli elementi tranne i progetti di esempio. Se si desidera includerle nel progetto, è possibile in quanto forniscono codice di esempio che può risultare utili. Fare clic su Importa quando si è pronti per portare il pacchetto HoloToolkit nel progetto vr_travel. Al termine dell'importazione, si noterà una nuova cartella nella visualizzazione progetto chiamata HoloToolkit, nonché un nuovo elemento HoloToolkit nella barra dei menu che consente di accedere ad alcune utili funzionalità HoloLens specifiche di Unity, ad esempio applicare automaticamente le impostazioni per la scena o il progetto per eseguire l'app in HoloLens (vedere figura 1).

Menu HoloToolkit
Figura 1 HoloToolkit Menu

Anche se si sta aggiornando l'app da un'app HoloLens, si desidera mantenere la versione VR il mondo. Per mantenere il mondo VR, salvare la scena principale come una nuova scena utilizzando File | Come salvare e chiamare di nuovo main_mr scena.  In questo modo è possibile gestire le operazioni effettuate per il mondo VR durante la compilazione di un nuovo mondo MR. Inoltre, quando si modifica il codice per componenti come il modello viaggiatore o il Manager di viaggio, l'app VR verrà aggiornata con la nuova app MR.

A questo punto, configurare il progetto per un progetto HoloLens visitando HoloToolkit | Configurare | Applicare le impostazioni di progetto HoloLens. Verranno aggiornate la compilazione e altre impostazioni del progetto per preparare l'app per la HoloLens. Se si configura l'app per un progetto HoloLens, la fotocamera verrà configurata automaticamente per il funzionamento su HoloLens. L'unica differenza che è preferibile rendere da qui consiste nell'impostare Skybox da uno sfondo nero invece di utilizzare una trama skybox. In HoloLens, nulla nero non viene eseguito il rendering come un oggetto virtuale. Ad esempio, è possibile utilizzare uno sfondo nero per rendere uno sfondo trasparente, consentendo il mondo reale siano visibili attraverso.

Con il skybox rimosso e il progetto configurato, disponibile con una superficie di utenti che viaggiano in cui verrà visualizzati a virgola mobile il vuoto. Posizione della fotocamera in una posizione in cui è possibile visualizzare il mondo, ma tenere presente che in un'app HoloLens camera rappresenta la posizione del dispositivo. Pianificare la fotocamera in base in cui si desidera l'esperienza dell'utente per avviare, considerare il modo in cui si sposta la fotocamera in tutto l'ambiente. Nelle applicazioni VR, il lettore è vincolato a controller ne consente eseguire. Per un'app HoloLens, occorre valutare con attenzione i modi in cui il HoloLens può essere spostata in tutto il mondo e pianificare di conseguenza fornire la migliore esperienza possibile per gli utenti.

Con la fotocamera sul posto, si è pronti per testare il HoloLens. Passare al File | Le impostazioni per aggiungere la scena main_mr come primaria scena di compilazione. Fare clic su Aggiungi scene Apri per aggiungere main_mr, quindi deselezionare la scena principale per rimuoverlo dall'elenco delle scene incorporate. In questo modo è possibile creare solo la scena è destinata la HoloLens. È possibile creare a questo punto, ma al contrario, utilizziamo la finestra di compilazione HoloToolkit. Aprire HoloToolkit | Finestra della compilazione (vedere figura 2), che consente di personalizzare la compilazione e distribuzione dell'applicazione HoloLens.

La finestra di compilazione HoloToolkit
Figura 2 finestra compilazione HoloToolkit

Utilizzare le impostazioni predefinite e fare clic su Build Visual Studio SLN. Verrà creata una soluzione per poter aprire in Visual Studio e distribuire il dispositivo HoloLens. Una volta completata la distribuzione all'emulatore HoloLens o al dispositivo, si noterà la piattaforma e un enorme pulsante viaggiatori di carico, è possibile visualizzare, ma si può fare praticamente nulla ancora. Verranno apportate alcune modifiche per consentire all'utente di caricare i viaggiatori. Se occorre assistenza per la compilazione del progetto, consultare "Ologrammi 100" su HoloAcademy (bit.ly/2bxVOoe) o "ologrammi 101" per la distribuzione in un dispositivo (bit.ly/2bhqsiV).

Movimenti e lo ammirate aggiunta

Il mondo delle realtà virtuale creato nell'articolo precedente ha alcune funzionalità interattive, allora che riprodurre. Il primo interactable aggiunti che VR progetto era il pulsante per caricare i viaggiatori. Verifichiamo che funzionano per l'utente HoloLens. Per iniziare, creare un nuovo oggetto vuoto gioco chiamato Manager. (Nota: Consolidare tutti mio "managers" a un singolo oggetto in modo da una posizione centrale per aggiungere componenti come Manager lo ammirate, il gestore movimenti e così via. Questa centralizzazione rende più semplice individuare i gestori delle scene diventare complesse e semplifica l'accesso tra i componenti di gestione.)

Con gestione selezionato, fare clic su Aggiungi componente e cercare lo ammirate Manager. In questo modo la fotocamera in modo che lo ammirate informazioni per l'applicazione è possibile rilevare quando la visualizzazione dell'utente è che entrino in conflitto con un oggetto. Funziona in modo simile al codice lo ammirate è impostato per VR lo ammirate MR. La fotocamera proietta un raycast e quindi rileva se tale raycast è in conflitto con un oggetto interactable. Il componente Gestione lo ammirate incorporata nel HoloToolkit e può essere aggiunto come un diritto di componente per l'oggetto di gestione.

Un elemento dell'interfaccia utente critico per lo sviluppo in realtà misti e virtuale consiste nel fornire un feedback visivo su ciò che l'utente è attualmente aperta. A tale scopo, è necessario un cursore HoloToolkit è un'applicazione da utilizzare. Nella cartella del progetto, passare a HoloToolkit | Input | Prefabs | Cursore. Trascinare questo prefab nella gerarchia. Verrà aggiunto un cursore per la scena che tiene traccia in cui l'utente esegue la ricerca, consentendo agli utenti di non perdere come appaiono intorno alla scena.

È possibile utilizzare il pulsante di reagire a una macchina, è necessario sapere se l'utente sta guardando. Il pulsante è un pulsante area di disegno Unity che non rispondono al raycast perché non dispone di un collider su di esso. Aggiungere un collider casella all'oggetto btnLoad facendo clic su btnLoad di gerarchia e quindi Aggiungi componente. Selezionare fisica | Casella Collider e quindi fare clic su Modifica Collider. Ciò consente di ridimensionare il collider a quello del pulsante. Impostare la scala X uguale alla larghezza del pulsante e la scala Y uguale all'altezza del pulsante. Per questo articolo per mantenere la l'interfaccia utente molto semplice, ma è molto da eseguire per creare un'interfaccia utente completa per la HoloLens. L'articolo di Surya Buchwald, "Scalabilità dell'interfaccia utente per il HoloLens" (bit.ly/2gpfGue), per informazioni su come configurare un'interfaccia utente scalabile in grado di controllare il team di progettazione senza la necessità di avviare lo sviluppo.

Il pulsante è ora pronto per rispondere a un ammirate. Questo richiede l'aggiunta di OnGazeEnterEvent e OnGazeLeaveEvent, che indicano l'app sulle operazioni da eseguire quando l'utente sta guardando il pulsante, nonché quando l'utente è assente. A tale scopo, fare clic su btnLoad nuovamente nella gerarchia e quindi Aggiungi componente. Cercare OnGazeEnterEvent e aggiungerlo. Eseguire la stessa operazione per OnGazeLeaveEvent. Una volta che vengono aggiunti al btnLoad, è possibile aggiungere eventi. Nella finestra di ispezione, fare clic sul segno più per aggiungere un evento di OnGazeEnterEvent. Trascinare l'oggetto EventSystem dalla gerarchia per il campo oggetto. Le funzioni verranno caricati per EventSystem. Nell'elenco funzioni selezionare EventSystem | SetSelectedGameObject. Questo determina quale oggetto gioco ha lo stato attivo all'interno del mondo. Trascinare l'oggetto argomento btnLoad. Questo blocco di codice indica quando lo ammirate dell'utente che immette btnLoad, trigger, il sistema di eventi per impostare btnLoad come oggetto gioco selezionato, che verrà visualizzata l'indicazione dello stato di visualizzazione del pulsante del colore evidenziato.

Nell'evento OnGazeLeave, aggiungere un evento come evento OnGazeEnter con gli stessi parametri, ma anziché btnLoad come argomento per SetSelectedGameObject, creare un nuovo GameObject nella gerarchia di chiamata deselezionato e imposta che deve essere l'argomento. In questo modo deselezionata l'opzione per l'oggetto selezionato nel sistema di eventi quando lo ammirate l'utente lascia il pulsante. Non selezionato è un oggetto segnaposto non eseguire alcuna operazione ma ricevere lo stato attivo quando l'utente effettua lontano da un oggetto. Mediante questo oggetto gioco che è possibile che gli oggetti di giochi sono selezionati o deselezionate utilizzando l'Editor di Unity invece di scrivere codice. Figura 3 illustra la configurazione finale per btnLoad aspetto, con alcuni eventi.

Configurazione btnLoad
Figura 3 configurazione btnLoad

L'applicazione può ora rilevare in cui l'utente esegue la ricerca e fornire feedback all'utente. A questo punto si connettono la possibilità di selezionare il pulsante con un tocco di aria. Fare clic su fotocamera principale nella gerarchia. nuovamente, fare clic su Aggiungi componente nel controllo e cercare Manager movimento. Aggiungere il gestore movimenti fotocamera principale. Movimento Manager consente all'app di sapere quando è presente manuale dell'utente, riconoscere il movimento è in uso e reagire di conseguenza il movimento.

Per rendere un oggetto gioco reagire a un movimento, il componente OnSelectEvent all'oggetto di gioco. Fare clic su btnLoad e quindi Aggiungi componente, cercare l'evento selezionare e aggiungere il componente al pulsante. Gestore movimenti rileva quando un tocco o movimenti di modifica si verificano e utilizza GameObject.SendMessage("OnSelect") per attivare il componente eventi Doposelezione. Il problema è che un oggetto UnityEngine.UI.Button dispone già di un evento Doposelezione (utilizzato per attivare l'evidenziazione del pulsante), in modo esistenti quando si invia un GestureManager Doposelezione il messaggio al pulsante, il pulsante Doposelezione evento verrà attivato. Per evitare il conflitto di disporre di due eventi Doposelezione, rinominare il HoloToolkit OnSelectEvent OnTapEvent. All'interno del file OnSelectEvent.cs (in HoloToolkit | Input | Gli script), aggiornare il metodo Doposelezione per OnTap e rinominare la classe OnTapEvent.

Pulsanti di un'altra sfida presenti sono che l'evento OnClick non è un evento accessibile tramite l'editor. Per attivare un evento click, è necessario chiamare Invoke sull'evento Click. A tale scopo, creare un nuovo script nel progetto | Cartella degli script chiamato ButtonInteractable, come segue:

public class ButtonInteractable : MonoBehavior {
  public void Click()
  {
    var btn = GetComponent<UnityEngine.UI.Button>();
    btn.onClick.Invoke();
  }
}

Fare clic sull'oggetto btnLoad nella gerarchia e aggiungere il componente ButtonInteractable. Per il componente OnTapEvent, trascinare l'oggetto btnLoad e quindi, in funzione, selezionare ButtonInteractable | Fare clic su. Consente di configurare l'evento OnTap per attivare l'evento OnClick. In questo progetto non fare molto con l'evento click sul pulsante, ma in più complesso progetto click del pulsante eventi potrebbero attivare molte azioni. Con ButtonInteractable è possibile gestire il clic comportamento senza aggiornare l'evento OnTap.

Con il pulsante viaggiatori carico connesso a questo punto, compilare l'applicazione HoloLens e provare il servizio. Quando lo ammirate pulsante viaggiatori carico diventa verde. Perdere il pulsante restituisce al relativo stato normale. Utilizzando un tocco di aria caricherà i viaggiatori e disattivare il pulsante in modo l'utente non è possibile caricare nuovamente i viaggiatori. Ora si procederà all'aggiornamento di utenti che viaggiano per lavorare con lo ammirate e movimento.

L'aggiornamento di utenti in viaggio

L'oggetto modello viaggiatore è il prefab utilizzato per generare nuovi utenti che viaggiano nell'app. Nel modello sono due componenti di script, ovvero interazione viaggiatore e VR elemento interattivo. L'elemento interattivo VR riceve gli eventi trigger indica ad esempio su (quando l'utente sta guardando la voce interattiva), in uscita (quando l'utente è assente) e fare clic su (quando l'utente preme il pulsante di attivazione del dispositivo VR). Questi sono mappati direttamente allo ammirate immettere lo ammirate lasciare e scegliere. Alcune aggiunte componente rapida e utenti che viaggiano sarà pronto per essere utilizzato.

Nel modello di viaggiatore prefab aggiungere i componenti seguenti: OnGazeEnterEvent, OnGazeLeaveEvent e OnTapEvent. Come illustrato nella figura 4, per OnGazeEnterEvent, aggiungere l'oggetto TravelerTemplate con un'istruzione select funzione VRInteractiveItem | È stato superato. Eseguire la stessa operazione per OnGazeLeaveEvent selezionare VRInteractiveItem | La funzione. In questo modo gli eventi in e Out per l'elemento interattivo VR. Infine, su toccare evento, trascinare il prefab TravelerTemplate per l'oggetto. Per la funzione, selezionare VRInteractiveItem | Fare clic su. Questa configurazione rapida consente di VRInteractiveItem in movimento e lo ammirate HoloLens funzionalità.

Aggiunta di componenti e funzioni al modello di utenti in viaggio
Figura 4 l'aggiunta di componenti e funzioni al modello di utenti in viaggio

A questo punto, l'applicazione Contoso viaggio HoloLens ha funzionalità equivalenti all'app realtà virtuale. A questo punto è possibile sfruttare le funzionalità di HoloLens che la rendono diversa da un dispositivo VR. Per iniziare, si implementerà vocale in modo è possibile caricare i viaggiatori senza fare clic su un pulsante.

Voce come un altro meccanismo di Input

Nelle applicazioni tradizionali VR input è limitato allo ammirate, direzionale e un pulsante di attivazione (per un dispositivo come Samsung ingranaggio VR). Con HoloLens sono più altri tipi di input, ad esempio voice, che è possibile creare un'interfaccia molto naturale per gli utenti. La voce è uno strumento eccellente per fornire agli utenti di scelta rapida per le azioni. Invece di attivazione di un menu tramite un tocco air, gli utenti pratici che si desidera eseguire. Per rendere i comandi vocali attiva solo quando è selezionato un oggetto specifico del gioco o creare un comando universale per il quale il sistema è sempre alla ricerca.

Per iniziare a utilizzare vocali, se si desidera attendere all'utente di pronunciare "Viaggiatori carico", che consente di evitare la necessità di fare clic sul pulsante viaggiatori di carico. Un buon inizio informazioni sulle interazioni vocali è articolo HoloLens di Adam Tuliper (citato in precedenza), in cui si fornisce un'introduzione all'implementazione di comandi vocali. Per questa applicazione, il comando vocale verrà applicata mediante l'aggiunta di un nuovo componente per l'oggetto di gestione. Nella gerarchia, fare clic su Manager | Aggiungere componenti e quindi cercare KeywordManager. Dopo aver aggiunto il gestore della parola chiave, espandere il nodo, impostare riconoscimento Start = Avvio automatico in modo che il sistema di riconoscimento inizia con l'applicazione. Quindi espandere la sezione parole chiave e le risposte e impostare le dimensioni su 1 per aggiungere una parola chiave. Immettere "Carico viaggiatori" come la parola chiave, quindi connettere la funzione btnLoad e l'evento ButtonInteractable.Click. Questo comportamento emula il clic del pulsante quando l'utente indica che "Carico viaggiatori".

È possibile connettersi ai viaggiatori, anche le parole chiave. Fare clic su di prefab TravelerTemplate e disattivare l'evento scegliere. Aggiungere una funzione all'evento lo ammirate immettere per attivare l'evento scegliere e quindi aggiungere una funzione all'evento lo ammirate lasciare per disattivare l'evento scegliere. Il programma di installazione consente solo di TravelerTemplate con lo ammirate per visualizzare i dettagli di viaggiatore. Successivamente, aggiornare il gestore della parola chiave a una dimensione di due e rendere la nuova voce "Chi sei." Quindi trascinare il TravelerTemplate all'oggetto e selezionare la funzione come VRInteractiveItem | Fare clic su. Verrà aperta la finestra di dialogo informazioni viaggiatore.

Queste modifiche di configurazione secondaria in Unity consentono di abilitare vocale nell'app realtà misto. Come si pensa un'impostazione di office in cui possono essere utilizzato da utenti con mouse o tastiera, voice diventa un dispositivo di input potente per gli utenti con le mani complete.

Cosa fare successivamente

HoloLens e MR offrono numerose possibilità per le proprie applicazioni. In questo caso, esteso app VR con voice ma potrei ancora maggiori con suono spaziale e di mapping. Si supponga di comunicare agli utenti la propria applicazione di viaggio di associazione alla propria scrivania o having di viaggiatori a un utente se modificare piani di viaggio. Considerare come combinare i sistemi di input come movimento, lo ammirate e vocali per fornire un'interfaccia rich, divertente se combinato con mapping e suono spaziale.

Come può notare, VR App può eseguire la migrazione a App MR senza quantità di codice a causa della natura di configurazione di Unity. In questo modo gli sviluppatori di tempo e denaro durante la conversione le proprie applicazioni da una piattaforma mobile VR a quelle dell'utente con HoloLens. Richiedere ciò che si è iniziato a qui ed esplorare ulteriormente l'Academy HoloLens per applicare anche altre funzionalità di HoloLens la tua prossima applicazione MR.

Aggiornamento della libreria di oggetti JSON

A seconda della versione della libreria di oggetti JSON in uso, potrebbe essere necessario aggiornare il file JSONTemplate.cs. Nella cartella del progetto passare a JSON/JSONTemplate.cs e aggiornare riga 19 per le operazioni seguenti:

FieldInfo[] fieldinfo = obj.GetType().GetFields() 
  as System.Reflection.FieldInfo[];

Questo aggiornamento consente di compilare il progetto da eseguire su di HoloLens.


TIM Kulpè il principale engineer presso bwell in Baltimore, MD.  È un Web, sviluppo di app piattaforma Windows mobile e universali, così come autore, copia, dad e "wannabe Mad Maker scienziato." Trovarlo su Twitter: @seccode o tramite LinkedIn: linkedin.com/in/timkulp.

Grazie al seguente esperto tecnico Microsoft per la revisione dell'articolo: Adam Tuliper