Progettare per le prestazioni significa seguire una serie di migliori pratiche mentre costruisci il tuo gioco. Rispetto a trovare e risolvere problemi di prestazioni più avanti nel processo di sviluppo, progettare per le prestazioni fin dall'inizio può farti risparmiare molto tempo e sforzo.
Dispositivi di fascia bassa
I dispositivi di fascia bassa, in particolare i dispositivi mobili, hanno severe limitazioni di memoria e sono suscettibili a crash a causa di errori di memoria insufficiente (OOM):
Se desideri supportare dispositivi di fascia bassa, scegli almeno un dispositivo "di base", testa il tuo gioco su di esso durante il processo di sviluppo e fai particolare attenzione al frame rate e all'utilizzo della memoria. Man mano che scopri aree problematiche nel tuo gioco, utilizza quelle aree per identificare i limiti del tuo dispositivo.
Ad esempio, potresti testare un gioco con le statistiche di debug Render (ShiftF2) e Summary (ShiftF2) abilitate. Se il frame rate inizia a scendere in un'area particolarmente affollata, potresti esaminare i numeri Draw (scene) e determinare che devi rimanere al di sotto di 1.000 chiamate di disegno e 1.000.000 triangoli affinché il gioco funzioni bene sul tuo dispositivo di base.
Oppure potresti esaminare la Console dello sviluppatore (F9) e notare che l'utilizzo della memoria è un po' alto a meno che tu non abiliti lo streaming. Avere una chiara comprensione dei limiti del dispositivo può aiutarti a rimanere al di sotto di essi mentre continui a costruire il tuo gioco.

L'emulatore di dispositivi in Roblox Studio è utile per controllare il rapporto d'aspetto e i controlli, ma non è accurato per l'utilizzo della memoria; quando testi un gioco in Studio, esso esegue il server e il client, quindi l'utilizzo della memoria è significativamente più alto.
In generale, testare su una varietà di dispositivi può aiutarti a verificare che il gioco corrisponda alle tue aspettative visive e di prestazioni a diversi livelli di qualità grafica. Per un esempio molto più dettagliato di come potresti pensare a ottimizzare il tuo gioco per dispositivi mobili di fascia bassa, vedi Ottimizzazione nella costruzione e nella programmazione nel mondo reale.
Streaming e teletrasporto
Lo streaming delle istanze consente a Roblox di caricare e scaricare dinamicamente contenuti 3D ed è una grande opzione per la maggior parte dei luoghi, soprattutto quelli più grandi. Lo streaming migliora i tempi di accesso, riduce l'impronta di memoria e aumenta il frame rate.
Ad esempio, quando abiliti Workspace.EnableSLIMAvatars e imposti la proprietà LevelOfDetail dei tuoi modelli di mondo su SLIM, puoi creare mondi con spazi sociali e eventi affollati che rimangono visivamente popolati pur scalando attraverso un'ampia gamma di capacità dei dispositivi. Per maggiori informazioni, vedi SLIM e Migliora le prestazioni.
Considera di suddividere luoghi grandi in luoghi più gestibili e utilizzare il teletrasporto per spostare i giocatori tra di essi. Questo approccio può ridurre i tempi di accesso iniziali, ma impone ulteriori tempi di accesso man mano che i giocatori si teletrasportano da un luogo all'altro. I benefici per l'utilizzo della memoria variano a seconda delle dimensioni del luogo e se hai abilitato lo streaming.
Anche ignorando considerazioni sulle prestazioni, potresti scoprire che avere più luoghi semplifica il processo di sviluppo, soprattutto se aggiungi regolarmente nuovi contenuti al tuo gioco o fai parte di un team più grande.
Materiali e duplicazione
I materiali incorporati utilizzano molta meno memoria rispetto alle texture personalizzate, ma potrebbero non corrispondere alla tua visione artistica. Cerca di utilizzare materiali ogni volta che è possibile per conservare il budget di memoria per le texture che sono centrali per il tuo gioco.
Man mano che crei risorse, convertile in pacchetti. Rendere i pacchetti parte del tuo flusso di lavoro aiuta a evitare il comune problema delle risorse duplicate con ID diversi, che possono compromettere le prestazioni.
Quando aggiungi mesh e texture, utilizzale e riutilizzale invece di importare copie duplicate. Ridimensionando, ruotando e sovrapponendo, puoi creare ambienti ricchi e vari che richiedono poche chiamate di disegno. Per ulteriori informazioni, vedi Rimuovi le texture duplicate.
Trasparenza
- Evita valori di trasparenza diversi da 0 (visibile) e 1 (invisibile). Quando utilizzi trasparenza parziale, fai particolare attenzione a evitare l'overdraw di alta trasparenza.
Programmazione
Ogni volta che è possibile, scrivi codice basato su eventi piuttosto che calcoli per frame. A 60 FPS, il budget totale per ciascun frame è di 16,67 millisecondi (ms). Anche calcoli apparentemente minori per frame possono utilizzare una porzione significativa di quel budget.
Trova modi per suddividere codice a lungo termine in parti gestibili. Se un pezzo di codice richiede 100 ms per essere eseguito e lo esegui ogni frame, il tuo gioco può funzionare solo a 10 FPS. Se decidi di eseguire il codice solo una volta al secondo in un gioco che altrimenti funziona a 60 FPS, 59 dei tuoi frame arrivano dopo 16,67 ms... e poi uno dopo 100 ms, il che provoca un'irregolarità fastidiosa.
Invece, indaga su come puoi suddividere il codice. Forse puoi eseguire 5 ms di lavoro per frame, utilizzare task.wait() e avere il calcolo completato ogni 20 frame mantenendo comunque 60 FPS. Il multithreading, a volte chiamato Parallel Luau, può anche aiutare.
Usa il metodo RBXScriptConnection:Disconnect() per fermare le funzioni da essere chiamate inutilmente la prossima volta che un evento viene attivato.
Non chiamare lo stesso metodo ogni volta che hai bisogno di un valore. Chiama il metodo una volta, memorizza il valore e poi sovrascrivilo più tardi se necessario.
Non memorizzare tutto in ReplicatedStorage. Il client carica tutto ciò che si trova in questo contenitore. Invece, utilizza ServerStorage per qualsiasi cosa a cui il client non deve avere accesso.