September 2016

Band 31, Nummer 9

Dieser Artikel wurde maschinell übersetzt.

Unity: Erstellen von Virtual Reality-Anwendungen

Durch Tim Kulp

Virtuelle Realität (VR) bietet eine einzigartige Möglichkeit und die Herausforderung für Anwendungsentwickler. Einerseits ist gibt es Möglichkeit, faszinierende Erfahrungen Bindung durch das vorhandene 2D UX-Paradigma. Auf der anderen Seite besteht die Herausforderung eine überzeugenden VR-Umgebung zu erstellen, die mehr als eine 3D-Ansicht eines 2D Bildschirms ist. Glücklicherweise sind einige Grundlagen der app-Entwicklung und Entwurf der Benutzeroberfläche ähnlich, wie z. B. das Erstellen einer Master/Detail-Ansicht, die Eingabe des Benutzers und die kommunizierenden anwendungsübergreifend über Dienste abrufen. In diesem Artikel werde ich diese Themen untersuchen, aus dem Kontext der Erstellung einer Business-Anwendung in VR, damit Sie sehen können, wie Ihre eigenen VR-apps zu starten.

Warum VR?

Es ist ein guter Zeitpunkt VR-app-Entwicklung mit der Verfügbarkeit von hervorragende Tools wie Unity und relativ kleinen VR Marketplace eingeben. Denken Sie den aktuellen Speicherplatz der mobilen app-Markt. Millionen von apps und neue apps haben viele Wettbewerb. VR Markt Bereich ist immer noch kleine jedoch hervorzuheben und stechen zu erleichtern. Zusätzlich zu den Marktvolumen ist eine hervorragende Hunger derzeit für VR-Inhalte mit Erstanwender. Zum Erstellen von apps in diesem Bereich ist immer noch die Herausforderung, mit den best Practices weiterentwickelt. Die Zukunft von dieser Plattform Form unterstützt Erstanwender VR-Entwicklung. Es sind aufregende Zeiten in VR sein.

Erstellen von apps für VR-Geräte wie z. B. Samsung Zahnrad VR und Google Karton ist eine hervorragende Einstiegspunkt für Entwickler für die Erstellung ihrer Inhalte für kostengünstige Vertriebskanäle. Wenn mit einer denken in Richtung gemischten Realität erstellt haben, können VR-apps zu den HoloLens portiert werden, da die Tools identisch sind, und der Inhalt kann identisch sein. Der einzige Unterschied ist der Code zum Ausführen von Aufgaben (z. B. bestaunen im Vergleich zu Raycast, die ich später in diesem Artikel vorgestellt wird), und einige der einzigartigen Features wie Spracherkennung, räumliche Zuordnung und Bewegung HoloLens. Mit ein wenig Recherche und experimentieren können Sie Ihre app VR an eine app HoloLens konvertieren.

Wird nicht in die kleinsten Details öffnen wir auf ein Projekt VR einzurichten. In diesem Fall empfiehlt sich das Projekt Unity-VR-Beispiele in dem Unity Asset Store (bit.ly/1qYLBX9). Projekts erstellt wird, in diesem Artikel wird neu gestartet, jedoch wird mithilfe von Skripts aus dem Unity-VR-Beispiele Projekt vorhandenen Code für standardmäßige Tasks (z. B. das Festlegen eines Objekts interaktive) nutzen. Ich empfehle, erstellen ein leeres Unity-Projekt und importieren die Unity-VR-Beispiele für Verweis außerhalb des Projekts, die mit diesem Artikel erstellt werden muss. Unity VR Beispiele hat viele ausgezeichnete aber wird erstellt, um eine eigenständige Anwendung sein und erfordert zusätzlichen Konfigurationsschritte für die Ausführung einer Szene außerhalb der Szenen enthalten. Behalten Sie Unity VR Beispiele offene und verfügbare, da sie einige Skripts enthält, die in diesem Projekt verwendet werden. In diesem Artikel verwende ich Unity 5.3 mit den Android-Tools aktiviert, sodass die Anwendung für das Gerät von Samsung Zahnrad VR erstellt werden kann.

Contoso Reisen

