Die Framerate oder auch Bildwiederholrate ist beim Entwickeln von Spielen von großer Bedeutung, denn ist dieser Wert zu gering entstehen Ruckler und das Spiel macht keinen Spaß mehr. Wie kannst du dir aber in Unity direkt diese Frames per Second (kurz FPS) anzeigen lassen. Die einfachste Möglichkeit ist im Game Tab der Klick auf den Button “Stats” und dadurch öffnet sich das Statistics Fenster. Hier findest du bei Graphics die FPS.
Auch wenn du eine leere Szene hast werden dir hier normalerweise nur 60 FPS angezeigt. Für ein flüssiges Spielerlebnis ist dies zwar in Ordnung, aber ein moderner Computer sollte so eine Szene sicherlich mit mehr Bildern pro Sekunde darstellen. Der Grund hierfür ist eine Technologie namens VSYNC. VSYNC ist die Abkürzung für vertikale Synchronisation und dadurch wartet die Grafikkarte auf den Monitor bis dieser das Bild dargestellt hat – also quasi den Frame. Durch diese Technologie werden die FPS im Spiel auf die Monitoreinstellung angepasst und entstehen dadurch weniger Ruckler oder Halbbilder. Hast du also einen Monitor mit 144hz, dann wird VSYNC hier auch maximal 144 FPS anzeigen.
Damit der unterschied besser verständlich ist, zeige ich dir wie es aussieht wenn du VSYNC deaktiviert hast. Edit > Project Settings > Quality > Other > V Sync Count = Don’t Sync.
Im Fenster Statistics werden jetzt auch viel mehr FPS dargestellt. Es ist aber sinnvoll direkt ein Skript für die Frames Per Seconds zu verwenden. Das Skript gibt die tatsächliche Anzahl der Bilder aus die der Nutzer dann sieht. Du findest das Skript in der Videobeschreibung und erhältst dadurch in der Linken oberen Ecke die Anzahl der Bilder.
using UnityEngine;
using System.Collections;
public class FPSDisplay : MonoBehaviour
{
float deltaTime = 0.0f;
void Update()
{
deltaTime += (Time.unscaledDeltaTime - deltaTime) * 0.1f;
}
void OnGUI()
{
int w = Screen.width, h = Screen.height;
GUIStyle style = new GUIStyle();
Rect rect = new Rect(0, 0, w, h * 2 / 100);
style.alignment = TextAnchor.UpperLeft;
style.fontSize = h * 2 / 100;
style.normal.textColor = new Color (0.0f, 0.0f, 0.5f, 1.0f);
float msec = deltaTime * 1000.0f;
float fps = 1.0f / deltaTime;
string text = string.Format("{0:0.0} ms ({1:0.} fps)", msec, fps);
GUI.Label(rect, text, style);
}
}
Wichtig. Wenn du es testest, dann denke daran, dass du hier nicht die gleichen Bedingungen hast wie der Anwender dann später. Denn zum einen läuft es hier innerhalb der Unity Software und ist dadurch noch keine exportierte Anwendung und zum anderen hast du mit einer geöffneten Szene View noch einen zusätzliche Belastung. Beim testen lohnt sich das Spiel komplett zu exportieren und den Unity Profiler zu verwenden.