¿Cuándo debo marcar GameObjects como estático?

9

Aquí está la documentación correspondiente de Unity .

Según las explicaciones de las páginas de documentación de Unity sobre los GameObjects estáticos, a veces marcar GameObjects como estáticos puede afectar el rendimiento de manera negativa (por ejemplo, el procesamiento por lotes estático causa más uso de memoria) .

Entonces, ¿cuándo debería exactamente querer usar estas funcionalidades?

Gracias por adelantado.

Notas al pie:
Actualmente estoy desarrollando un juego 2D de arriba hacia abajo que tiene muchos Sprites y LineRenderers, pero no objetos 3D (ni siquiera un quad). Todos los GameObjects se instancian procesalmente desde prefabricados prefabricados. Los LineRenderers se actualizan a partir de los scripts de cada cuadro. Y casi todos los Sprites se mueven constantemente. La mayoría de los Sprites comparten el mismo material. Todos los LineRenderers también comparten el mismo material.

S. Tarık Çetin
fuente
1
NO PARA ÁRBOLES EN BOSQUES. Fuimos mordidos por eso malo. LARGOS tiempos de construcción, datos MASIVOS en sus niveles. Nota: los documentos sobre esto indican específicamente que no debe usarlo para bosques. :)
Almo
@Almo estoy con un chico, puedo entender este dolor
Hamza Hasan

Respuestas:

6

No hay una regla estricta sobre cuándo debe o no hacer que GameObjects sea estático.

Por lo menos, solo hazlo con objetos que nunca se moverán en su vida. Pero debe saber qué hace para evaluar si debe o no.

Congela la malla en los datos de la escena, por lo que no tiene la sobrecarga del GameObject para el elemento. Esto significa un aumento del rendimiento a costa de alterar los datos de la escena en el momento de la compilación y un costo adicional de memoria para la aplicación final compilada.

Esto está bien en muchos casos, aunque puede causar problemas, por ejemplo con los bosques. Además, significa que en lugar de almacenar los verts para el árbol una vez y las copias del dibujo de la GPU, tiene que duplicar esos verts por todo el lugar. Eso lleva tiempo durante la compilación y espacio en la aplicación. Nuestra aplicación pasó de 3-4 GB a 300-400 MB cuando hicimos los árboles no estáticos. El tiempo de construcción pasó de 3-4 horas a 1 hora.

Habiendo dicho todo eso! Su juego es 2d, y probablemente se beneficiaría de configurar GameObjects en escenas como estático, siempre que no tenga toneladas de ellos.

Almo
fuente
¿Hacer que la prefabricada estática también haga que las instancias sean estáticas?
S. Tarık Çetin
No si los instancia en tiempo de ejecución ... ¿Cómo pueden ser "estáticos"? Tal vez me equivoque ... Lo comprobaré.
Almo
2
Acabo de confirmar que, si prefab está marcado como estático, las instancias instanciadas también lo son.
S. Tarık Çetin
1

Si digo en general, todo lo que nunca se moverá (ni siquiera un píxel) en toda la vida de la aplicación debería marcarse como estático. Por lo general, es útil para hornear luces, hornear rutas de navegación, etc.

Bueno, si está desarrollando sin objetos 3D, simplemente relájese y relájese. No necesita preocuparse por el renderizado en tiempo real, las sombras o cualquier otro problema. Incluso eliminar la única luz viene con una nueva escena;)

Bueno, cualquiera puede corregirme si me equivoco en cualquier lugar.

Hamza Hasan
fuente
3
Esto es realmente incorrecto para cosas como los bosques. Reduce las llamadas de atracción ... pero hornea todos los árboles en la malla. Esto significa que en lugar de almacenar los verts para el árbol una vez y las copias de dibujo de la GPU, tiene que duplicar esos verts por todo el lugar. Eso lleva tiempo durante la compilación y espacio en la aplicación. Nuestra aplicación pasó de 3-4 GB a 300-400 MB cuando hicimos los árboles no estáticos.
Almo
@Almo huggggeeeeee diferencia
Hamza Hasan
Creo que deberías aclarar al comienzo de tu respuesta que estás recomendando esto solo porque es un juego 2D.
Almo
@Almo Gracias a ti, ahora creo que el procesamiento por lotes estático es algo dañino al tacto, como un horno del que no puedes estar seguro si está caliente o no. :)
S. Tarık Çetin
@Almo no dude en editar este hermano, si lo necesita. Adelante
Hamza Hasan