Condividi tramite



Settembre 2016

Volume 31 Numero 9

Il presente articolo è stato tradotto automaticamente.

Unity - Creazione di applicazioni di realtà virtuale

Da Tim Kulp

Virtuale realtà fornisce un'opportunità unica e verifica per gli sviluppatori di applicazioni. Da un lato, non c'è possibilità di creare esperienze coinvolgenti tramite il paradigma UX 2D esistente. D'altra parte, esiste la sfida per compilare una straordinaria esperienza nella VR di più di una visualizzazione 3D di una schermata 2D. Fortunatamente, alcuni concetti di base di sviluppo di applicazioni e progettazione dell'interfaccia utente sono simili, ad esempio creare una visualizzazione master-details, ottenere input da parte dell'utente e la comunicazione tra le applicazioni tramite i servizi. In questo articolo verrà esaminato dal contesto di creazione di un'applicazione di business in VR in modo da visualizzare come avviare App VR questi argomenti.

Perché VR?

È opportuno immettere lo sviluppo di app VR con la disponibilità di eccellenti strumenti quali Unity e marketplace VR relativamente ridotto. Considerare lo spazio di mercato app mobile corrente. Esistono milioni di App e dispone di nuove app grandi quantità di concorrenza. Lo spazio di mercato VR è ancora pochi, tuttavia, rendendo più semplice evidenziare e fatti notare. Le dimensioni del mercato, vi è una grande fame attualmente per il contenuto VR con adottato. Come creare applicazioni in questo spazio è ancora un problema di nuovo, con le procedure consigliate in continua evoluzione. Consente di adottato in fase di sviluppo VR futuro della piattaforma. È un momento interessante in VR.

Creazione di applicazioni per dispositivi VR, ad esempio Samsung ingranaggio VR e cartone Google è un punto di ingresso ideale per gli sviluppatori iniziare a creare il contenuto per i canali di distribuzione a basso costo. Se compilato con una mente verso realtà misto, VR App può essere trasferita al HoloLens perché gli strumenti sono uguali e il contenuto può essere lo stesso. L'unica differenza è il codice per eseguire attività (ad esempio lo ammirate vs. Raycast, che verrà esplorata più avanti in questo articolo) e utilizzo di alcune delle funzionalità HoloLens univoca, ad esempio riconoscimento vocale, mapping spaziali e movimento. Con qualche ricerca e sperimentazione, è possibile convertire l'app VR a un'app HoloLens.

Non analizzerò in dettaglio completo su come configurare un progetto VR. In alternativa, è consigliabile esplorare il progetto Unity VR esempi in Unity Asset Store (bit.ly/1qYLBX9). Il progetto creato in questo articolo verrà avviata da zero, ma verrà utilizzati script dal progetto Unity VR esempi per riutilizzare il codice esistente per le attività standard (come la creazione di un oggetto interattivo). È consigliabile creare un nuovo progetto Unity e importando gli esempi di VR Unity per riferimento all'esterno del progetto che verrà compilato con questo articolo. Esempi di VR Unity dispone di molti contenuti di qualità, ma è progettato per essere un'applicazione autonoma e richiede alcune configurazioni aggiuntive per l'esecuzione di una scena all'esterno inclusi automaticamente. Tenere aperta e disponibile Unity VR esempi poiché dispone di alcuni script che verrà utilizzato in questo progetto. Per questo articolo, utilizzerò Unity 5.3 con gli strumenti di Android abilitati in modo che è possibile sviluppare l'app per il dispositivo Samsung ingranaggio VR.

Contoso viaggio

Viaggio di Contoso è un sistema di viaggi aziendali che consente di visualizzare le prenotazioni per i membri del team un amministratore di viaggio. Gli amministratori di viaggio visualizzare viaggiatori da aeroporto, cercare una specifica città e visualizzare i dettagli delle corse un bagagli. Nell'app, si desidera creare una ricca esperienza che mostra la relazione spaziale di utenti che viaggiano per Contoso. In genere si tratterà di un'applicazione line-of-business, mobile o tramite agli utenti tramite un browser Web. Per questo articolo, verrà creato l'app nel VR per concedere agli utenti un'esperienza completa, utilizzare gli avatar per rappresentare i viaggiatori e Mostra in cui gli utenti sono reciproco nello spazio 3D.