Contoso Reisen ist ein Geschäftsreisen einen Reise, der Administrator, der Buchungen ihrer Teammitglieder finden Sie unter. Reisen-Administratoren können Reisende vom Flughafen, suchen Sie nach einer bestimmten Stadt, anzeigen und Anzeigen von Details zu einem mobilen. In der app eine komfortable zu erstellen, die räumliche Beziehung eines Reisende für Contoso angezeigt, werden soll. Dies ist normalerweise eine Line-of-Business-Apps, mobile oder Web, für die Benutzer über einen Browser bereitgestellt. In diesem Artikel erstelle ich diese app in VR Benutzern eine Erfahrung, verwenden Avatare zum Darstellen der Reisende und Anzeigen von Personen, wo im Verhältnis zueinander im 3D-Raum befinden.

VR öffnet viele Möglichkeiten für eine Anwendung wie diese. Aus der Perspektive der Reise-Administrator kann VR individuellere Erlebnisse, verwenden den mobilen Avataren anstatt nur Punkte auf einer Karte oder einen Namen in der Liste. Für Reisende erhalten VR Reisende eine Vorschau der von ihnen besuchten Office oder Websites in einem remote-Standort finden Sie unter. Die Idee ist ein Eintauchen erstellen, die Benutzer profitieren können.

In der Anlaufphase

Sie sollten dieses Projekt als eine mobile VR-Umgebung vorbereiten. Um zu starten, erstellen Sie ein neues 3D Unity-Projekt namens ContosoTravelVR. Ändern Sie zunächst die zeitliche Steuerung der Welt in langsamer Bildrate. Bearbeiten | Projekteinstellungen | Zeit Inspector, legen Sie die festen Zeitschritt = 0.01666666, legen Sie die maximale zulässige Zeitschritt = 0.1666666 und Zeitskala = 1. Maximale zulässige Zeitschritt verlangsamt Unity Physik Zeit, sodass physikberechnungen nicht Framerate auswirken. Während der Physik Zeit und kann nicht direkt verknüpft, die CPU-Leistung für Physik Berechnung erforderlichen kann Probleme mit der Verarbeitung von Frames erstellen. Festlegen der maximalen zulässigen Zeitschritt legt einen maximalen Wert für wie viel Zeit für Physik Updates zur Verfügung. Beachten Sie, dass in einer mobilen VR-Welt, das Gerät zwei Bilder jedes Einzelbild Zeichnen: Auge linken und rechten. Komplexe Berechnungen auf höhere Frameraten kann ein Gerät, z. B. Mobiltelefone, Frames synchron, wodurch jedes Auge auf etwas anderes finden Sie unter abrufen. Dies bewirkt Disorientation und eine Benutzer. Das ist natürlich unbedingt vermeiden zu großer Benutzerzufriedenheit. Vermeiden Sie alle Elemente, die Leistung auswirken, hätte z. B. hohe Polygon für Objekte, lang ausgeführte Skripts oder den Thread Sperren ermittelt.

Anschließend aktualisieren Sie die Player-Einstellungen für mobile VR. Informationen hierzu finden Sie unter Bearbeiten | Projekteinstellungen | Player, und wählen Sie im Abschnitt Weitere Einstellungen. In diesem Abschnitt befindet sich eine Einstellung Virtual Reality unterstützt. Aktivieren Sie das Kontrollkästchen, um sicherzustellen, dass die Welt als VR app erkannt wird. Diese Einstellung wird automatisch das Kameraobjekt Main konvertiert, das bereits in Unity auf eine Kamera VR.

Nun, dass die app festgelegt ist, richten Sie die Szene. Fügen Sie im Fenster Hierarchie einen Cube mit der Skalierung von X 10 = y = 0,1 und Z = 10. Die Position des Cubes werden zurücksetzen X = 0, y = 0 und Z = 0, um den vereinfachten Cube in der ganzen Welt zu zentrieren. Dadurch erhalten eine Etage für Ihre Welt, die Benutzern eine Vorstellung von Speicherplatz und Erdung sowie einen Ort für die Entitäten in der Welt auf dem stehen bietet. Wie müssen in 2D-apps, Benutzern eine Vorstellung davon, wo der Inhalt und die Interaktionen der app erfolgt. Dies hilft Benutzern, die sich in der app auszurichten. Für ContosoTravel werden alle Aktionen innerhalb der Grenzen dieses Objekts Floor auftreten.

