Progettare per le prestazioni significa seguire una manciata di migliori pratiche mentre costruisci la tua esperienza . Rispetto a trovare e risolvere problemi di prestazioni in seguito nel processo di sviluppo, progettare per le prestazioni in anticipo può risparmiare un sacco di tempo e sforzi.
Dispositivi di fine serie
I dispositivi di fascia inferiore, in particolare i dispositivi mobili, hanno gravi limitazioni di memoria e sono soggetti a crash dovuti a errori di out of memory (OOM):
Se vuoi supportare dispositivi di fascia inferiore, scegli un set di base di dispositivi con alcune caratteristiche di prestazione, testare la tua esperienza su di loro durante il processo di sviluppo e prestare attenzione stretta al tasso di frame e all'utilizzo della memoria. Mentre trovi aree di problemi nella tua esperienza, usa queste aree per identificare i limiti dei tuoi dispositivi.
Ad esempio, potresti testare un'esperienza con il <
L'emulatore del dispositivo in Roblox Studio è utile per controllare il rapporto di aspetto e i Controlli, ma non è accurate per l'uso della memoria; quando si testa un'esperienza in Studio, esegue il server e il client, il che rende l'uso della memoria significativamente più elevato.
In generale, i test su una varietà di dispositivi possono aiutarti a verificare che l'esperienza corrisponda alle tue aspettative visive e di prestazioni in diverse qualità grafica. Per un esempio molto più dettagliato di come potresti pensare di ottimizzare la tua esperienza per dispositivi mobili di fascia bassa, vedi Real World Building and Scripting Optimization .
Streaming e teletrasporto
La串流 dei casi consente a Roblox di caricare e scaricare dinamicamente contenuti 3D e è una grande opzione per la maggior parte delle esperienze, specialmente quelle più grandi. La streaming migliora i tempi di join, riduce la memoria footprint e aumenta le rate di frame. Per ulteriori informazioni, vedi Miglioramento delle prestazioni .
Rompere grandi luoghi in luoghi più gestibili e usare teletrasporto per spostare i giocatori tra di loro.
Materiali e duplicazione
I materiali incorporati utilizzano meno memoria di quanto non facciano le texture personalizzate, ma potrebbero non corrispondere alla tua visione artistica. Cerca di utilizzare i materiali quando possibile per conservare il budget della memoria per le texture che sono centrali nella tua esperienza.
Mentre crei risorse, convertili in pacchetti . Fare i pacchetti parte del tuo flusso di lavoro aiuta a evitare il problema comune dei duplicati con ID diversi, che possono danneggiare le Prestazione.
Quando aggiungi mesh e texture, usali e riutilizzali piuttosto che importare copie duplicate. Ridimensionando, ruotando e sovrapponendo, puoi creare ambienti ricchi e variegati che richiedono pochi draw call . Per ulteriori informazioni, vedi Rimuovi <a href=\"#duplicate\">duplicate texture</a>.
Trasparenza
- Evita i valori di trasparenza diversi da 0 (visibile) e 1 (invisibile). Quando utilizzi la trasparenza parziale, assicurati di prestare particolare attenzione per evitare l'alta trasparenza .
Scripting
Ogni volta possibile, scrivi codice event-based piuttosto che calcoli per-Frame. A 60 FPS, il budget totale per ciascun frame è 16.67 millisecondi (ms). Anche i calcoli per-Frame apparentemente minori possono utilizzare una significativa parte di tale budget.
Trova modi per inserire il codice in tempo reale in pezzi di codice gestibili. Se un pezzo di codice richiede 100 ms per essere eseguito e lo esegui ogni frame, la tua esperienza può essere eseguita solo a 10 FPS. Se decidi di eseguire solo il codice una volta per secondo in un'esperienza che in genere viene eseguita a 60 FPS, 59 dei tuoi frame arrivano dopo 16,
Invece, indaga su come puoi rompere il codice. Forse puoi eseguire 5 ms di lavoro per frame, usare task.wait() e avere il calcolo completato ogni 20 frame mentre mantieni 60 FPS. Multithreading , a volte chiamato Parallel Luau, può anche Aiuto.
Usa il metodo RBXScriptConnection:Disconnect() per impedire che le funzioni vengano chiamate inutilmente la prossima volta che si attiva un evento.
Non chiamare mai lo stesso metodo ogni volta che hai bisogno di un valore. Chiama il metodo una volta, memorizza il valore e poi sovrascriverlo quando necessario.
Non memorizzare tutto in ReplicatedStorage . Il client carica tutto ciò che è in questo container. Invece, usa ServerStorage per qualsiasi cosa che il client non ha bisogno di accesso.