Agosto 2018

Volume 33 numero 8

Il presente articolo è stato tradotto automaticamente.

HoloLens - misto Fluent Design e realtà

Dal Tim Kulp | Agosto 2018

Microsoft sta investendo nello sviluppo della realtà mista (MR) poiché HoloLens è stato introdotto nel 2014 e alla conferenza Build 2018 nel mese di maggio, presenta un'ampia gamma di informazioni eccezionali relative a nuove funzionalità nell'ambiente di sviluppo di Unity per progetta meglio MR, nonché dell'interfaccia utente procedure consigliate. In questo articolo, è possibile sfruttare le indicazioni tecniche presentate in fase di compilazione per mostrare come sistema Fluent Design Microsoft è utilizzabile per creare esperienze coinvolgenti in MR, in particolare, un'app di HoloLens che consente di comunicare tramite pittogramma gli elementi figlio non verbali.

Sistema Fluent Design Microsoft Usa tre principi fondamentali per garantire incredibili esperienze. Sono:

Adaptive: MR devono colmare e mingle le reali e i componenti digitali per creare un'esperienza olistica. Di conseguenza, l'interfaccia utente deve essere consci dell'ambiente, durante l'ottimizzazione (ma non sostituisce) dell'utente reale esperienza.

Empatia: Progettazione empatia in MR è incentrato sulla comprensione l'intenzione dell'utente e alle esigenze dell'esperienza delle app. Ad esempio, non tutti gli utenti possono usare le mani per movimenti, in modo che i comandi vocali e clicker HoloLens forniscono input tramite cui vengono empatia in base alle esigenze dell'utente.

Accattivanti: App bellissime sono un'importante sfida in MR. Una finestra di progettazione e gli sviluppatori, è necessario estendere l'esperienza reale senza sovraccaricato. Sono necessari un'attenta pianificazione e gli strumenti giusti.

Unity è lo strumento più comune per la creazione di esperienze di MR. In base a Unity, il 90% delle App HoloLens e MR vengono compilati con l'ambiente di sviluppo. Sebbene Unity ha un proprio sistema di interfaccia utente, non con facilità la conversione viene alla progettazione Fluent. Il team Microsoft ha creato il Toolkit di realtà mista (bit.ly/2yKyW2r) e Lab di progettazione di realtà mista (bit.ly/2MskePH) strumenti, che consente agli sviluppatori di compilare UXes eccellente tramite il configurazione dei componenti. Usando questi progetti, gli sviluppatori possono evitare di lavoro di progettazione grafica complesso e concentrarsi sulle funzionalità dell'app di. Progettazione Lab sia il Toolkit di realtà mista e sono documentate con molti esempi di codice. In questo articolo usare il pacchetto di Unity Toolkit di realtà mista 2017.4.0.0 per compilare un'interfaccia e illustrano come eseguire il pull dei vari componenti insieme univoca e coesiva un'interfaccia personalizzata.

Prima di configurare l'ambiente di Unity, assicurarsi di completare l'esercitazione introduttiva dal Toolkit di realtà mista (bit.ly/2KcVvlN). Per questo progetto, sto usando la build più recente (a partire dalla stesura di questo articolo) di Unity 2018.2.08b. Con Unity 2018.2 richiesto un aggiornamento per il Toolkit di realtà mista, ma l'aggiornamento non abbia causato eventuali conflitti per la funzionalità implementata in questo articolo.

Progettare l'interfaccia utente per MR

Un'eccellente esperienza di MR inizia con un flusso dell'interfaccia utente effettiva. A differenza delle App per dispositivi mobili o Web, l'interfaccia utente di un'app di MR ha una grande sconosciuto: l'ambiente. In fase di sviluppo Web è necessario essere consci della schermata funzionalità di risoluzione e browser, all'interno di sviluppo per dispositivi mobili le funzionalità di telefono e densità di pixel. Ma in MR estremamente importante della natura variabile di ambiente circostante fisici e ambiente dell'utente.

Indicando come destinazione di un ambiente specifico è possibile ottimizzare per lo spazio fisico e per le funzionalità specifiche del dispositivo in uso. Nella mia app di esempio, sono progettazione per un'aula in cui agli studenti userà l'app con i docenti. Si tratta di un ambiente ben illuminato e relativamente quiet, che è molto diverso da uno schema interno club warehouse o della notte. Pianificare l'interfaccia utente in base all'ambiente.