In dieser Welt benötigen Sie ein Objekt, das in der gesamten app durchgeführt wird. Erstellen Sie ein leeres Spiel Objekt im Fenster Hierarchie, und benennen Sie das Objekt in TravelerManager. Dieses Objekt wird die Quelle aller Reisen Daten innerhalb der app sein. Wenn Sie das Spiele TravelerManager-Objekt auswählen, klicken Sie auf Komponente hinzufügen | Neues Skript. Nennen Sie das Skript TravelerManager aus, und klicken Sie auf erstellen und hinzufügen. Dadurch entsteht ein neues Skript, um die Logik der TravelerManager zu behandeln.

Als app Reisen müssen Sie in der ganzen Welt Reisende finden Sie unter. Hierzu fügen Sie ein neues Spiel-Objekt in der Hierarchie und rufen Sie TravelerTemplate auf. Das ist das Objekt, das für jeden mobilen dargestellt im System angezeigt wird. Wenn Sie mit prefabs (Vorlagen) vertraut sind, verwenden Sie ein Zeichen, das Sie erstellt haben oder etwas aus dem Asset Store. Für meine app verwende ich einige niedrig Poly-Zeichen, die ich in den Asset Store gefunden, die der ganzen Welt ein unterhaltsame und Blöcke Aussehen verleihen können. Beliebiges spielobjekt funktioniert für die TravelerTemplate – eines prefabs, einen Cube, eine Kugel und So weiter. Nach dem Hinzufügen der TravelerTemplate deaktivieren Sie das Spiele Objekt durch Klicken auf das Kontrollkästchen neben dem Spiel Namen des Objekts im Inspektor-Fenster. Dies veranlasst den TravelerTemplate nicht mehr auf dem Bildschirm angezeigt.

Fügen Sie schließlich die folgenden Skripts aus dem Unity-VR-Beispiele-Projekt dem Projekt: VREyeRaycast, VRInput, VRInteractiveItem und Fadenkreuz. Wie ich sie in diesem Artikel verwenden werde ich viel Code weiter unten in der app speichern, erläutere ich den Wünschen des Skripts.

Einrichten der TravelerManager-Klasse

Unity Doppelklicken Sie auf das TravelerManager-Skript, um es in MonoDevelop oder Visual Studio zu öffnen. Fügen Sie den Code in Abbildung 1 der Komponente.

Abbildung 1 TravelerManager Skriptkomponente

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());
  }
}

Ich verwende die Reisende auf dem Bildschirm erstellen enthalten die TravelerTemplate der Prefabs. Beachten Sie, dass jedes Spiel Objekt TravelerTemplate sein: ein Cube, eine Kugel, ein prefabs Zeichen und So weiter. Darüber hinaus kann durch markieren diese Variable öffentlich, der Wert Unity-Entwurfstools festgelegt werden, um das Team Kontrolle der Reisenden-Vorlage zu, ohne die TravelerManager umcodieren können. Außerdem erstellen Sie zwei Listen zum Speichern aller Reisende, die als "gameobjects", und die andere zum Verwalten der Daten für jeden mobilen erstellt. Als Nächstes fügen Sie die Eingaben Mechanismen zum Laden der Reisende und Benutzern etwas in der Anwendung führen.

Einbinden einer Schaltfläche

Mit der grundlegenden Welt einrichten müssen Sie Eingaben vom Benutzer, die app zu Dinge zu erfassen. Fügen Sie dazu eine Schaltfläche, die die LoadTravelers-Methode der Skriptkomponente TravelerManager auslösen. Standardmäßig laden einfach die Reisende Warum nicht? In diesem Fall soll ein Punkt der Ausrichtung für den Benutzer zu verstehen, was passiert in der app bereitgestellt werden. VR ist zu neu für Benutzer vordefinierten wurden erwartet, was passiert ausgeführt, sobald sie eine Welt geladen. UI-Anweisungen sind ein gutes Tool für Benutzer leichter orientieren und in der neuen Welt Akklimatisation.

