Demo: Virtuelles Büro mit Google Daydream

Kleine Simulation

Zu Übungszwecken habe ich die Anleitung erweitert:

http://www.vr-worlds.de/google-daydream-unity-mit-google-daydream/

Und ein Büro aus SketchUp eingefügt:

Hierdurch hat man nun schon einen kleinen "realistischeren Show-Case"

Die APK Datei kann unter folgenden Link geladen werden:
Demo1.apk

Wie wurde das gemacht?

Zunächst wurde SketchUp geöffnet. Es handelt sich um ein verbreitetes Programm um Architektur grafisch darzustellen, dass in der Basisversion kostenlos ist.

Nach dem öffnen ich ein Modell importiert über den Menüpunkt "3D Warehouse/GetModels...":

Hier habe ich mir das Modell "Office Ground Floor" ausgewählt, da es einigermaßen klein und damit auch mit dem Smartphone verarbeitbar ist:

Nach dem Download in Sketchup habe ich das Model als FBX exportiert: (Hierbei auch drauf achten, dass die Optionen wie im Screenshot angegeben werden)

Anschließend wurde das Model via Drag and Drop in Unity importiert: (Ausgangsmodel war das oben erwähnte Basis Unity Projekt mit dem blauen Würfel)

Als nächstes muss nur noch das neue Model als Objekt in die Szene gestellt werden: (Bitte beachten Sie das der Scale auf 200 angepasst werden muss!)

Teleportieren in den Räumen

Damit man sich noch in den Räumen teleportieren kann, habe ich ein paar GameObjekte eingefügt:

Es handelt sich hier um leere GameObjekte, die in einem Hauptobjekt untergebracht werden. Diese Objekte sind dafür da verschiedene Positonen festzuhalten. Erstellt werden diese mit "Create Empty":

Damit der Controller auch die Sprünge beim Tastendruck macht, habe ich ein kleines Script eingefügt:

Diesem Script sind das Eltern-Gameobjekt das die Positionen enthält zugewiesen. Zudem habe ich das Player Objekt zugewiesen, damit dem Skript ist was umzupositionieren ist.

Das Script sieht wie folgt aus und ist in C# geschrieben:

using System;  
using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;

public class ClickButton : MonoBehaviour {

    [SerializeField]
    GameObject JumpPoints;

    [SerializeField]
    GameObject player;

    int positionCounter = 0;

    void Start () {
        SetPlayerToPosition(JumpPoints.transform.GetChild(0));
    }

    private void SetPlayerToPosition(Transform p)
    {
        player.transform.position = p.position;
    }

    // Update is called once per frame
    void Update () {
        if (GvrController.ClickButtonDown || Input.GetMouseButtonDown(0))
        {
            SwitchPosition();
        }
    }

    private void SwitchPosition()
    {
        positionCounter++;
        if (positionCounter > JumpPoints.transform.childCount)
            positionCounter = 0;

        SetPlayerToPosition(JumpPoints.transform.GetChild(positionCounter));
    }
}

Fazit

Mit wenigen weiteren Schritten ist nun auch ein eindrucksvolleres 3D Modell importiert worden.