L'ambiente è non solo esterno all'utente, ma anche basato su dalle funzionalità di dispositivo dell'utente. Quando si pensa a mio dell'interfaccia utente, è necessario essere consapevoli dei possibili controlli da usare. Pensando di ambiente degli utenti e le funzionalità, comandi vocali verranno non giocano un ruolo chiave dovuto alla mancanza di comunicazioni verbali. I movimenti sarebbe limitati come gli utenti di destinazione potrebbe avere anche le sfide di competenza motor correttamente. Ciò comporta ai pulsanti di grandi dimensioni e gli utenti che strumenti come il clicker HoloLens selezionare i pulsanti.

Con tali presupposti, devo selezionare come layout l'interfaccia utente per una progettazione elegante. Se sei uno sviluppatore Web con Bootstrap (o simile framework dell'interfaccia utente), si ha familiarità con compilazione alla griglia. Nella piattaforma UWP, si dispone di controlli di layout, come StackPanel, della griglia e area di disegno. Nel Toolkit di realtà mista è necessario il componente di raccolta di oggetti.

Il componente di raccolta di oggetti è reperibile nel Toolkit di realtà mista in asset | ESPERIENZA UTENTE | Gli script | Raccolta di oggetti. Per usarla, creare un oggetto gioco vuoto nella scena. Assegnare un nome di oggetto gioco vuoto "MainContainer" e quindi aggiungere il componente di raccolta di oggetti per l'oggetto gioco vuoto. A scopo di test, aggiungere un cubo come oggetto figlio per il MainContainer. Set di scalabilità del cubo sia pari a 0,5 x, 0.2y, 0.1z in modo analogo un piccolo rettangolo. A questo punto duplicato tale cubo otto volte per avere un totale di nove cubi come oggetti figlio per il MainContainer.

Una volta aggiungono i cubi, fare clic sul pulsante Aggiorna raccolta del controllo per applicare il layout della raccolta di oggetti agli oggetti figlio. Per impostazione predefinita, la raccolta di oggetti viene utilizzato l'area di tipo del normale. Per l'interfaccia utente, voglio la raccolta per eseguire il wrapping intorno all'utente di sentirsi più coinvolgenti. A tale scopo, aggiornare il tipo di area per la raccolta di oggetti alla sfera del controllo. A questo punto tutti i cubi dovrebbe essere visualizzato come illustrato nella figura 1. Raccolte di oggetti disponibili più tipi di area per consentire l'interfaccia utente coinvolgere l'utente per uno scenario specifico. In questo articolo vi mostrerò come utilizzare un diverso tipo di area per raggiungere un obiettivo diverso.

L'aggiornamento del tipo di superficie alla sfera
Figura 1, l'aggiornamento del tipo di superficie alla sfera

Ciò che stiamo creando?

Gli elementi figlio non verbali hanno libri del pittogramma che usano con un insegnante per esprimere le proprie esigenze. Ogni icona è una parola o frase compilati per docenti e figlio insieme. In questo articolo, vi mostrerò come creare un'esperienza di MR per sfruttare il libro in HoloLens, in modo che gli studenti possono compilare una frase per comunicare con i docenti.

Inizierò con la raccolta di oggetti per aggiungere una serie di pulsanti per l'utente di selezionare questa opzione per creare una frase. I pulsanti sarà il pittogramma. Iniziare aggiungendo una risorsa | Cartella di dati nella finestra del progetto. All'interno della cartella di dati crea un file words.json per rappresentare le parole nell'app. Il codice di esempio Usa un file di parole brevi per semplificare le operazioni.

Nella finestra del progetto, creare una cartella di script e creare un nuovo script c# denominato WordLoader all'interno di tale cartella. Questo componente legge il file words.json e lo converte in una raccolta di oggetti di Word in c#. Nell'ambiente di laboratorio di progettazione sono presenti progetti di esempio che illustrano l'esempio completato di lettura dei dati da un file e visualizzarli in un'esperienza di MR. Ho adattato alcune il codice dal progetto per evitare che l'esempio conciso e familiari, come illustrato nella tabella periodico figura 2. Consulta il progetto di periodo nella tabella nel bit.ly/2KmSizg per altre caratteristiche e funzionalità partendo da un file di dati di lettura e associando i risultati a una raccolta di oggetti.

Figura 2 lo Script WordLoader