Erstellen Sie ein neues leeres Spiel-Objekt im Stammverzeichnis der Anwendung, und nennen Sie sie GUI. Dieses Spiel Objekt enthalten die UI-Komponenten für die app. Fügen Sie mit dem GUI-game-Objekt ausgewählt haben ein neues Canvasobjekt. Das Canvas-Objekt enthält alle UI-Komponenten auf dem Bildschirm. Sobald das Canvas-Objekt erstellt wurde, wird der Inspektor wechseln Sie, und ändern Sie die Render-Modus auf Welt-Raum. Die Leinwand von der Kamera zu trennen wird und Inhalt in der Welt platziert werden, im Gegensatz zu ermöglichen, hängen mit der Kamera. Jetzt fügen Sie eine neue Schaltflächenobjekt auf der Leinwand hinzu. Legen Sie die Schaltfläche Text auf "Last Reisende." Ändern Sie die Schaltfläche Anzeige Transformation x = 1.87, y =. 05, Z = 0 "und" Width = 9. Height = 3 mit einer Skalierung von X = 0,25, y = 0,25, wodurch die Schaltfläche kleiner und in der Sicht des Benutzers.

Wählen Sie die Schaltfläche im Fenster Hierarchie Objekt, und wählen Sie dann das Pluszeichen neben der Liste klicken Sie auf (im Fenster "Inspector") zum Hinzufügen eines neuen click-Ereignis. Schaltflächen können viele Ereignisse bei Bedarf auf, sodass Sie eine Schaltfläche zu verwenden, um viele verschiedene Ereignisse auszulösen. Das ist gut zum Auslösen der Aktion und dann deaktivieren oder Ausblenden der Schaltfläche. Jedes Ereignis auf erfordert ein Spiel-Objekt und die Funktion zur Verfügung, der diesem Spiel Objekt definiert werden. Ziehen Sie nach dem Hinzufügen ein Click-Ereignis, das Spiele TravelerManager-Objekt in das Feld Objekt für das Click-Ereignis. Sobald die TravelerManager festgelegt ist, wird die Funktion die LoadTravelers-Methode angezeigt. Wenn die Liste der Funktionen LoadTravelers angezeigt wird, müssen Sie das Codeprojekt in Visual Studio erstellen, und versuchen erneut, um LoadTravelers auszuwählen. Wählen Sie das Pluszeichen neben der Liste klicken Sie auf Ereignis erneut aus, um ein weiteres Ereignis hinzufügen. Ziehen Sie das Button-Objekt aus der Hierarchie in das Feld Objekt für den neuen klicken Sie auf Ereignis wählen GameObject.isActive und lassen Sie das Kontrollkästchen leer. Dies bedeutet, dass wenn die Schaltfläche geklickt wird, Unity führen Sie zunächst LoadTravelers und anschließend die IsActive-Wert der Schaltfläche auf "false" zum Ausblenden der Schaltfläche festgelegt wird. Aus der Benutzerperspektive enthält diese Schaltfläche anfänglichen Anweisungen. Nachdem diese Schritte abgeschlossen haben, werden die Anweisungen nicht mehr benötigt werden, sodass Sie sie entfernen.

Abrufen von Daten von einem Dienst

Moderne apps erhalten ihre Daten aus vielen verschiedenen Quellen. Bei dieser app werden Reisenden Daten von der travel.contoso.com API bereitgestellt. Abrufen von Daten aus einer URL ist sehr einfach in Unity apps, die umfassende Erfahrungen erstellen lassen. Fügen Sie am unteren Rand des TravelerManager-Skripts eine neue Klasse namens Reisenden hinzu. Das ist das Datenobjekt aus dem mobilen Dienst:

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

Nun müssen Sie zum Abrufen von Daten, um diese Klasse zu füllen. Erstellen Sie eine neue Methode unter LoadTravelers GetTravelers aufgerufen. Diese Methode den API-Endpunkt verbunden, laden das JSON-Objekt, das von der API bereitgestellt und sendet dann das Ergebnis an eine andere Methode der Anforderungsergebnisse Daten auf dem Bildschirm angezeigt:

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

Ersetzen Sie den Kommentar "GetTravelers hier hinzufügen" im LoadTravelers jetzt mit der folgenden Codezeile:

StartCoroutine(GetTravelers());

