Buscar en Unity

Qué NO hacer en Unity: los errores más comunes que deben evitarse

Last updated: December 2018

What you’ll get from this page: A guide that you will want to reference throughout your development. Follow these great tips from Unity field engineer Valentin Simonov that will help you set up a smart and efficient development pipeline, and ultimately ship better and more performant content.

Planificación

The most important part of any software development project because decisions made in the this phase will be difficult to change later on in the development cycle.

Falta de investigación antes de iniciar un proyecto

  • Verifica que todas las funciones planificadas funcionen realmente en todas las plataformas de destino.

The minimally supported devices for your project aren’t specified

  • Define the minimally supported device(s) for your content.
  • Permite que tus equipos de desarrollo y QA puedan acceder a ellos.
  • Haciendo esto, podrás definir un presupuesto realista de rendimiento y frames.

Los presupuestos de frames y assets no se definen en las primeras etapas.

  • Define presupuestos para lo siguiente:
    • modelos — ¿cuántos vértices puede renderizar el dispositivo de destino?
    • assets — ¿qué nivel de detalle deben tener los modelos y las texturas?
    • scripts y renderizado — ¿Qué porcentaje del frame tienes para la lógica, el renderizado, los efectos y otros subsistemas?

Más consejos:

Optimizando el rendimiento de los gráficos

Modelado de caracteres para un rendimiento optimizado

La descomposición de escenas y prefabs (opciones prefabricadas) no se define en las primeras etapas.

... o (en otras palabras) todos trabajan en la misma escena.

  • Divide niveles en escenas (cargadas de forma sumatoria).
  • Mueve objetos separados a los prefabs y edítalos en escenas separadas.
  • Pónganse de acuerdo sobre el principal mecanismo de bloqueo de escenas.

El proceso del pipeline de assets esta deficientemente planificado

Este proceso tiene que ver íntegramente con la obtención de assets según las especificaciones de los artistas que participan del proyecto.

  • De ser posible, haz participar a un artista técnico desde el principio para definir este proceso.
  • Define pautas claras sobre las especificaciones y los formatos de assets.
  • Agrega pruebas de tiempo de importación.

Más consejos:

Guía de las mejores prácticas para el uso de assets de arte

Unity Asset importing

No cuentas con un proceso de Compilación y QA perfectamente dispuesto

  • Set up a build machine, or, turn on and set up Unity Teams.
  • ¿Cómo se publicará una función en la compilación de versiones?
  • ¿Cómo se prueban las nuevas compilaciones?
  • ¿Estas pruebas están automatizadas?
  • ¿Se registran las estadísticas?

Unity setup Cloud Build

El proyecto no se inicia desde cero después de los prototipos iniciales

After building a prototype and getting it approved by the management, strongly consider starting it from scratch.

  • Las decisiones tomadas durante la creación de prototipos suelen favorecer la velocidad.
  • Basar tu juego en un conjunto de desarrollos realizados en una hackatón no es un buen comienzo para ningún proyecto.

Unity-best-practices-planning

Desarrollo

Las prácticas incorrectas y los errores cometidos durante el desarrollo ralentizan al equipo y socavan la calidad del producto final.

El control de la versión se configuró incorrectamente

  • Usa la serialización de textos (predeterminada en Unity).
  • Set up built-in YAML merge tool. See more about SmartMerge aquí.
  • Set up commit hooks. See more aquí.

El Servidor Caché no se utiliza

Los datos estáticos se guardan en archivos JSON o XML

  • Como consecuencia de ello, la carga es lenta.
  • El parsing genera basura.
  • Instead, for built-in static data use ScriptableObjects with custom editor tools.

El proyecto contiene assets y plugins no utilizados, además de bibliotecas duplicadas

Hay una gran probabilidad de que los assets no utilizados en tu proyecto se estén incorporando al juego. Asegúrate de no dejar basura en tu proyecto —si configuras un sistema de control de versiones, la restauración de archivos tendría que ser sencilla—.

  • Verifica qué assets con dependencias de la Asset Store se arrastran al proyecto. Tal vez te sorprenda descubrir que tienes 5 bibliotecas JSON distintas en el proyecto.
  • Assets y scripts desactualizados de prototipos anteriores.
  • The practice of moving old assets to "removed" folder still results in resources and scripts being built into the game.

Las acciones repetitivas requieren un trabajo manual

  • Por cada tarea repetitiva debería haber un script que la automatice.
  • Make sure that you can "play" the game or interactive content from any scene.
  • Automate all the steps of build process, so that the application can be built with Cloud Build or locally with a press of a button.