VR apre diverse possibilità per un'applicazione simile al seguente. Dal punto di vista dell'amministratore viaggio VR può essere un'esperienza più personale, impegnati avatar i bagagli anziché visualizzare solo i punti in una mappa o un nome in un elenco. Per utenti in viaggio, VR può concedere a utenti che viaggiano un'anteprima dell'ufficio che sta visitando o siti per visualizzare in una posizione remota. L'idea consiste nel creare un'esperienza coinvolgente che gli utenti possono ottenere.

Iniziare

È opportuno preparare il progetto in un'esperienza VR mobile. Per iniziare, creare un nuovo progetto Unity 3D denominato ContosoTravelVR. In primo luogo, modificare gli intervalli del mondo a un frequenza fotogrammi più lento. Nella finestra di modifica | Le impostazioni del progetto | Tempo di controllo, impostare Timestep fissa = 0.01666666, set massimo consentito Timestep = 0.1666666 e alla scala cronologica = 1. Massimo consentito Timestep rallenta ora fisica di Unity in modo che i calcoli fisica non incidono sulle frequenza fotogrammi. Mentre fisica tempo e frequenza fotogrammi non sono direttamente correlate, la potenza della CPU necessaria per il calcolo fisica può creare problemi con l'elaborazione di frame. L'impostazione massima consentita Timestep pone un limite massimo per quanto tempo da dedicare fisica aggiornamenti. Tenere presente che in un mondo VR mobile, il dispositivo è disegnare due immagini di ogni frame: uno per l'occhio a sinistra e uno per l'occhio destro. Calcoli complessi, elaborazione a velocità più elevate frame possono causare un dispositivo, ad esempio un telefono, per ottenere i frame non sincronizzato, causando ogni occhio a qualcosa di diverso. Ciò causa disorientation e nausea degli utenti. Ovviamente, questo è fondamentale per evitare di un'esperienza utente eccezionale. Evitare tutto ciò che potrebbe avere un impatto sulle prestazioni, ad esempio i conteggi poligono elevata per gli oggetti, a esecuzione prolungata script o bloccare il thread.

Successivamente, aggiornare le impostazioni di Windows Media Player VR mobile. A tale scopo, passare alla modifica | Le impostazioni del progetto | Windows Media Player e selezionare la sezione altre impostazioni. In questa sezione è disponibile un'impostazione denominata virtuale realtà supportata. Selezionare la casella per assicurare che tutto il mondo è riconosciuto come app VR. L'oggetto principale della fotocamera che esiste già in Unity a una fotocamera VR verrà convertiti automaticamente in questa impostazione.

Ora che l'applicazione è impostata, impostare la scena. Nella finestra gerarchia, aggiungere un cubo con la scala di x = 10, y = 0,1 e z = 10. Reimpostare la posizione del cubo da x = 0, y = 0 e z = 0 per allineare al centro del cubo bidimensionale in tutto il mondo. Questo fornirà un piano per il mondo, che offre agli utenti un senso di spazio e la messa a terra, nonché una posizione per le entità nel mondo in cui supporto. Come nelle applicazioni 2D, è necessario assegnare all'utente un senso di in cui si verificano il contenuto e le interazioni dell'app. Questo consente agli utenti di orientarsi nell'app. Per ContosoTravel, tutte le azioni si verificano entro i limiti dell'oggetto floor.

In questo ambiente, è necessario un oggetto che eseguirà il marshalling di dati nell'intera applicazione. Creare un oggetto di gioco vuoto nella finestra gerarchia e rinominare l'oggetto TravelerManager. Questo oggetto è l'origine di tutti i dati di viaggio all'interno dell'app. Mentre si seleziona l'oggetto di gioco TravelerManager, fare clic su Aggiungi componente | Nuovo Script. Nome dello script TravelerManager e fare clic su Crea e Aggiungi. Si creerà un nuovo script per gestire la logica di TravelerManager.