LoadTravelers ruft GetTravelers, der die Daten aus der API zieht. Die Daten aus der-API werden an die DisplayTravelers-Methode für die weitere Verarbeitung gesendet. Um dies zu starten, verwenden Sie StartCoroutine, die GetTravelers ausführt, ohne den Thread zu sperren und die app im Wesentlichen zu fixieren, bis die Ausführung abgeschlossen ist. Erstellen diese reibungslosen Ablauf des Codes ist einer der Schritte, die Sie ergreifen, um sicherzustellen, dass die app Frames nicht. Coroutinen starten und Anhalten von einer Methode mit jeder Frame, lassen eine Methode, die mehrere Rahmen erstrecken, ohne die Anwendung zu sperren. StartCoroutine ist sehr nützlich, um Methoden zu tun, die lang andauernde, z. B. Warten auf Daten von einem Webdienst zurückgegeben werden könnte. Coroutinen können auch für Methoden großer Mengen von Objekten verwendet werden. Beispielsweise, wenn Sie der mobilen Dienst zurückgegeben, Hunderte von Menschen, die auf Reisen – Coroutinen können hilfreich sein, für die aufrufende Aktionen für alle Personen, vielleicht die Darstellung des für die Reisende neugierigen zu emulieren. Weitere Informationen zu Coroutinen, finden Sie unter der Unity-Dokumentation unter bit.ly/2ahxSBu.

In GetTravelers ist das WWW-Objekt von Unity verwendet, für die Verbindung zur angegebenen URL. Mit dem Yield-Schlüsselwort ist das WWW-Objekt zurückgegeben, bis er abgeschlossen ist, überprüfen Sie die Eigenschaft diesabgeschlossen ist. Nach Abschluss der Download von der URL entspricht diesabgeschlossen ist "true" dem übergibt dann den API-Aufruf an die DisplayTravelers-Methode zurückgegebenen Text. Der WWW-Objekt kann verwendet werden, zum Bereitstellen von Daten sowie das Abrufen von Daten, so, dass die app möglicherweise über Funktionen, die in der Zukunft Reisende hinzugefügt. Vollständige Dokumentation für den WWW-Objekt auf der Unity-Website finden Sie unter bit.ly/2alFoML.

Dann nehmen das Ergebnis von der API und konvertieren Sie ihn in etwas, das der Benutzer in der app sehen kann. Bevor Sie Reisende an verschiedenen Orten auf der Karte anzeigen können, müssen Sie diese Speicherorte in der ganzen Welt zu erstellen. Wechseln Sie zurück zum Unity-Designer, und erstellen Sie ein leeres Objekt des Spiels im Stamm der Hierarchiestruktur. Rufen Sie diese leere Spiel Speicherort Container. Festlegen Sie Container-Speicherort, an der Position X = 0, Y = 0, Z = 0 (Mitte der Welt). Erstellen Sie mit ausgewählten Speicherort-Container ein paar leere Spiel untergeordneten Elemente des Objekts verteilt sind, um die Floor-Cube erstellt, wenn der Artikel gestartet. Diese leere "gameobjects" steht für Flughäfen. Floor ist wie eine Karte. In der Methode DisplayTravelers sehen Sie sich die Reisenden Zielort und auf einen leeren Spiel Objekte übereinstimmen. Benennen Sie die leere Spiel Objekte in Flughafennamen. Ich verwendete BWI, MSP und SFO. Zum Abschließen der Installation von Flughäfen erstellen Sie ein Tag für das Spiel Objekte Flughafen aufgerufen, sodass Sie alle Flughafen Elemente finden können, durch die Suche nach einem einzelnen Tag-Wert. Erstellen ein Tag für ein Spiel-Objekt durchgeführt, indem an oberster Stelle links Inspektor für das Objekt, das durch Klicken auf die Tag-Dropdown-Liste, und wählen neues Tag. Alle leeren Spiel Objekte ausgewählt wird, können Sie das Tag für alle Objekte auf einmal festlegen, können Sie das neue Tag erstellen.

Fügen Sie den Code in Abbildung 2 nach der GetTravelers-Methode.

Abbildung 2 konvertieren JSON Reisenden Objekte in Unity Spielobjekte

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