Perfilado de tu proyecto en el Editor únicamente

  • Always profile the content on your target device; if you profile in the Editor only, you can miss actual performance bottlenecks.

Profiler (Perfilador) de Unity

Cuando no se utiliza las herramientas de perfilado y depuración incorporadas y propias de la plataforma

Más consejos:

Optimizaciones generales del rendimiento

Consejos para el perfilado y la optimización del shader

Unity frame debugger

El perfilado y la optimización se realizan demasiado tarde en el ciclo de desarrollo

  • Cuanto más esperas para realizar el perfilado, mayores sonn los costos de rendimiento.
  • Empieza con el perfilado en las primeras etapas, lo que te garantiza que tu proyecto encaje en los presupuestos de frames, memoria y tamaño del disco.

La optimización no se basa en los datos de prueba

  • Asegúrate de optimizar los cuellos de botella reales
  • Usa las Herramientas arriba especificadas para recopilar los datos correctos.

Sin conocimiento suficiente de tu plataforma de destino

  • Asegúrate de tener un conocimiento suficiente de tu plataforma de destino.
  • Las plataformas de escritorio, dispositivos móviles y consolas tienen cuellos de botella muy distintos.

Unity best practices development

Configuración de assets

Los assets (modelos, texturas, sonidos) ocupan la mayor parte del tamaño de tu juego. Tener una sola malla incorrecta en el proyecto puede invalidar todas las optimizaciones que tus programadores hayan realizado.

Los atlas de sprites no están correctamente configurados

  • Use 3rd-party tools (like Texture Packer) to create atlases or group sprites together in Unity. This will reduce the number of draw calls in the game.

Las configuraciones de textura no están configuradas correctamente

  • Asegúrate de que conoces las configuraciones de textura correctas para la plataforma de destino:
    • ¿Qué compresión soporta la plataforma?
    • ¿Las texturas necesitan mip maps?
  • Set up an automated way to apply these settings for new textures using API AssetPostprocessor as shown by este proyecto
  • Evita que los artistas comprometan texturas con configuraciones incorrectas.

Unity Asset import settings

Asset Bundles (paquetes de assets) contiene texturas duplicadas

  • It is easy to make a mistake in setting up Asset Bundles build system. Get good guidelines aquí. It is especially bad for duplicated textures.
  • Use el navegador Asset Bundle to track dependencies.

Unity best practices asset settings

Programación

Las prácticas deficientes y los errores en el desarrollo y la arquitectura de códigos se traducen en una baja productividad.

El código es muy abstracto y difícil de seguir

  • El código de Abstract Enterprise rara vez se justifica.
  • Hace que el código sea más difícil de entender.
  • Se ejecuta con más lentitud e IL2CPP tiene que generar más código.

