Also, Unity macht nicht viele Rhythmusspiele auf Android. Ich entschloss mich, herauszufinden, warum, und programmiere eins als Aufgabe (die Grundlagen dafür sowieso). Meine wichtigste Hürde ist die Benutzereingabe. Wie wir wissen, basiert die Eingabe auf der Bildrate in der Einheit, und ein Musikspiel (ich nehme an) würde die kleinstmögliche Verzögerung zwischen dem Drücken der Taste und der Aktion bevorzugen.Eingabe eines Rhythmusspiels
Wenn wir Musik mit etwa 15 bis 20ms Verzögerung betrachten, hört das menschliche Ohr, dass etwas "außer Kontrolle" ist.
Ich hörte Android Unity-Spiele mit 30FPS (seit 60FPS saugt die Batterie trocken), einfache Mathematik bedeutet: 1000/30 = 33ms pro Frame. Rechnen wir in den 15ms können wir wohl nicht merken, wir sind bei 18ms möglicher Katastrophe. Angenommen, wir erreichen diese 30 FPS jederzeit.
Wenn ich die Eingabe von einem Benutzer bekomme, kann ich einen Ton auf diesem Eingang auf dem genau gleichen Rahmen spielen. Allerdings könnten wir 18ms frei sein.
Jetzt gibt es eine Möglichkeit, DIRECT-Steuerelemente von Maus und Tastatur zu erhalten, die OnGui() anstelle von Update() verwendet, um Ereignisse der Tastatur oder Mausklicks an Ort und Stelle zu erhalten. Das Problem ist, Android funktioniert wahrscheinlich nicht, (das funktioniert auch nicht für Gamepads) und die Methoden klingen geradezu seltsam, besonders wenn wir versuchen, Sounds von der OnGui() Methode abzuspielen.
Meine Frage: Was würden Sie tun, und warum? Sollten wir nur die möglichen 18ms akzeptieren und annehmen, dass wir die 30FPS erreichen, oder sollten wir nach einem zuverlässigen Weg suchen, um direkt Input zu erhalten, anstatt auf ein Update zu warten?
Danke für jede Einsicht, die Sie mir geben können, ich habe keine Artikel darüber gefunden, die gerade nützlich sind. -Smiley
EDIT Ich habe gerade einige grundlegende Tests mit einem Metronom, bei 100FPS im Editor ausgeführt wird (die 10 ms pro Rahmen sein sollte) meine spacebar innerhalb der Einheit auf einem Metronom tippen. Die Ergebnisse, die ich bekam, waren einfach schrecklich. Schnell klopfen: Ich komme meiner Metronom-Tick so nah wie 20ms, aber nichts näher. Auf den Beat tippen: Ich habe mindestens 200ms von meinem Ziel Tick. Wenn ich nicht mit diesem Rhythmus verwirrt bin, ist das einfach falsch.
Derzeit verwende ich Debug.Log, um meine Testdaten in das Protokoll zu bekommen. Kann mir bitte jemand bestätigen, ob dies der Grund ist (verursacht einige lange Verzögerung? Ich weiß, Debug ist nicht so optimiert), oder ist das Timing eigentlich so schlimm?
Vielen Dank im Voraus, -Smiley
[Zuverlässige Echtzeiteingabe ist ein Problem für Unity] (http://forum.unity3d.com/threads/54154-Realtime-input-in-Unity). Was Ihre persönlichen Tests betrifft, erkennen die meisten Leute nicht, dass 'Debug.Log' ein * extrem * teurer Anruf ist (oft unter 5 + ms). Es lohnt sich oft für die Entwicklung, aber ich würde es für kein Leistungsbenchmarking empfehlen. – rutter