Mit dem kostenlosen JSONObject-Skript aus dem Unity Asset Store (bit.ly/2akN9p9), Sie sind in der Lage, den JSON-Text in einer mobilen C#-Codeobjekt zu konvertieren. Von dort mithilfe der Methode instanziieren erstellen eine Kopie der TravelerTemplate, legen Sie es auf die Standardkoordinaten und das Spiel-Objekt den Namen von der mobilen. Dieser Name ist wichtig für die weiter unten in der app wie er zur Identifizierung der Reisenden aus der Liste des Reisenden verwendet wird. Als Nächstes suchen Sie alle Spiel-Objekte, die als Flughäfen. Diese Konfiguration bietet eine Auflistung von Flughafen-Objekten, die Sie durchlaufen und das übereinstimmende-Objekt nach Namen der mobilen an den entsprechenden Flughafen Position platzieren suchen können. Mit den Tags, die Sie zuvor eingerichtet können Sie leichter die Informationssystem Spiel Objekte finden. Am Ende der Methode fügen Sie das Reisenden-Objekt an die TravelerList, damit Sie die Daten des Reisenden weiter unten in der app verweisen können. Sie haben jetzt eine Masterliste der Reisende in Ihre Welt angezeigt. Es wird Zeit, damit Benutzer einen mobilen auswählen, sodass Sie detaillierte Informationen für diese mobilen anzeigen können.

Auswählen einer mobilen

Denken über die Welt, die bisher erstellt wird, ist eine hervorragende Möglichkeit, führen Sie eine Detailansicht eine Sprechblase des Avatars stammen, wie die Reisenden sagt, in dem sie auf Reisen sind. Dies wäre eine lustige Möglichkeit, die Details beim Bereitstellen einer Benutzeroberfläche in der Nähe der ausgewählten mobilen anzuzeigen.

In VR Auswählen einer mobilen erfolgt anhand des Objekts. Um zu erfahren, wenn der Benutzer auf einem mobilen angezeigt wird das Raycast-Objekt verwenden möchten. Raycast ist eine unsichtbare Balken, der von der Kamera ausgeht und das System kennen, wenn ein Objekt mit einer Collider-Komponente auf mit Balkens überschneidet. Mithilfe einer Raycast kann Ihren Code erkennen, wenn der Benutzer auf ein Objekt suchen, die eine Aktion bereitstellen soll. Zuvor importierte Sie das Skript VREyeRaycast, das die gesamte Logik zum Erstellen einer Raycast in einer Kamera implementiert. Fügen Sie das Skript VREyeRaycast, mit der Main-Kamera. Sie müssen auch die Main-Kamera zu UI-Komponenten angezeigt, in dem der Benutzer sieht das Fadenkreuz Skript hinzugefügt.

Mit der Einrichtung der Kamera Raycast müssen Sie die TravelerTemplate, um zu erfahren, wie auf eine Schnittmenge mit dem Raycast reagieren zu aktualisieren. Zu diesem Zweck fügen Sie das VRInteractiveItem-Skript an das TravelerTemplate. Dieses Skript ist eine schnelle Installation für das Arbeiten mit Ereignissen wie etwa, wenn die Raycast wird über ein Objekt oder die Raycast ein Objekts verlässt oder sogar das Click-Ereignis erfassen.

Als Nächstes erstellen Sie ein Skript namens TravelerInteraction, die die Ereignisse im Skript VRInteractiveItem implementiert. Für diese app verwenden Sie die OnOver, OnOut und OnClick-Ereignisse. Wenn der Benutzer auf ein Objekt des Reisenden sucht, wird die Reisenden Aussehen ändern. Wenn der Benutzer sofort sucht, wird die Reisenden Objekt wieder geändert werden. Bei den Reisenden Objekt und klickt auf der Benutzer angezeigt wird, wird ein Dialogfeld angezeigt, mit der mobilen Name, Titel und Ziel. Hier ist das TravelerInteraction-Skript:

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

Die VRInteractiveItem ist erforderlich, mit der VREyeRaycast arbeiten und die Ereignisse VRInteractiveItem Methoden zuweisen. Hervorhebung ist ein benutzerdefinierter Shader, der verwendet werden sollen, um das Objekt des Reisenden hervorgehoben, wenn der Benutzer auf das Objekt sieht. Ich gehe nicht auf benutzerdefinierte Shader hier, wie sie ein komplexes Thema sind. Weitere Informationen finden Sie unter der Dokumentation auf der Unity-Website unter bit.ly/2agfb7q. TravelerManager ist ein Verweis auf das TravelerManager-Skript, das verwendet wird, um Details zu den ausgewählten Reisenden aus der Auflistung TravelerManager.TravelerList zu suchen. Die letzte öffentliche Eigenschaft hier ist das Spiel Canvas-Objekt, das zum Anzeigen von Details zu den Reisenden beim verwendet wird. Private Variablen enthalten einen Verweis auf den standard-Shader das Reisenden-Objekt, das zurückgegeben wird, nachdem Sie beendet Betrachtung der mobilen und einem booleschen Wert, um festzustellen, ob das Dialogfeld angezeigt wird.

