Leistung zu gestalten bedeutet, eine Handvoll bester Praktiken während Sie Ihr Spiel erstellen, zu befolgen. Im Vergleich dazu, Leistungsprobleme später im Entwicklungsprozess zu finden und zu beheben, kann die frühzeitige Gestaltung für Leistung Ihnen viel Zeit und Aufwand sparen.
Geräte der unteren Preisklasse
Geräte der unteren Preisklasse, insbesondere mobile Geräte, haben erhebliche Speicherbeschränkungen und sind anfällig für Abstürze aufgrund von Heap-Speicherfehlern (OOM):
Wenn Sie Geräte der unteren Preisklasse unterstützen möchten, wählen Sie mindestens ein „Basis“-Gerät, testen Sie Ihr Spiel darauf während des gesamten Entwicklungsprozesses und achten Sie genau auf die Bildrate und den Speicherverbrauch. Wenn Sie Problemzonen in Ihrem Spiel finden, verwenden Sie diese Bereiche, um die Grenzen Ihres Geräts zu identifizieren.
Zum Beispiel könnten Sie ein Spiel mit den aktivierten Render (ShiftF2) und Summary (ShiftF2) Debug-Daten testen. Wenn die Bildrate in einem besonders überlasteten Bereich zu sinken beginnt, könnten Sie die Draw (Szene)-Zahlen überprüfen und feststellen, dass Sie unter 1.000 Zeichenaufrufen und 1.000.000 Dreiecken bleiben müssen, damit das Spiel auf Ihrem Basisgerät gut läuft.
Oder Sie könnten die Entwicklerkonsole (F9) überprüfen und feststellen, dass der Speicherverbrauch etwas hoch ist, es sei denn, Sie aktivieren Streaming. Ein klares Verständnis der Gerätegrenzen kann Ihnen helfen, diese beim weiteren Bau Ihres Spiels einzuhalten.

Der Geräteemulator in Roblox Studio ist nützlich, um das Seitenverhältnis und die Steuerung zu überprüfen, ist jedoch nicht genau in Bezug auf den Speicherverbrauch; wenn Sie ein Spiel im Studio testen, wird der Server und der Client ausgeführt, sodass der Speicherverbrauch erheblich höher ist.
Allgemeiner kann das Testen auf einer Vielzahl von Geräten Ihnen helfen zu überprüfen, ob das Spiel Ihren visuellen und Leistungsanforderungen auf unterschiedlichen Grafikeinstellungen entspricht. Für ein viel detaillierteres Beispiel, wie Sie darüber nachdenken könnten, Ihr Spiel für mobile Geräte der unteren Preisklasse zu optimieren, siehe Echte Weltbau- und Skriptoptimierung.
Streaming und Teleportation
Instanz-Streaming ermöglicht es Roblox, 3D-Inhalte dynamisch zu laden und zu entladen und ist eine großartige Option für die meisten Orte, insbesondere größere. Streaming verbessert die Beitrittszeiten, reduziert den Speicherbedarf und erhöht die Bildrate.
Zum Beispiel, wenn Sie Workspace.EnableSLIMAvatars aktivieren und die LevelOfDetail-Eigenschaft Ihrer Weltmodelle auf SLIM setzen, können Sie Welten mit sozialen Räumen und belebten Veranstaltungen erstellen, die visuell bevölkert bleiben und gleichzeitig über eine breite Palette von Gerätefähigkeiten skalieren. Weitere Informationen finden Sie unter Leistung verbessern.
Erwägen Sie, große Orte in handlichere zu unterteilen und Teleportation zu verwenden, um Spieler zwischen ihnen zu bewegen. Dieser Ansatz kann anfängliche Beitrittszeiten reduzieren, bringt jedoch zusätzliche Beitrittszeiten mit sich, während Spieler von Ort zu Ort teleportieren. Die Vorteile für die Speichernutzung variieren je nach Größe des Ortes und ob Sie das Streaming aktiviert haben.
Selbst unabhängig von Leistungsaspekten könnten Sie feststellen, dass mehrere Orte den Entwicklungsprozess vereinfachen, insbesondere wenn Sie regelmäßig neue Inhalte zu Ihrem Spiel hinzufügen oder Teil eines größeren Teams sind.
Materialien und Duplikation
Eingebaute Materialien verbrauchen viel weniger Speicher als benutzerdefinierte Texturen, entsprechen jedoch möglicherweise nicht Ihrer künstlerischen Vision. Versuchen Sie, Materialien wann immer möglich zu verwenden, um das Speicherbudget für die für Ihr Spiel zentralen Texturen zu sparen.
Während Sie Assets erstellen, verwandeln Sie sie in Pakete. Pakete Teil Ihres Workflows zu machen, hilft, das häufige Problem von doppelten Assets mit unterschiedlichen IDs zu vermeiden, was die Leistung beeinträchtigen kann.
Wenn Sie Meshes und Texturen hinzufügen, verwenden und wiederverwenden Sie sie, anstatt Duplikate zu importieren. Durch Größenanpassung, Rotation und Überlagerung können Sie bereichsreiche, vielfältige Umgebungen erstellen, die sehr wenige Zeichenausrufe benötigen. Weitere Informationen finden Sie in Entfernen doppelter Texturen.
Transparenz
- Vermeiden Sie Transparenzwerte außer 0 (sichtbar) und 1 (unsichtbar). Wenn Sie teilweise Transparenz verwenden, seien Sie besonders vorsichtig, hohe Transparenzüberschneidungen zu vermeiden hohen Transparenzüberschneidungen.
Skripting
Schreiben Sie so oft wie möglich ereignisgesteuerten Code anstelle von Berechnungen pro Frame. Bei 60 FPS beträgt das gesamte Budget für jeden Frame 16,67 Millisekunden (ms). Selbst scheinbar geringfügige Berechnungen pro Frame können einen erheblichen Teil dieses Budgets verbrauchen.
Finden Sie Möglichkeiten, langwierigen Code in handhabbare Teile zu zerlegen. Wenn ein Codeblock 100 ms zur Ausführung benötigt und Sie ihn in jedem Frame ausführen, kann Ihr Spiel nur mit 10 FPS laufen. Wenn Sie sich entscheiden, den Code nur einmal pro Sekunde in einem Spiel auszuführen, das ansonsten mit 60 FPS läuft, erreichen 59 Ihrer Frames nach 16,67 ms... und dann einer nach 100 ms, was zu einem ruckhaften Stottern führt.
Untersuchen Sie stattdessen, wie Sie den Code aufteilen können. Vielleicht können Sie in jedem Frame 5 ms Arbeit leisten, task.wait() verwenden und die Berechnung alle 20 Frames abschließen, während Sie weiterhin 60 FPS halten. Multithreading, auch Parallel Luau genannt, kann ebenfalls helfen.
Verwenden Sie die Methode RBXScriptConnection:Disconnect(), um zu verhindern, dass Funktionen unnötig beim nächsten Auslösen eines Ereignisses aufgerufen werden.
Rufen Sie nicht jedes Mal die gleiche Methode auf, wenn Sie einen Wert benötigen. Rufen Sie die Methode einmal auf, speichern Sie den Wert und überschreiben Sie ihn später nach Bedarf.
Speichern Sie nicht alles in ReplicatedStorage. Der Client lädt alles, was sich in diesem Container befindet. Verwenden Sie stattdessen ServerStorage für alles, worauf der Client keinen Zugriff benötigt.