Come un'applicazione di viaggio, è necessario vedere utenti in viaggio nel mondo. A tale scopo, aggiungere un nuovo oggetto di gioco alla gerarchia e denominarla TravelerTemplate. Questo sarà l'oggetto che viene visualizzato per ogni viaggiatore rappresentati nel sistema. Se si ha familiarità con prefabs, utilizzare un carattere che è stato progettato o un elemento dall'archivio di Asset. Utilizzare per l'applicazione, alcuni caratteri limitati poli che ho trovato nell'archivio di Asset che verrà assegnato a un aspetto divertente e del tutto il mondo. Qualsiasi oggetto gioco funzionerà per il TravelerTemplate, ovvero un prefab, un cubo, una sfera e così via. Dopo aver aggiunto il TravelerTemplate, disabilitare l'oggetto di gioco, fare clic sulla casella di controllo accanto al nome dell'oggetto del gioco nella finestra di controllo. In questo modo il TravelerTemplate scompaiono dallo schermo.

Infine, aggiungere gli script seguenti dal progetto Unity VR esempi al progetto: VREyeRaycast, VRInput, VRInteractiveItem e tratteggiato. Spiegherò lo scopo di questi script esattamente come è possibile usarli in tutto l'articolo, ma essi verrà risparmiare me di codifica in un secondo momento nell'app.

Configurazione della classe TravelerManager

In Unity, fare doppio clic sullo script TravelerManager per aprirlo in Visual Studio o MonoDevelop. Aggiungere il codice in Figura 1 al componente.

Figura 1 il componente Script TravelerManager

public GameObject TravelerTemplate;
public List<Traveler> TravelerList;
void Awake () {
  TravelerList = new List<Traveler>();
}
public void LoadTravelers() {
  try
  {
    // Add GetTravelers here
  }
  catch(Exception ex)
  {
    Debug.Log(ex.ToString());
  }
}

Il TravelerTemplate conterrà il Prefab utilizzato per creare i viaggiatori sullo schermo. Tenere presente che TravelerTemplate può essere qualsiasi oggetto gioco: un cubo, una sfera, un carattere prefab e così via. Inoltre, contrassegnando questa variabile pubblica, è possibile impostare il valore negli strumenti di progettazione Unity, che consentono il controllo di team di progettazione del modello viaggiatore senza dover riscrivere il codice di TravelerManager. È inoltre possibile creare due elenchi, uno per l'archiviazione di tutti i viaggiatori creati come GameObjects e l'altro per gestire i dati per ogni viaggiatore. Successivamente, si aggiungeranno i meccanismi di input per caricare i viaggiatori e assegnare utenti a che fare nell'applicazione.

Associazione di un pulsante

Con il mondo di base configurato, è necessario raccogliere l'input dell'utente per ottenere l'app eseguendo delle operazioni. Per iniziare, aggiungere un pulsante che attiverà il metodo LoadTravelers del componente script TravelerManager. Per impostazione predefinita perché non appena carica di utenti in viaggio? In questo caso, si desidera fornire un punto di orientamento per l'utente a comprendere cosa accade nell'app. VR è troppo recente per gli utenti hanno già le aspettative di ciò che accade a eseguita non appena vengono caricati un mondo. Le istruzioni dell'interfaccia utente sono un ottimo strumento per consentire all'utente di orientare e acclimatare nel nuovo ambiente.

Creare un nuovo oggetto gioco vuoto nella directory principale dell'applicazione e denominarla GUI. Questo oggetto gioco conterrà i componenti dell'interfaccia utente per l'applicazione. Con l'oggetto di gioco GUI selezionato, aggiungere un nuovo oggetto Canvas. L'oggetto Canvas contiene tutti i componenti dell'interfaccia utente sullo schermo. Dopo aver creato l'oggetto Canvas, passare alla finestra di ispezione e modificare la modalità di rendering e lo spazio globale. Verrà scollegare l'area di disegno dalla videocamera e consentire contenuto si trovi nel mondo, in contrapposizione a bloccato per la fotocamera. Aggiungere un nuovo oggetto pulsante nell'area di disegno. Impostare il testo del pulsante su "Carico viaggiatori". Modifica trasformazione di visualizzazione del pulsante su x = 1.87, y =. 05, z = 0 e width = 9. altezza = 3 con una scala di x = 0.25, y = 0.25, rendendo il pulsante di dimensioni minori e nella vista dell'utente.

