Diseñar para el rendimiento significa seguir un puñado de mejores prácticas mientras construyes tu juego. En comparación con encontrar y solucionar problemas de rendimiento más adelante en el proceso de desarrollo, diseñar para el rendimiento desde el principio puede ahorrarte mucho tiempo y esfuerzo.
Dispositivos de gama baja
Los dispositivos de gama baja, particularmente los dispositivos móviles, tienen severas limitaciones de memoria y son susceptibles a fallos debido a errores de falta de memoria (OOM):
Si deseas soportar dispositivos de gama baja, elige al menos un dispositivo "base", prueba tu juego en él a lo largo del proceso de desarrollo, y presta especial atención a la tasa de cuadros por segundo y el uso de memoria. A medida que encuentres áreas problemáticas en tu juego, usa esas áreas para identificar los límites de tu dispositivo.
Por ejemplo, podrías probar un juego con las estadísticas de depuración Render (ShiftF2) y Summary (ShiftF2) habilitadas. Si la tasa de cuadros comienza a caer en un área particularmente abarrotada, podrías examinar los números de Draw (escena) y determinar que necesitas mantenerte por debajo de 1,000 llamadas de dibujo y 1,000,000 triángulos para que el juego funcione bien en tu dispositivo base.
O podrías examinar la Consola del Desarrollador (F9) y notar que el uso de memoria es un poco alto a menos que habilites streaming. Tener una comprensión clara de los límites del dispositivo puede ayudarte a mantenerte por debajo de ellos a medida que continúas construyendo tu juego.

El emulador de dispositivos en Roblox Studio es útil para verificar la proporción de aspecto y los controles, pero no es preciso para el uso de memoria; cuando pruebas un juego en Studio, ejecuta el servidor y el cliente, por lo que el uso de memoria es significativamente mayor.
Más generalmente, probar en una variedad de dispositivos puede ayudarte a verificar que el juego coincida con tus expectativas visuales y de rendimiento en diferentes niveles de calidad gráfica. Para un ejemplo mucho más detallado de cómo podrías pensar en optimizar tu juego para dispositivos móviles de gama baja, consulta Optimización de Construcción y Scripting en el Mundo Real.
Streaming y teletransportación
Streaming de instancias permite que Roblox cargue y descargue contenido 3D dinámicamente y es una gran opción para la mayoría de los lugares, especialmente los más grandes. El streaming mejora los tiempos de unión, reduce la huella de memoria y aumenta la tasa de cuadros.
Por ejemplo, cuando habilitas Workspace.EnableSLIMAvatars y estableces la propiedad LevelOfDetail de tus modelos de mundo a SLIM, puedes crear mundos con espacios sociales y eventos concurridos que permanecen visualmente poblados mientras se escalan a través de un amplio rango de capacidades de dispositivos. Para más información, consulta Mejorar el rendimiento.
Considera dividir lugares grandes en otros más manejables y usar teletransportación para mover a los jugadores entre ellos. Este enfoque puede reducir los tiempos de unión iniciales, pero impone tiempos adicionales de unión a medida que los jugadores se teletransportan de un lugar a otro. Los beneficios para el uso de memoria varían dependiendo del tamaño del lugar y si has habilitado el streaming.
Incluso ignorando consideraciones de rendimiento, podrías encontrar que tener múltiples lugares simplifica el proceso de desarrollo, especialmente si agregas regularmente nuevo contenido a tu juego o eres parte de un equipo más grande.
Materiales y duplicación
Los materiales integrados utilizan mucha menos memoria que las texturas personalizadas, pero pueden no coincidir con tu visión artística. Intenta usar materiales siempre que sea posible para conservar el presupuesto de memoria para las texturas que son esenciales para tu juego.
A medida que creas activos, conviértelos en paquetes. Hacer de los paquetes parte de tu flujo de trabajo ayuda a evitar el problema común de activos duplicados con diferentes ID, lo que puede perjudicar el rendimiento.
Cuando agregues mallas y texturas, úsalas y reutilízalas en lugar de importar copias duplicadas. Al redimensionar, rotar y superponer, puedes crear entornos ricos y variados que requieren muy pocas llamadas de dibujo. Para más información, consulta Eliminar texturas duplicadas.
Transparencia
- Evita valores de transparencia que no sean 0 (visible) y 1 (invisible). Cuando uses transparencia parcial, ten especial cuidado de evitar sobrecarga de transparencia alta.
Scripting
Siempre que sea posible, escribe código impulsado por eventos en lugar de cálculos por fotograma. Con 60 FPS, el presupuesto total para cada fotograma es de 16.67 milisegundos (ms). Incluso los cálculos por fotograma que parecen menores pueden utilizar una parte significativa de ese presupuesto.
Encuentra maneras de dividir el código que se ejecuta durante mucho tiempo en fragmentos manejables. Si un fragmento de código tarda 100 ms en ejecutarse y lo ejecutas en cada fotograma, tu juego solo puede funcionar a 10 FPS. Si decides ejecutar el código solo una vez por segundo en un juego que, de otro modo, se ejecuta a 60 FPS, 59 de tus fotogramas llegan después de 16.67 ms... y luego uno después de 100 ms, lo que causa un tartamudeo brusco.
En su lugar, investiga cómo puedes dividir el código. Tal vez puedas realizar 5 ms de trabajo por fotograma, usar task.wait(), y tener el cálculo completado cada 20 fotogramas mientras mantienes los 60 FPS. Multihilo, a veces llamado Luau Paralelo, también puede ayudar.
Usa el método RBXScriptConnection:Disconnect() para detener la llamada de funciones innecesarias la próxima vez que se active un evento.
No llames al mismo método cada vez que necesites un valor. Llama al método una vez, almacena el valor y luego sobreescríbelo más tarde según sea necesario.
No almacenes todo en ReplicatedStorage. El cliente carga todo lo que está en este contenedor. En su lugar, utiliza ServerStorage para cualquier cosa a la que el cliente no necesite acceso.