Las convenciones arquitectónicas no están definidas o están deficientemente documentadas:

  • Evita escribir tu código, por lo que podrás utilizar diferentes métodos para cumplir la misma tarea, por ejemplo, utilizar distintos:
    • Formatos config (archivos, propiedades, assets).
    • Eventos (eventos en Unity, eventos en C#, SendMessage).
  • ¿Qué gerente es responsable de qué objetos?

No hay una comprensión profunda del bucle de frames de Unity

  • Cuando se invoca Awake, OnEnable, Update y otros métodos.
  • Cuando se actualizan las corutinas.
  • Cómo se ejecuta FixedUpdate.

La lógica del script de inicialización se basa en la orden de ejecución de Unity

  • Ya sea "esto funciona de esta manera" o abusando de la orden de ejecución de scripts.

El framerate no se toma en cuenta cuando se crea un script de lógica o animación

  • Usa Time.deltaTime para los scripts independientes FPS.

Más consejos:

3 formas fantásticas de diseñar la arquitectura de un juego con los Scriptable Objects

Obtén una mejor experiencia de creación de scripts

Unity best practices programming

Performance del CPU

High CPU usage results in "laggy" gameplay experience and drains the battery faster.

Unity CPU Profiler

Demasiados scripts tienen el método Update()

  • Native -> Managed calls have some overhead. See esta entrada en el blog for more details.
  • En su lugar, usa administradores personalizados.

Todos los Comportamientos personalizados se heredan de una clase abstracta con métodos Update/Awake/Start definidos

  • Ahora todos tus scripts tienen el método Update().

Todos los sistemas de juego se actualizan con cada cuadro

  • Define how frequently you want to update different systems in your game/content such as:
    • Mover objetos.
    • AI y pathfinding (trazado de camino).
    • Registro y guardado del estado del juego.
    • Other "heavy" systems.

Los datos y las referencias a objetos que se necesitan con frecuencia no se encuentran almacenados en la memoria caché

Datos de la memoria caché que necesitas con frecuencia:

  • Reflexión
  • Find()
  • Camera.main
  • GetComponent()

Los objetos instanciados con frecuencia no están agrupados

  • La creación de instancias de objetos es lenta.
  • Crea grupos de objetos al inicio del juego.
  • Reutiliza los objetos en lugar de crear otros nuevos.

La memoria se asigna en cada cuadro

  • Tarde o temprano, incluso las asignaciones pequeñas en cada cuadro causan un pico en GC.
  • Intenta eliminar TODAS las asignaciones.

Las API de asignación de memoria se utilizan en lugar de las alternativas sin asignaciones

  • LINQ
  • Concatenación de cadenas.
  • API de Unity que devuelven matrices:
    • Physics.RaycastAll, Mesh.vertices, GetComponents, etc.

Más consejos:

Trabaja de una manera óptima con las estructuras de datos en C# y las API de Unity

Unity best practices CPU performance

Rendimiento del GPU

High GPU usage results in low framerate, drains battery faster and the game/content is perceived as "running slow".

Unity GPU Profiler

Para dispositivos móviles: El proyecto tiene demasiada superposición

  • Las GPU de dispositivos móviles solo pueden dibujar cierta cantidad de píxeles por segundo.
  • La superposición es uno de los mayores cuellos de botella del rendimiento en los dispositivos móviles.
  • No dibujes imágenes transparentes innecesarias.
  • Usa mallas más complejas para recortar áreas completamente transparentes.

Para dispositivos móviles: Los shaders son demasiado complejos

  • No utilices Standard Shader en los dispositivos móviles.
  • Crea shaders especializados y personalizados
  • Usa versiones simplificadas o desactiva algunos efectos para los dispositivos de gama baja.

Se utilizan demasiadas luces dinámicas con el Forward rendering

  • Cada luz añade una pasada de renderizado para cada objeto iluminado.

Las configuraciones incorrectas en el proyecto interrumpen el batching dinámico

  • Objects must be "similar" to be dynamically batched.
  • El Frame Debugger (depurador de cuadros) muestra por qué ciertos objetos no fueron sometidos al batching (procesados por lotes).

Los LOD no se utilizan o no se han configurado correctamente

  • LODs let rendering further objects take fewer resources

Más consejos:

Por qué tus draw calls no son sometidas a batching

Mejores prácticas en la optimización de dispositivos móviles

Unity best practices GPU performance

Rendimiento de la UI

La UI de Unity es una herramienta de fácil manejo para el artista, pero también es muy fácil configurarla incorrectamente, lo que ocasionaría un consumo excesivo de recursos del CPU y GPU.

Unity UI

No se toman en cuenta las diferentes resoluciones y razones de aspecto

  • Prueba la UI en dispositivos con distintas resoluciones y razones de aspecto
  • Algunas veces es mejor crear diferentes pantallas UI para los distintos dispositivos

Los elementos animados están en el mismo Canvas (lienzo)

  • Cuando un elemento cambia, el Canvas debe crear una nueva malla combinada
  • En el caso de los Canvas complejos, esto puede resultar costoso
  • Mueve los elementos animados a Canvases separados

"Opening" a new window is not optimized

  • Cuando se crea una nueva ventana o un gran chunk de la UI, el juego experimenta un evidente desfase. Lo recomendable es minimizar este efecto.
  • Haz las ventanas de la UI menos complejas.
  • Divide la UI en partes.
  • Ventanas en la memoria caché.

Las listas contienen grandes cantidades de ítems

  • Reutiliza de forma dinámica los ítems de la lista en lugar de crearlos todos de una sola vez.
  • Crea un Canvas anidado en la lista.
  • Use open source implementations, such as este.

Ver:

Consejos para la optimización de la UI de Unity

Unity best practices UI performance

Mas recursos

¡Debemos saberlo! ¿Te gustó este contenido?

Sí. Que sigan llegando Me da igual. Podría ser mejor

Unity Buffbot está aquí para hacer más fácil tu trabajo

Suscríbete para recibir semanalmente know-how de tecnología y creatividad de expertos de Unity.

Subscribe
Lo tengo

Usamos cookies para brindarte la mejor experiencia en nuestro sitio web. Visita nuestra página de política de cookies si deseas más información.