[System.Serializable]
class Word
{
  public string category;
  public string text;
  public string image;
}
[System.Serializable]
class WordsData
{
  public Word[] words;
  public static WordsData FromJSON(string data)
  {
    return JsonUtility.FromJson<WordsData>(data);
  }
}

Successivamente, scrivere il codice illustrato nella figura 3 per il componente WordLoader. Questo componente consente di caricare le parole da file JSON e li aggiunge come pulsanti per la raccolta di oggetti. Nel componente sono disponibili due variabili pubbliche: Elemento padre è la raccolta di oggetti che contiene le parole e WordPrefab è il prefab utilizzato per rappresentare le parole nell'esperienza di MR.

Figura 3 caricando parole dal File JSON

public class WordLoader : MonoBehaviour
{
  public ObjectCollection Parent;
  public GameObject WordPrefab;
  private void OnEnable() {
    if(Parent.transform.childCount > 0)
      return;
    TextAsset dataAsset = Resources.Load<TextAsset>("Data/words");
    WordsData wordData = WordsData.FromJSON(dataAsset.text);
    foreach (Word w in wordData.words) {
      GameObject newWord = Instantiate<GameObject>(WordPrefab, Parent.transform);
      newWord.GetComponent<CompoundButtonText>().Text = w.text;
      newWord.GetComponent<CompoundButtonIcon>().OverrideIcon = true;
      string iconPath = string.Format("Icons/{0}", w.image);
      newWord.GetComponent<CompoundButtonIcon>().iconOverride =
        (Texture2D)Resources.Load<Texture2D>(iconPath);
    }
    Parent.UpdateCollection();
  }
}

Una volta per l'elemento padre vengono caricate tutte le parole, la chiamata a Parent.UpdateCollection organizzerà pulsanti appena creati in base al layout del componente di raccolta di oggetti. Ogni volta che si modifica una proprietà nel componente della raccolta di oggetti, chiamare Aggiorna raccolta per assicurare che tutti gli oggetti gioco vengono aggiornati correttamente.

Ora nell'Editor di Unity creare un oggetto di gioco vuoto chiamato Managers, che contiene tutti i componenti di utilità per la scena. Aggiungere il componente WordLoader ai responsabili, quindi impostare MainContainer padre. Infine, impostare WordPrefab usare il prefab pulsante Holographic (trovato nell'HoloToolkit | ESPERIENZA UTENTE | Prefabs | Pulsanti). Questi pulsanti implementano concetti relativi alla progettazione Fluent, come l'uso di luce per visualizzare lo stato attivo e l'azione. Quando l'utente visualizza il pulsante evidenziato, saprà quanto selezionato.

A questo punto l'esecuzione dell'app consente di creare pulsanti per ogni parola nel file di dati di word (vedere figura 4). I pulsanti Holographic circonderà l'utente in una sfera. In modalità di riproduzione, è possibile aggiornare il tipo di area dell'insieme di oggetti per sperimentare altri layout. Regolare la spaziatura tra celle e i conteggi delle righe per trovare la combinazione ideale per la tua esperienza. È necessario Aggiorna raccolta dopo ogni modifica per visualizzare le modifiche nell'editor.

Visualizzazione di parole come pulsanti Holographic della raccolta di oggetti
Figura 4 visualizzando le parole come pulsanti Holographic della raccolta di oggetti

Mantenersi aggiornato rispetto all'utente

Dopo aver compilato l'insieme di oggetti di impostarlo su coordinate specifiche del mondo. Quando l'utente sposta, la raccolta di oggetti viene mantenuta in cui è stato originariamente creato. Per una classe questo non funziona perché gli elementi figlio, non rimangono sempre alla propria scrivania. È necessario aggiornare l'interfaccia utente per mantenere l'utente durante lo spostamento nel mondo reale. In Progettazione Fluent è necessario essere adattivo nell'ambiente, anche quando tale persona sposta e modifica l'ambiente circostante.