Zunächst fügen Sie die Enabled-Methode zur TravelerInteraction-Klasse, um die Ereignisse der VRInteractiveItem-Klasse mit Methoden innerhalb der Klasse TravelerInteraction verbinden:

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

HandleOver verwendet die Renderer-Komponente so ändern Sie den Shader in einen benutzerdefinierten Shader. Die Highlight-Eigenschaft können einen Designer Unity-Editor zu verwenden, um den Shader festzulegen, für die Hervorhebung der mobilen.

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

Wenn der Benutzer einen mobilen betrachtet, wird die Hervorhebung Shader angewendet, um die Reisenden von den anderen Reisenden zu unterscheiden. Dies stellt eine visuelle Warteschlange für dem Benutzer bereit und unabhängig vom mobilen verfügt derzeit über bestaunen des Benutzers. Wenn der Benutzer sofort sucht die HandleOut-Methode ausgelöst, und der Reisenden auf den Wert StandardShader zurück.

Nun möchten Sie die Informationen zum reisenden Benutzern anzeigen, wenn sie auf den mobilen. Zu diesem Zweck zunächst müssen Sie System.Linq mit hinzufügen-Anweisungen für die TravelerInteractive Klasse, sodass Sie das Spiel Objektname der Reisenden finden können. Darüber hinaus müssen Sie den Namespace "unityengine.UI" zur Bearbeitung an der Komponente im Dialogfeld hinzufügen, siehe Abbildung 3.

Abbildung 3 Anzeigedialogfeld, wenn Objekt geklickt wird

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 diesem Codeblock sollten Sie zuerst ermitteln Sie, wenn das Dialogfeld oder nicht angezeigt wird. Wenn es angezeigt wird, deaktivieren Sie das Dialogfeld "ausgeblendet" aus. Wenn das Dialogfeld nicht angezeigt wird, rufen Sie die Textobjekt, und legen Sie seinen Wert auf den Namen und das Ziel der Reisende. Wenn Sie das Objekt des Reisenden ursprünglich erstellt, verwendet der Name des Reisenden als den Namen des Spiels-Objekt, das zur Darstellung der mobilen. Mit LINQ können Sie die Liste der mobilen durch den Namen, um detaillierte Informationen zu den mobilen zurück suchen. Aus Gründen der Einfachheit halber wird dies die Reisenden Namen verwenden Sie größere und komplexere Systeme, ein eindeutiger Bezeichner wäre aber optimalen, sodass jedes Reisenden eindeutig ist. Eine kurze Mitteilung LINQ, beachten Sie, dass Leistung Schlüssel in einer mobilen VR erstellen. LINQ möglich Vorteile – aber Mehraufwand – also Achten Sie bei dem LINQ und bestimmen, ob es erforderlich ist oder nur aus Gründen der Einfachheit. Hier wird aus Gründen der Übersichtlichkeit LINQ verwendet. Nachdem der Text auf die Stadt und Name und Ziel der Reisenden festgelegt ist, im Dialogfeld ist aktiviert (ein Canvas-Objekt) den Text für den Benutzer angezeigt.

Zusammenfassung

In diesem Artikel überprüft ich die Grundlagen der Erstellung einer Benutzeroberfläche, Abrufen von Daten von einem Dienst und Interaktion mit Objekten in einer Welt VR. Verwenden diese Fähigkeiten, kann die Welt der ContosoTravel in eine rich-app mit der Suche vielleicht mehr Ebenen zur Darstellung von Regionen der Welt und Animationen, die Avatare zum Leben (z. B. um neugierigen) erwecken wachsen. Untersuchen Sie diese Grundlagen zum Erstellen von VR Welten für heute, und für die Benutzer gemischten Realität von morgen vorzubereiten.


Tim Kulp ist das Prinzip Engineer bei Bwell in Baltimore, MD.  Er ist ein Web, Mobile und UWP-app-Entwickler sowie Autor, übertragen, Vater und "Wannabe Mad Scientist Maker." Folgen Sie ihm auf Twitter: @seccode oder LinkedIn: linkedin.com/in/timkulp.

Unser Dank gilt dem folgenden technischen Experten bei Microsoft für die Durchsicht dieses Artikels: Adam Tuliper