Selezionare il pulsante dell'oggetto nella finestra gerarchia e quindi selezionare il segno nell'elenco scegliere (nella finestra di controllo) per aggiungere un nuovo evento click. Pulsanti possono avere molti fare clic su eventi in base alle esigenze, che consente di usare un singolo pulsante per attivare molti eventi diversi. Questo è valido per un'azione di trigger e disabilitare o nascondere il pulsante. Ogni evento click richiede un oggetto di gioco e una funzione disponibile per tale oggetto gioco da definire. Dopo l'aggiunta di un evento click, trascinare l'oggetto di gioco TravelerManager al campo oggetto per l'evento click. Una volta il TravelerManager è impostata, l'elenco della funzione visualizzerà il metodo LoadTravelers. Se l'elenco di funzione non mostra LoadTravelers, è necessario compilare il progetto di codice in Visual Studio e riprovare a selezionare LoadTravelers. Selezionare il segno dell'elenco di eventi fare clic su Nuovo per aggiungere un altro evento. Trascinare l'oggetto pulsante dalla gerarchia per il campo oggetto per il nuovo fare clic su eventi, selezionare GameObject.isActive e lasciare vuota la casella di controllo. Ciò significa che quando si fa clic sul pulsante, Unity verrà innanzitutto eseguire LoadTravelers e quindi impostare il valore isActive del pulsante su false per nascondere il pulsante. Dalla prospettiva dell'utente, questo pulsante istruzioni iniziale. Dopo aver complete le istruzioni, le istruzioni non sono più necessarie affinché vengano rimossi.

Recupero di dati da un servizio

App moderne di ottenere i dati da posizioni diverse. In questa applicazione, dati viaggiatore sono fornito da travel.contoso.com API. Recupero di dati da un URL è molto semplice in Unity, consentendo di creare esperienze dati applicazioni. Nella parte inferiore dello script TravelerManager, aggiungere una nuova classe denominata viaggiatore. Questo sarà l'oggetto dati dal servizio denaro necessario per:

public class Traveler{
  public int Id { get; set; }
  public string Name { get; set; }
  public string Title { get; set; }
  public string DepartureCity { get; set; }
  public string ArrivalCity { get; set; }
}

A questo punto, è necessario ottenere dati per compilare questa classe. Creare un nuovo metodo in LoadTravelers chiamato GetTravelers. Questo metodo connettersi all'endpoint dell'API, scaricare l'oggetto JSON fornito dall'API e quindi invia il risultato a un altro metodo per visualizzare i risultati della richiesta dei dati sullo schermo:

private IEnumerator GetTravelers(){
  var www = new WWW("https://travel.contoso.com/api/Traveler");
  yield return www;
  if (www.isDone)
  DisplayTravelers(www.text);
}

A questo punto sostituire il commento "add GetTravelers qui" in LoadTravelers con la riga di codice seguente:

StartCoroutine(GetTravelers());

LoadTravelers chiamerà GetTravelers, che effettua il pull dei dati dall'API. I dati dall'API viene inviati al metodo DisplayTravelers per un'ulteriore elaborazione. Per avviare l'operazione, utilizzare StartCoroutine, che esegue GetTravelers senza bloccare il thread ed essenzialmente il blocco dell'applicazione fino al completamento dell'esecuzione. Creazione di questo flusso ottimale del codice è uno dei passaggi che necessari per garantire che l'applicazione non drop frame. Coroutine avvio e sospensione di un metodo con ogni fotogramma, consentendo a un metodo di estendersi su più frame senza bloccare l'app. StartCoroutine è molto utile per eseguire i metodi che possono essere a esecuzione prolungata, ad esempio in attesa di dati restituito da un servizio Web. Coroutine possono essere utilizzati anche per i metodi su un numero elevato di oggetti. Ad esempio, se il servizio viaggiatore restituito centinaia di utenti in viaggio, coroutine potrebbero risultare utile per azioni chiamate tra tutte le persone, probabilmente per emulare l'aspetto del supporto per i viaggiatori. Per ulteriori informazioni su coroutine, vedere la documentazione di Unity all'indirizzo bit.ly/2ahxSBu.