In occasione della conferenza Build 2018, una sessione tecnica ("Creazione di applicazioni su larga scala di Warehouse per HoloLens, bit.ly/2yNmwXt) illustrati i problemi con la creazione di App per gli spazi di dimensioni maggiori rispetto alla parte superiore di una tabella. Queste vanno da mantenere i componenti dell'interfaccia utente visibile quando bloccata dagli oggetti, ad esempio un carrello elevatore in un data warehouse per mantenere l'interfaccia utente di accedere come utente non si sposta uno spazio per i progetti, ad esempio progettazione interna. Il Toolkit di realtà mista offre alcuni strumenti per risolvere alcuni dei problemi con il Risolutore di sistema.

Il sistema Risolutore consente gli oggetti gioco regolare le dimensioni o la posizione in base al movimento dell'utente tramite il mondo. In Unity, è possibile visualizzare il funzionano di alcune risolutori nella scena usando l'editor. Per aggiungere un Risolutore, selezionare l'oggetto MainContainer e aggiungere il componente SolverBodyLock (trovato nell'HoloToolkit | Le utilità | Gli script | Risolutori). Il componente SolverBodyLock consente la sfera di pulsanti per rimanere con l'utente, poiché quando l'utente sposta in tutto lo spazio di MainContainer sposta con essi. Per verificarlo, eseguire l'app nell'editor e spostare lo spazio del mondo usando WASD o la freccia. Si noterà che Avanti, indietro e spostamenti affiancata per mantenere il MainContainer con l'utente. Se ruoti la fotocamera, il MainContainer non seguono l'utente.

Per rendere l'interfaccia utente di seguire l'utente quando egli ruota nello spazio, usare il SolverRadialView, che, per impostazione predefinita, mantiene l'oggetto solo all'interno di visualizzazione periferici dell'utente. Quanta parte dell'oggetto è visibile, è possibile aumentare o diminuire in base alle impostazioni del componente. In questo caso d'uso, non voglio l'interfaccia utente di ricerca all'utente quando è attiva, in modo che il SolverBodyLock è sufficiente. Mantiene l'elenco dei pulsanti con l'utente, ma non sempre nella loro viso.

Gestione delle dimensioni

Nell'app prevede che gli utenti per spostarsi all'interno di un'impostazione in aula. In MR, esattamente come le situazioni reali, quando le persone esce da un oggetto, tale oggetto viene visualizzato più piccolo. Questo crea problemi: Uso sguardo per componenti dell'interfaccia utente di destinazione che si trovano in oggetti distanti può essere difficile e le icone possono essere difficili da distinguere da a portata di mano. Il Risolutore ConstantViewSize risolve questo problema aumentando il componente dell'interfaccia utente o verso il basso in base alla distanza dell'utente.

Per questa app di esempio si intende aggiungere un componente che consente agli utenti di compilare le frasi. Ciascuna premuto del pulsante nel MainContainer aggiunge per la frase. Ad esempio, se l'utente desidera ad esempio, "Sono fame", egli verrebbe fare clic su "I" pulsante, quindi sul pulsante "am", quindi "fame" pulsante. Ogni clic aggiunge una parola nel contenitore di frase.

Creare un nuovo oggetto gioco vuoto nella gerarchia e chiamarlo frase. Aggiungere il componente di raccolta di oggetti alla frase, impostare il tipo di area piano e le righe su 1. Ciò consente di creare un'interfaccia semplice che interrompa nelle righe per il contenuto. Per il momento, aggiungere un cubo per l'oggetto gioco frase, in modo che è possibile visualizzare la dimensione della costante Risolutore in azione. In un secondo momento verranno aggiunte le parole da pulsanti. Set di scalabilità del cubo a x = 1.4, y = 0,15, z = 0,1. Se si avvia l'app ora e spostarsi all'interno dello spazio, il cubo bianco verrà compatta e aumento delle dimensioni quando si spostano più lontano away e più vicina a esso.

Per bloccare dimensione visiva del cuboid, aggiungere il componente SolverConstantViewSize all'oggetto frase. La scala per il componente può essere vincolata anche usando le impostazioni di intervallo di scala minima e massima, in modo che è possibile controllare le dimensioni desiderate al componente dell'interfaccia utente di aumentare o ridurre e a quali distanze, ciò consente di ridimensionare i componenti da una tabella in alto, a una classe , a un data warehouse.

Sono disponibili altre risolutori nel Toolkit di realtà mista, inclusi Momentumizer e nell'area campi magnetici. Consiglia di consultare il Risolutore di sistema e ampliare la propria esperienza MR con un'interfaccia utente che può funzionare con l'utente nello spazio del mondo reale (bit.ly/2txcl4c).

La frase e il destinatario

Per abilitare i pulsanti con MainContainer per connettersi con l'oggetto frase, implementare un ricevitore che riceve gli eventi dai pulsanti di sia selezionati il MainContainer e aggiunge il contenuto di tale pulsante per la frase. Utilizzando l'oggetto si e modello ricevitore incorporato in Toolkit di realtà mista, ci si connette i pulsanti prefab trovato nel HoloToolkit | ESPERIENZA UTENTE | Cartella pulsanti è semplice.

