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, especialmente 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 durante todo el proceso de desarrollo y presta mucha atención a la tasa de fotogramas y al uso de memoria. A medida que encuentres áreas problemáticas en tu juego, utiliza esas áreas para identificar los límites de tu dispositivo.
Por ejemplo, podrías probar un juego con las estadísticas de depuración de Render (ShiftF2) y Resumen (ShiftF2) habilitadas. Si la tasa de fotogramas comienza a caer en una área particularmente saturada, podrías examinar los números de Dibujo (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 mientras continúas construyendo tu juego.

El emulador de dispositivos en Roblox Studio es útil para revisar la relación de aspecto y los controles, pero no es preciso para el uso de memoria; cuando pruebas un juego en Studio, se ejecutan el servidor y el cliente, por lo que el uso de memoria es significativamente más alto.
De manera más general, 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 teleportación
El streaming de instancias permite que Roblox cargue y descargue dinámicamente contenido 3D y es una excelente opción para la mayoría de los lugares, especialmente los más grandes. El streaming mejora los tiempos de entrada, reduce la huella de memoria y aumenta la tasa de fotogramas.
Por ejemplo, cuando habilitas Workspace.EnableSLIMAvatars y estableces la propiedad LevelOfDetail de tus modelos mundiales en SLIM, puedes crear mundos con espacios sociales y eventos concurridos que permanezcan visualmente poblados mientras se escalan en un amplio rango de capacidades de dispositivos. Para más información, consulta SLIM y Mejorar rendimiento.
Considera dividir lugares grandes en otros más manejables y usar teleportación para mover jugadores entre ellos. Este enfoque puede reducir los tiempos de entrada iniciales, pero impone tiempos adicionales de entrada a medida que los jugadores se teletransportan de lugar a lugar. 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 contenido nuevo a tu juego regularmente o eres parte de un equipo más grande.
Materiales y duplicación
Los materiales incorporados 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 centrales 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 IDs, 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 distintos de 0 (visible) y 1 (invisible). Cuando uses transparencia parcial, ten especial cuidado en evitar sobredibujo de alta transparencia.
Scripting
Siempre que sea posible, escribe código impulsado por eventos en lugar de cálculos por fotograma. A 60 FPS, el presupuesto total para cada fotograma es de 16.67 milisegundos (ms). Incluso los cálculos por fotograma que parecen menores pueden usar una parte significativa de ese presupuesto.
Busca formas de dividir el código de larga duración en fragmentos manejables. Si un fragmento de código tarda 100 ms en ejecutarse y lo ejecutas 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 funciona a 60 FPS, 59 de tus fotogramas llegarán después de 16.67 ms... y luego uno después de 100 ms, lo que provoca un salto brusco.
En su lugar, investiga cómo puedes dividir el código. Quizás puedas realizar 5 ms de trabajo por fotograma, usar task.wait(), y tener el cálculo completado cada 20 fotogramas mientras mantienes 60 FPS. Multithreading , a veces llamado Luau paralelo, también puede ayudar.
Utiliza el método RBXScriptConnection:Disconnect() para evitar que se llamen funciones innecesariamente la próxima vez que se dispare 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 sobrescrí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.