In GetTravelers l'oggetto WWW da Unity viene utilizzato per connettersi all'URL specificato. Se si utilizza la parola chiave yield, fino al completamento controllando la proprietà termine viene restituito l'oggetto WWW. Una volta completato il download dall'URL, termine sarà uguale a true, che quindi passerà il testo restituito dalla chiamata API al metodo DisplayTravelers. L'oggetto WWW può essere utilizzato per inviare i dati, nonché di ottenere i dati, in modo che l'applicazione potrebbe disporre della funzionalità per aggiungere utenti che viaggiano in futuro. Documentazione completa per l'oggetto WWW nel sito di Unity è bit.ly/2alFoML.

Quindi eseguire il risultato dall'API e convertirlo in un elemento è che l'utente sarà in grado di visualizzare nell'app. Prima di poter mostrare viaggiatori in posizioni diverse sulla mappa, è necessario creare tali percorsi nel mondo. Tornare alla finestra di progettazione Unity e creare un oggetto vuoto di gioco nella radice dell'albero gerarchico. Chiamare questo oggetto gioco vuoto percorso contenitore. Impostare il contenitore di percorso alla posizione X = 0, 0 = Y, Z = 0 (al centro del mondo). Con il contenitore di percorso selezionato, creare alcuni figli gioco oggetto vuoto sparsi in tutto il cubo di base creato quando viene avviato. Questi GameObjects vuoto rappresentano aeroporti; il piano è simile a una mappa. Nel metodo DisplayTravelers, cercare nella città di destinazione i bagagli e corrisponde a uno di questi oggetti gioco vuoto. Rinominare gli oggetti di gioco vuota per alcuni nomi di aeroporto. Ho utilizzato BWI, MSP e SFO. Per completare l'installazione di aeroporti, si crea un tag per gli oggetti di gioco chiamato aeroporto, in modo che sia possibile trovare tutti gli elementi aeroporto eseguendo una ricerca per un valore singolo tag. Creazione di un tag per un oggetto di gioco viene eseguito passando alla parte superiore sinistra della finestra di ispezione per l'oggetto, facendo clic sul tag nell'elenco a discesa e selezionare Nuovo Tag. È possibile creare il nuovo tag mentre sono selezionati tutti gli oggetti di gioco vuoto, che consente di impostare il tag per tutti gli oggetti in una sola volta.

Aggiungere il codice illustrato Figura 2 dopo il metodo getTravelers.

Figura 2 convertire oggetti viaggiatore JSON in oggetti gioco Unity

private void DisplayTravelers(string json){
  var jsonTravelers = new JSONObject(json);
  foreach (var jsonTraveler in jsonTravelers.list){
    // Convert jsonobject to traveler object
    Traveler traveler = ConvertJSON(jsonTraveler);
    GameObject travelerRep =
      Instantiate(TravelerTemplate,
      new Vector3(0f, 0.05f, 0f),
      TravelerTemplate.transform.rotation) as GameObject;
    travelerRep.name = traveler.Name;
    GameObject[] airports = GameObject.FindGameObjectsWithTag("Airport");
    foreach (var airport in airports) {
      if (airport.name == traveler.ArrivalCity) {
        travelerRep.transform.position =
          new Vector3(airport.transform.position.x, 0.05f,
          airport.transform.position.z);
    break;
  }
  }
  TravelerList.Add(traveler);
  }
}

Utilizzando lo script JSONObject libero da Unity Asset store (bit.ly/2akN9p9), si è in grado di convertire il testo JSON in un oggetto di codice c# viaggiatore. Da qui, utilizzando il metodo crea istanza, creare una copia di TravelerTemplate, impostarla su coordinate predefinite e nome del denaro necessario per l'oggetto di gioco. Questo nome è importante in un secondo momento nell'app in quanto verrà utilizzato per identificare il viaggiatore dall'elenco viaggiatore. Successivamente, individuare tutti gli oggetti di gioco contrassegnati come aeroporti. Fornisce che una raccolta dell'aeroporto di oggetti che è possibile scorrere e trovare l'oggetto corrispondente in base al nome per inserire il viaggiatore alla corrispondente posizione aeroporto. Utilizzando i tag che è impostato in precedenza consente di trovare facilmente gli oggetti di gioco aeroporto. Alla fine del metodo, aggiungere l'oggetto viaggiatore il TravelerList in modo che è possibile fare riferimento ai dati viaggiatore in un secondo momento nell'app. Ora si dispone di un elenco di utenti che viaggiano visualizzata il mondo. È necessario consentire agli utenti di selezionare un viaggiatore in modo che è possibile visualizzare le informazioni dettagliate per tale viaggiatore.

