Progettare per le prestazioni significa seguire una manciata di migliori pratiche mentre costruisci il tuo gioco. Rispetto a trovare e risolvere problemi di prestazioni in un secondo momento nel processo di sviluppo, progettare per le prestazioni sin dall'inizio può farti risparmiare molto tempo e sforzo.
Dispositivi di fascia bassa
I dispositivi di fascia bassa, in particolare quelli mobili, hanno gravi limitazioni di memoria e sono suscettibili a crash a causa di errori di memoria esaurita (OOM):
Se desideri supportare dispositivi di fascia bassa, scegli almeno un dispositivo "di base", testa il tuo gioco su di esso durante tutto il processo di sviluppo e presta particolare attenzione al frame rate e all'uso 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) attivate. Se il frame rate inizia a scendere in un'area particolarmente affollata, potresti esaminare i numeri Draw (scene) e determinare che devi rimanere sotto 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 Sviluppatore (F9) e notare che l'uso della memoria è un po' alto a meno che tu non abiliti il 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 dispositivo in Roblox Studio è utile per controllare il rapporto d'aspetto e i controlli, ma non è preciso per l'uso della memoria; quando testi un gioco in Studio, esegue il server e il client, quindi l'uso della memoria è significativamente più alto.
In generale, testare su una varietà di dispositivi può aiutarti a verificare che il gioco soddisfi le tue aspettative visive e di prestazioni a diversi livelli di qualità grafica. Per un esempio molto più dettagliato su come potresti pensare di ottimizzare il tuo gioco per dispositivi mobili di fascia bassa, vedi Ottimizzazione della Progettazione e Scripting nel Mondo Reale.
Streaming e teletrasporto
Lo streaming di istanze consente a Roblox di caricare e scaricare dinamicamente contenuti 3D ed è un'ottima opzione per la maggior parte dei luoghi, specialmente quelli più grandi. Lo streaming migliora i tempi di ingresso, 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 visualmente popolati mentre si adattano a una vasta gamma di capacità dei dispositivi. Per ulteriori informazioni, vedere Migliora le prestazioni.
Considera di suddividere grandi luoghi in altri più gestibili e utilizzare il teletrasporto per spostare i giocatori tra di essi. Questo approccio può ridurre i tempi di ingresso iniziali, ma impone tempi di ingresso aggiuntivi man mano che i giocatori si teletrasportano da un luogo all'altro. I benefici per l'uso della memoria variano a seconda della dimensione del luogo e se hai abilitato lo streaming.
Anche ignorando le considerazioni sulle prestazioni, potresti scoprire che avere più luoghi semplifica il processo di sviluppo, specialmente se aggiungi regolarmente nuovi contenuti al tuo gioco o fai parte di un team più ampio.
Materiali e duplicazione
I materiali predefiniti utilizzano molta meno memoria rispetto alle texture personalizzate, ma potrebbero non corrispondere alla tua visione artistica. Prova a utilizzare materiali ogni volta che è possibile per preservare il budget di memoria per le texture che sono centrali per il tuo gioco.
Man mano che crei asset, converti in pacchetti. Rendere i pacchetti parte del tuo flusso di lavoro aiuta ad evitare il comune problema degli asset duplicati con ID diversi, che possono danneggiare le prestazioni.
Quando aggiungi mesh e texture, usale e riusale invece di importare copie duplicate. Ridimensionando, ruotando e sovrapponendo, puoi creare ambienti ricchi e vari che richiedono pochissime chiamate di disegno. Per ulteriori informazioni, vedere Rimuovi texture duplicate.
Trasparenza
- Evita valori di trasparenza diversi da 0 (visibile) e 1 (invisibile). Quando utilizzi la trasparenza parziale, fai attenzione ad evitare l'overdraw di alta trasparenza.
Scripting
Ogni volta che è possibile, scrivi codice basato su eventi piuttosto che calcoli per frame. A 60 FPS, il budget totale per ogni frame è di 16.67 millisecondi (ms). Anche i calcoli per frame che sembrano minori possono utilizzare una parte significativa di quel budget.
Trova modi per suddividere il codice che richiede molto tempo in parti gestibili. Se un pezzo di codice richiede 100 ms per l'esecuzione 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 uno scossone doloroso.
Invece, indaga come puoi suddividere il codice. Forse puoi eseguire 5 ms di lavoro per frame, usare 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 la chiamata di funzioni inutilmente ogni volta che si attiva un evento.
Non chiamare lo stesso metodo ogni volta che hai bisogno di un valore. Chiama il metodo una volta, memorizza il valore e poi sovrascrivilo successivamente se necessario.
Non memorizzare tutto in ReplicatedStorage. Il client carica tutto ciò che si trova in questo contenitore. Invece, usa ServerStorage per qualsiasi cosa a cui il client non deve avere accesso.