Creare un nuovo script c# denominato ricevitore nella cartella Scripts del progetto, come illustrato nella figura 5. Modificare lo script da cui ereditare Monobehaviour per InteractionReceiver. Creare una variabile pubblica per includere un riferimento all'oggetto gioco frase e quindi implementare il metodo di override per InputDown rispondere a un utente fare clic su azioni sui pulsanti Holographic.

Figura 5 di Script del destinatario in c#

public class Receiver : InteractionReceiver
{
  public ObjectCollection Sentence;
  protected override void InputDown(GameObject obj, InputEventData eventData)
  {
    switch (obj.name)
    {
      default:
        GameObject newObj = Instantiate(obj, Sentence.gameObject.transform);
        newObj.name = "Say" + obj.name;
        Sentence.UpdateCollection();
        break;
    }
  }

All'interno del metodo InputDown, creare un'istruzione switch che controlla la proprietà name dell'oggetto gioco obj. Per ora, creare la condizione predefinita, che si verifica indipendentemente dal nome dell'oggetto gioco. All'interno dell'istruzione predefinita, si accetta l'oggetto chiama e si crea una nuova istanza di tale sotto l'oggetto gioco frase. Ciò crea una nuova istanza del pulsante della frase raccolta di oggetti senza registrarlo con il destinatario. Se si preme il pulsante nell'oggetto frase, non accadrà nulla. Prima di eseguire test, rimuovere il segnaposto cuboid bianco in modo da visualizzare i pulsanti visualizzati sul piano di raccolta di oggetti.

Per connettere i pulsanti nella finestra di MainContainer al destinatario, è necessario poche righe di codice aggiunto per il WordLoader. Come parole di caricamento dell'app, ciascuno viene registrato come un Interactable per il ricevitore. Interactables corrispondono all'elenco di oggetti giochi usando il componente InteractableObject che il destinatario risponde ai quando si verifica un evento. All'interno del metodo onEnable WordLoader, aggiungere il codice seguente direttamente sotto il controllo childCount:

var receiver = GetComponent<Receiver>();
if (receiver == null)
  return;

Questo codice verifica per assicurarsi che sia presente un ricevitore. Quindi nel ciclo foreach per le parole, aggiungere il codice seguente dopo aver caricato l'icona del pulsante:

receiver.Registerinteractable(newWord);

Registerinteractable aggiunge l'oggetto gioco all'elenco di interactables per il ricevitore. A questo punto facendo clic sui pulsanti Holographic nel MainContainer attiva il ricevitore per eseguire il metodo InputDown e crea una copia del pulsante su cui è stato fatto clic.

Con alcuni secondaria riconfigurazione della raccolta di oggetti MainContainer cella dimensione e il posizionamento, si otterrà un risultato simile all'immagine illustrato nella figura 6.

MainContainer e raccolte di oggetti frase dopo l'aggiornamento
Figura 6 MainContainer e raccolte di oggetti frase dopo l'aggiornamento

Mentre si sono usando i pulsanti Holographic in questo esempio il componente si può essere applicato a qualsiasi elemento da una trama al testo personalizzata. Fare spazio alla creatività consentono di immaginare straordinarie interfacce. È importante ricordare che è uno degli obiettivi di MR unire i mondi digitali e fisici in modo che interagiscono tra loro.

Uso di sintesi vocale

Nell'ambito della progettazione Fluent è in corso empatia in base alle esigenze degli utenti. In questo esempio, si sta abilitando il quelli carente verbale vocale per esprimere autonomamente. A questo punto è necessario usare sintesi vocale per pronunciare a voce alta ciò che l'utente è compilato in suo frase. Il HoloToolkit offre un componente eccellente per eseguire questa operazione con quantità minima di codice o configurazione. Se non si usa un HoloLens, vedere l'articolo di MSDN Magazine, "Con Cognitive Services e realtà mista" (msdn.com/magazine/mt814418), per informazioni su come usare sintesi vocale tramite servizi cognitivi di Azure.

Per iniziare a usare la sintesi vocale da testo, aggiungere un'origine Audio al progetto di gerarchia. Questo è utilizzato dal componente di sintesi vocale per generare audio per gli utenti di ascoltare. A questo punto aggiungere il componente di sintesi vocale (trovato nell'HoloToolkit | Le utilità | TextToSpeech) per l'oggetto gioco responsabili. Usare l'oggetto gioco responsabili come la home page per tutti i metodi di utilità (destinatario, sintesi vocale) per centralizzare gli eventi e ciò che accade con gli eventi. In questo caso il ricevitore utilizzerà il componente di sintesi vocale per pronunciare la frase usando la stessa configurazione di ricevitore, che è necessario per l'aggiunta di parole della frase. Configurare il componente di sintesi vocale per utilizzare l'origine Audio appena creato, selezionarlo nella finestra di ispezione.