Selezionando un viaggiatore

Valutando il mondo che è stato creato finora, un ottimo modo per eseguire una visualizzazione dettagli è di provenienza dell'avatar come il denaro necessario per messaggio in cui si sposta in un fumetto. Il risultato sarà un divertente grado di visualizzare i dettagli, fornendo un'interfaccia utente in prossimità di viaggiatore selezionato.

In VR, selezionando un viaggiatore viene eseguita esaminando l'oggetto. Per sapere se l'utente sta guardando un viaggiatore è necessario utilizzare l'oggetto Raycast. Raycast è un raggio invisibile che si diffonde dalla videocamera e consente al sistema di sapere quando un oggetto di un componente collider si interseca con il raggio. Utilizzando un Raycast consente al codice di rilevare quando l'utente è osservando un oggetto che deve fornire un'azione. In precedenza è stato importato lo script VREyeRaycast, che implementa la logica necessaria creare un Raycast su una fotocamera. Aggiungere lo script VREyeRaycast alla fotocamera principale. È inoltre necessario aggiungere lo script tratteggiato alla fotocamera principale per fornire un componente dell'interfaccia utente per mostrare in cui l'utente esegue la ricerca.

Con l'installazione di Raycast della fotocamera, è necessario aggiornare il TravelerTemplate per sapere come reagire a un'intersezione con il Raycast. A tale scopo, aggiungere lo script VRInteractiveItem di TravelerTemplate. Questo script è un programma di installazione rapida per funzionare con eventi, come quando il Raycast è su un oggetto, o quando il Raycast esce da un oggetto, o l'acquisizione anche l'evento click.

È quindi possibile creare uno script denominato TravelerInteraction, che implementa gli eventi nello script VRInteractiveItem. Per questa applicazione, si userà gli eventi OnOver, OnOut e OnClick. Quando l'utente è un oggetto viaggiatore, verrà modificato il denaro necessario per l'aspetto. Quando l'utente è assente, l'oggetto viaggiatore passerà nuovamente. Osservando l'utente è l'oggetto viaggiatore e fa clic, verrà visualizzata una finestra di dialogo che mostra i bagagli nome, titolo e destinazione. Ecco lo script TravelerInteraction:

public class TravelerInteraction : MonoBehavior{
  public VRInteractiveItem InteractiveItem;
  public Shader Highlight;
  public TravelerManager TravelerManager;
  public Canvas Dialog;
  private Shader standardShader;
  private bool isDialogShowing;
}

Il VRInteractiveItem è necessario utilizzare il VREyeRaycast e assegnare i metodi per gli eventi VRInteractiveItem. Evidenziazione è uno shader personalizzato che verrà usato per evidenziare l'oggetto viaggiatore quando l'utente esamina l'oggetto. Non analizzerò in shader personalizzato in questo caso, poiché si tratta di un argomento complesso. Per ulteriori informazioni, vedere la documentazione sul sito Unity bit.ly/2agfb7q. TravelerManager è un riferimento allo script TravelerManager, che verrà utilizzato per cercare informazioni il viaggiatore selezionato dalla raccolta TravelerManager.TravelerList. In questo caso la proprietà pubblica finale è l'oggetto di gioco Canvas che verrà utilizzato per visualizzare i dettagli relativi viaggiatore quando si fa clic. Variabili private includono un riferimento allo shader standard per restituire l'oggetto viaggiatore a dopo aver interrotto esaminando il viaggiatore e un valore booleano per determinare se viene visualizzata la finestra di dialogo.

Per iniziare, aggiungere il metodo abilitato per la classe TravelerInteraction per connettere gli eventi della classe VRInteractiveItem ai metodi all'interno della classe TravelerInteraction:

private void OnEnable(){
  InteractiveItem.OnOver += HandleOver;
  InteractiveItem.OnOut += HandleOut;
  InteractiveItem.OnClick += HandleClick;
}

