Diseñar para el rendimiento significa seguir una docena de mejores prácticas a medida que construyes tu experiencia.En comparación con encontrar y solucionar problemas de rendimiento más tarde en el proceso de desarrollo, diseñar para el rendimiento temprano puede ahorrarle mucho tiempo y esfuerzo.
Dispositivos de bajo nivel
Los dispositivos de gama baja, particularmente los dispositivos móviles, tienen graves limitaciones de memoria y son susceptibles a fallos debido a errores de memoria insuficiente (OOM):
Si quieres apoyar dispositivos de gama baja, elige al menos un dispositivo "base" y prueba tu experiencia en él durante todo el proceso de desarrollo, y presta mucha atención a la tasa de marco y al uso de memoria.A medida que encuentras áreas de problemas en tu experiencia, usa esas áreas para identificar los límites de tu dispositivo.
Por ejemplo, puedes probar una experiencia con el Render ( ShiftF2 ) y Estadísticas de depuración de resumen ( ShiftF2 ) habilitadas.Si la tasa de fotogramas comienza a disminuir en una área particularmente desordenada, podrías examinar los números de Dibujo (escena) y determinar que necesitas permanecer por debajo de 1,000 llamadas de dibujo y 1,000,000 triángulos para que la experiencia funcione bien en tu dispositivo de referencia.
O podrías examinar la Consola del desarrollador ( ) y notar que el uso de memoria es un poco alto a menos que actives streaming .Tener una comprensión clara de los límites del dispositivo puede ayudarle a permanecer bajo ellos a medida que continúa construyendo su experiencia.
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 una experiencia en Studio, se ejecuta el servidor y el cliente, por lo que el uso de memoria es significativamente mayor.
Más generalmente, las pruebas en una variedad de dispositivos pueden ayudarlo a verificar que la experiencia coincida con sus expectativas visuales y de rendimiento en diferentes niveles de calidad de gráficos.Para un ejemplo mucho más detallado de cómo podrías pensar en optimizar tu experiencia para dispositivos móviles de gama baja, vea optimización de construcción y programación en el mundo real.
Transmisión y teletransportación
Transmisión de instancias permite que Roblox cargue y descargue dinámicamente contenido 3D 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 velocidad del marco.Para obtener más información, vea Mejora del rendimiento.
Considera dividir grandes lugares en más manejables y usar teletransportación para mover a los jugadores entre ellos.Este enfoque puede reducir el tiempo de unión inicial , pero impone tiempos de unión adicionales a medida que los jugadores se teletransportan de un lugar a otro.Los beneficios para el uso de la memoria varían dependiendo del tamaño del lugar y si has habilitado el streaming.
Incluso ignorando las consideraciones de rendimiento, es posible que encuentres que tener múltiples lugares simplifica el proceso de desarrollo, especialmente si agregas regularmente nuevo contenido a tu experiencia o formas parte de un equipo más grande.
Materiales y duplicación
Los materiales integrados usan mucho menos memoria que las texturas personalizadas, pero es posible que no coincidan con tu visión artística.Trate de utilizar materiales siempre que sea posible para conservar el presupuesto de memoria para las texturas que son centrales para su experiencia.
A medida que creas recursos, conviértelos en paquetes.Hacer que los paquetes sean parte de tu flujo de trabajo ayuda a evitar el problema común de recursos duplicados con diferentes ID, lo que puede afectar el rendimiento.
Cuando agregues mallas y texturas, úsalas y reutilízalas en lugar de importar copias duplicadas.Al cambiar el tamaño, rotar y superponer, puedes crear entornos ricos y variados que requieren muy pocas llamadas de dibujo .Para obtener más información, vea Eliminar texturas duplicadas.
Transparencia
- Evita los valores de transparencia otros que 0 (visible) y 1 (invisible).Cuando uses transparencia parcial, ten especial cuidado de evitar una sobreexposición de transparencia alta.
Programación
Cuando sea posible, escriba código impulsado por eventos en lugar de cálculos por marco.A 60 FPS, el presupuesto total para cada marco es de 16,67 milisegundos (ms).Incluso las aparentemente menores calculaciones por marco pueden usar una porción significativa de ese presupuesto.
Encuentra formas de dividir el código de larga ejecución en pedazos manejables.Si un pedazo de código tarda 100 ms en ejecutarse y lo ejecutas cada marco, tu experiencia solo puede funcionar a 10 FPS.Si decides ejecutar solo el código una vez por segundo en una experiencia que de lo contrario 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 provoca un aturdimiento brusco.
En cambio, investigue cómo puede romper el código.Tal vez puedas realizar 5 ms de trabajo por marco, usar task.wait() , y tener la calculación completada cada 20 marcos mientras aún mantienes 60 FPS.Multithreading, a veces llamado Parallel Luau, también puede ayudar.
Usa el método RBXScriptConnection:Disconnect() para evitar que las funciones se llamen innecesariamente la próxima vez que se active un evento.
No llame al mismo método cada vez que necesite un valor. Llame al método una vez, almacene el valor y luego reemplácelo más tarde según sea necesario.
No almacene todo en ReplicatedStorage.El cliente carga todo lo que hay en este contenedor.En cambio, utilice ServerStorage para cualquier cosa a la que el cliente no necesite acceso.