Il ricevitore, voglio rilevare se esistono eventuali parole nella frase e quindi, aggiungo un pulsante che visualizza il messaggio della frase. Aggiungere una nuova variabile pubblica di oggetto gioco chiamata SayButton al componente ricevitore.

public GameObject SayButton;

Questo sarà il prefab usato come pulsante con i comandi vocali. Aggiungere il seguente se all'interno di blocco predefinito dell'istruzione switch istruzione prima di aggiungere il nuovo oggetto per la frase:

if (Sentence.transform.childCount == 0)
{
  GameObject newSayButton = Instantiate(SayButton, Sentence.transform);
  newSayButton.name = "Say";
  newSayButton.GetComponent<CompoundButtonText>().Text = "Say: ";
  GetComponent<Receiver>().Registerinteractable(newSayButton);
}

In questo caso quando non ci sono elementi figlio nell'oggetto frase, aggiungere il pulsante Say prima che eventuali altri pulsanti. In questo modo, ad esempio all'estrema sinistra dell'oggetto frase per tutte le frasi. Successivamente, creare una nuova istruzione case per rilevare il pulsante di pronunciare in base al nome del commutatore. Tenere presente che il commutatore è basato sul obj.name e quando è stato creato questo pulsante impostare il nome su "Say." Il codice è il seguente:

case "Say":
  StringBuilder sentenceText = new StringBuilder();
  foreach (CompoundButtonText text in
    Sentence.GetComponentsInChildren<CompoundButtonText>())
  {
    sentenceText.Append(text.Text + " ");
  }
  TextToSpeech tts = GetComponent<TextToSpeech>();
  tts.StartSpeaking(sentenceText.ToString());
  break;

In questo caso rileva pulsante con i comandi vocali in base al nome e quindi scorre in ciclo tutti i figli della frase per compilare una stringa di parole per il componente TextToSpeech dire come una frase. Quando l'utente ha terminato la creazione di un'istruzione, è possibile premere il pulsante Say per esprimere il suo istruzione. Per semplicità non aveva è implementare il gestore di sintesi vocale del HoloToolkit (bit.ly/2lxJpoq), ma è utile evitare situazioni di un utente preme ripetutamente Say, causando la sintesi vocale componente tenta di veicolare più operazioni contemporaneamente.

Conclusioni

Uso di Fluent Design con MR è una scelta naturale. Strumenti come il Toolkit di realtà mista e laboratori di progettazione di realtà mista sono springboards eccellente per creare un'esperienza adattivo, empatia e accattivanti. In questo articolo ho spiegato come implementare alcune delle esperienze illustrate presso Build 2018 per MR. Usando le raccolte di oggetti come uno strumento di layout, il Risolutore di sistemi per mantenere l'interfaccia utente con l'utente che passano attraverso lo spazio, e quindi ci si connette l'esperienza con un ricevitore per la gestione centralizzata degli eventi, viene mostrato come creare rapidamente un'app di MR.

Utilizzare gli esempi dal Toolkit di realtà mista, è possibile eseguire questa app di esempio ulteriormente con funzionalità e nuove opzioni di interfaccia. Rivedere le sessioni di MR dalla Build 2018 per ottenere ulteriori idee su come compilare eccezionali esperienze che si integrano i mondi digitali e fisici.


TIM Kulpè director of una tecnologia emergente presente su macchine in Baltimora, MD. Oggi è una realtà mista, sviluppatore di app di intelligenza artificiale e cloud, nonché autore, pittore, dad e "wannabe l'autore dell'analista corsa". Trovarlo su Twitter: @tim_kulp o tramite LinkedIn: linkedin.com/in/timkulp.

Grazie al seguente esperto tecnico per la revisione dell'articolo: Verrà (Balti virtuale)


Discutere di questo articolo nel forum di MSDN Magazine