1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Dungeon Crawler Beispiel (Änderungen für Oculus Go)

Dieses Thema im Forum "VR-Entwicklung mit Unity" wurde erstellt von hanselmarcel, 2. April 2019.

  1. Guten Tag Herr Korgel,
    Wir sind ein Makerspace in der Schweiz und lernen Unity kennen anhand ihres Buches "Virtual Reality Spiele entwicklen mit Unity". Das Kinderzimmer Bespiel hatte uns schon viel Freude bereitet. Nun sind wir dran, den Dungeon Crawler umzusetzen. Wir sind leider noch Anfänger sowohl in Unity wie auch beim Programmieren von Scripten. Unser Problem ist, dass die Scripte des Dungeon Crawlers für die Gear VR Brille programmiert sind. Wir wollen es diese aber auf der Oculus Go lauffähig machen. Wie können den Dungeon auf der Oculus Go laden, und uns umsehen, aber leider funktioniert die Bewegung natürlich nicht (ist ja für die Gear).
    Können Sie uns auf die richtige Fährte bringen, was wir alles am GearVRControls Script ändern müssen, damit es auf der Oculus Go läuft? Plus reicht es, wenn wir nur dieses Script ändern?
    Wir haben auch schon auf der Oculus Seite (https://developer.oculus.com/documentation/unity/latest/concepts/unity-ovrinput/) nachgeschaut, aber irgendwie wissen wir dennoch nicht, welche Zeilen wir genau ändern müssen. Deswegen wären wir um Ihren Input wirklich froh.
    Liebe Grüsse
    Marcel Hanselmann

    P.S. Das Buch ist übrigens grossartig! Danke dafür.

    // Für dieses Script muss es eine Instanz des OVR-Managers in der Scene geben!
    // (Nicht zwingend am gleichen GameObject)
    using UnityEngine;
    [RequireComponent(typeof(DungeonCrawlerPlayer))]
    public class GearVRControls : MonoBehaviour
    {
    private DungeonCrawlerPlayer player;
    void Start()
    {
    player = GetComponent<DungeonCrawlerPlayer>();
    }
    void Update()
    {
    // Touchpad & Bluetooth Gamepad
    HandleTouchpadAndGamepad();
    // GearVR Controller
    HandleGearVRController();
    }
    private void HandleTouchpadAndGamepad()
    {
    // wird das Touchpad des Headsets verwendet?
    bool hmdTouchpadUsed =
    OVRInput.GetActiveController() == OVRInput.Controller.Touchpad;
    if (OVRInput.GetDown(OVRInput.Button.One)) // Touchpad Tippen oder Gamepad 1
    {
    player.DoCurrentAction(true);
    }
    if (OVRInput.GetDown(OVRInput.Button.Left))
    {
    player.Rotate(hmdTouchpadUsed ? 45 : -45); //(Bedingung ? Wenn : Sonst)
    }
    if (OVRInput.GetDown(OVRInput.Button.Right))
    {
    player.Rotate(hmdTouchpadUsed ? -45 : 45);
    }
    }
    private void HandleGearVRController()
    {
    Vector3 accel = OVRInput.GetLocalControllerAcceleration(
    OVRInput.GetActiveController());
    if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger)) // drücken
    {
    player.DoCurrentAction(true);
    }
    else if (OVRInput.Get(OVRInput.Button.PrimaryIndexTrigger)) // halten
    {
    player.DoCurrentAction(false);
    }
    else if (accel.magnitude > 12) // Gesten Erkennung
    {
    player.Attack();
    }
    }
    }
     
  2. Hallo Marcel Hanselmann,
    es freut mich zu hören, dass das Buch in einem Makerspace Verwendung findest und es Ihnen gefällt!

    Das Oculus SDK sorgt dafür, dass Sie eigentlich keine einzige Zeile ändern müssen. Der Code ist nämlich nicht GearVR spezifisch (auch wenn der von mir gewählte Methoden Name "HandleGearVRController" es so wirken lässt), sondern nur Oculus-Spezifisch. Das SDK erkennt automatisch welche Hardware verwendet wird, und übersetzt die geschrieben Abfragen in welche die zum verwendeten Controller passen.
    Verwendet man völlig verschiedene Eingabegeräte, muss man ggf. ein paar Änderungen vornehmen, falls z.B. ein Controller kein Gyro-Sensor hat o.Ä.

    Im Falle des Gear und Go Controllers ist es allerdings so, dass sie zwar unterschiedlich aussehen, sonst aber vollkommen Funktionsgleich sind und es keinen Unterschied macht, welchen Controller man verwendet.

    Bei dem Dungeon Crawler Beispiel sollte ein Wischen über das Touchpad nach links oder rechts zum Beispiel eine Drehung verursachen. Das drücken des Triggers hingegen eine Aktion (Gehen, Nehmen, Angriff oder Schalter). Ein Icon im Blickfeld symbolisiert dabei, was passiert. Eine "Schwing"-Bewegung des Controllers, sollte zudem immer einen "Angriff" auslösen.
    Was es, aufgrund des Umfangs, leider nicht in das Projekt geschafft hat, ist dass sich das Schwert immer an der (ungefähren) Position des Controllers befindet, egal wie man ihn hält :(

    Ich habe es gerade noch einmal mit dem "Vollständigen Projekt" aus dem Download-Bereich getestet. Wenn ich das Projekte herunterlade und dann ohne weitere Änderungen "Build and Run" ausführe, funktioniert es bei mir, wie beschrieben, auf der Go mit Controller.
    Ich vermute deswegen, dass sich irgendwo in euer Projekt ein Bug eingeschlichen hat... :unsure:

    Folgende Schritte könnten euch helfen das Problem zu beheben:
    • Um technische Probleme auszuschließen, könntet ihr euch einmal das Vollständige Projekt Laden und es via Build and Run Ausführen und Testen ob dort alles klappt
    • Gibt es ggf. noch andere Dinge die nicht korrekt Funktionieren, z.B. die "Ziel"-Hilfe in der Mitte des Bildschirms die entweder einen Kreis oder eines der anderen Icons anzeigen sollte, je nachdem worauf man gerade schaut?
      => Dort mal nach dem Fehler suchen
    • Wenn ihr das Projekt am PC startet, erhaltet ihr dann (rote) Fehlermeldungen in der Console? z.B. "Null Reference Exception"? Dann habt ihr ggf. ein Script nicht korrekt zugewiesen oder evtl. am falschen GameObject befestigt.
    • Ggf. nochmal die Schritte aus dem Buch Schritt für Schritt durchgehen und prüfen, ob evtl. ein Fehler gemacht wurde.
      Alternativ: Mit dem vollständigen Beispiel Projekt Vergleichen
    Wenn alles nicht hilft, könnt ihr natürlich auch euren aktuellen Projektstand einmal hochladen und ich schau es mir mal an (y)

    Mit bestem Gruß
    Daniel
     
  3. Hallo Daniel,
    vielen lieben Dank für deine ausführliche Hilfestellungen.
    Wir werden das beim nächsten Makerspace Unity Abend (in 3 Wochen) mal durchgehen.
    Ein Problem könnte auch sein, dass wir das Projekt erst mal nur zur Hälfte gemacht haben (ohne Gegner) und dann testen wollten, ob es bis dorthin läuft.
    Was auch sein kann ist, dass wir das Oculus SDK nicht korrekt eingebunden haben. Ich habe gesehen, dass du hier im Forum auch einen Beitrag dazu erstellt hast. Wir werden das mal prüfen und gegebenenfalls abändern.
    Ich bin guten Mutes, dass wir es noch zu Laufen bringen, dank deinen wertvollen Tipps.
    Liebe Grüsse aus der Schweiz,
    Marcel