HandleOver utilizza il componente di rendering per modificare lo shader a uno shader personalizzato. La proprietà evidenziazione consente una finestra di progettazione di utilizzare l'Editor di Unity per impostare lo Shader per evidenziare il viaggiatore.

private void HandleOver(){
  var renderer =
    gameObject.GetComponentInChildren<Renderer>();
  renderer.material.shader = Highlight;
}
private void HandleOut(){
  var renderer =
    gameObject.GetComponentInChildren<Renderer>();
  renderer.material.shader = standardShader;
}

Quando si esamina un viaggiatore, lo shader evidenziazione viene applicato per differenziare il viaggiatore da di altri utenti in viaggio. Questo fornisce una coda visual all'utente e qualsiasi viaggiatore ha attualmente lo ammirate dell'utente. Quando l'utente effettua immediatamente il metodo HandleOut verrà attivato e restituire il denaro necessario per il valore standardShader.

A questo punto, si desidera visualizzare le informazioni sul richiedente agli utenti quando fanno clic sul viaggiatore. A tale scopo, innanzitutto è necessario aggiungere System. Linq a utilizzando le istruzioni per la TravelerInteractive classe in modo che è possibile trovare il denaro necessario per il gioco nome dell'oggetto. Inoltre, è necessario aggiungere lo spazio dei nomi Unityengine per lavorare con il componente di testo nella finestra di dialogo, come illustrato nella Figura 3.

Figura 3 Visualizza finestra di dialogo quando viene fatto clic sull'oggetto

private void HandleClick(){
  if (!isDialogShowing){
    var textComponent =
      Dialog.gameObject
      .GetComponentInChildren<Text>();
    var travelerInfo =
      TravelerManager.TravelerList.SingleOrDefault(x => x.Name ==
      this.gameObject.name);
    textComponent.text = String.Format(“{0}\n{1}”,
      travelerInfo.Name, travelerInfo.DestCity);
    Dialog.gameObject.SetActive(true);
    isDialogShowing = true;}
  else{
    Dialog.gameObject.SetActive(false);
    isDialogShowing = false;}
}

In questo blocco di codice, determinare innanzitutto se la finestra di dialogo viene visualizzata o non. Se viene visualizzato, disabilitare la finestra di dialogo per nasconderne la visualizzazione. Se non è visualizzata la finestra di dialogo, quindi ottenere l'oggetto testo e impostarne il valore per il nome e la destinazione di utenti in viaggio. Quando si è creato l'oggetto viaggiatore, il nome viaggiatore è utilizzato come nome del gioco oggetto utilizzato per rappresentare il denaro necessario per. Utilizzo di LINQ, è possibile cercare nell'elenco viaggiatore con lo stesso nome per restituire informazioni sui dettagli del denaro necessario per. Per semplicità, utilizzare il nome del denaro necessario per ma nei sistemi più ampi e complessi, un identificatore univoco sarebbe più ideale da utilizzare in modo che ogni viaggiatore è univoco. Una nota su LINQ, tenere presente che le prestazioni chiave nella creazione di un'esperienza VR mobile. LINQ consente di eseguire numerose operazioni, ma dispone di un sovraccarico, quindi, tenere presenti quando LINQ viene utilizzato e determinare se è necessario o solo una comodità. In questo caso LINQ viene utilizzato per brevità. Una volta impostato per la città di nome e la destinazione del denaro necessario per il testo, finestra di dialogo è abilitata, ovvero un oggetto canvas, per visualizzare il testo per l'utente.

Conclusioni

In questo articolo, esaminato le nozioni di base di creazione di un'interfaccia utente, recupero di dati da un servizio e l'interazione con gli oggetti in un mondo VR. Utilizzando queste competenze, il mondo ContosoTravel può aumentare in un'applicazione avanzata con ricerca, forse più livelli per rappresentare le aree del mondo e animazioni per portare l'avatar vita (ad esempio supporto intorno). Esplorare queste nozioni di base per creare ambienti VR oggi e preparazione per gli utenti realtà misto di domani.


Tim Kulp è engineer il principio di bwell in Baltimore, MD.  È un Web, mobili e sviluppo di app UWP, nonché l'autore, copia, il padre 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