He estado investigando la documentación sobre la función Tilemap de Unity 2017.2.
¿Unity limita la cantidad máxima de mosaicos que admitirá para una malla de mosaico en particular?
Sé que cada mosaico se instancia una vez y se usa para texturizar los quads en la malla de Tilemap en tiempo de ejecución, por lo que supongo que el límite de conteo cuádruple de malla depende en última instancia del hardware, y más o menos es arbitrariamente alto.
¿Es una suposición correcta o hay una tapa dura en el motor?
Respuestas:
Tu RAM es tu límite .
Las siguientes pruebas se realizaron en un sistema con estas especificaciones:
Aquí hay un script que ejecuté que hace crecer un mosaico al llenarlo con un único mosaico (32x32 píxeles). El Método
Grow()
agrega otra columna y otra fila al mapa actual. El método se llama 100 veces cada actualización.Después de unos minutos, mi computadora se quedó sin memoria y Unity se bloqueó. En ese momento, estaba en 8400x8400 (70 millones) de mosaicos y Unity.exe consumía un poco más de 11 GB de RAM según el administrador de tareas.
Bueno, pero ¿qué pasa con los mapas dispersos ?
Aquí hay una secuencia de comandos diferente que colocó un único mosaico en el aumento de las coordenadas xey en incrementos de 100 mosaicos:
La huella de memoria de Unity.exe, de hecho, aumentó muy poco, lo que sugiere que las celdas de mosaico vacías casi no requieren RAM. Sin embargo, el FPS siguió cayendo a medida que el conjunto de fichas crecía. Alcanzó 60 Fps a 30000x30000, 30 Fps a 60000x60000 y 15 Fps a 90000x90000. Los Fps se mantuvieron tan bajos cuando eliminé el script mientras se ejecutaba el juego de prueba. Entonces, esta desaceleración no fue por cambiar el mosaico. Fue simplemente por representarlo. Entonces, cuando quieras crear un juego de mundo abierto realmente enorme, es posible que tengas que usar múltiples mapas de fichas más pequeños que creas y destruyes en tiempo de ejecución.
Conclusiones: los mapas de mosaicos enormes pero en su mayoría vacíos no usan mucha RAM, pero son un cuello de botella de representación , incluso cuando la mayor parte no está en la ventana de visualización de la cámara.
Luego experimenté con este script que genera mapas de mosaico con un tamaño dado:
Usé este script para generar un mapa 8192x8192. Tomó unos minutos, pero cuando terminó el guión, se ejecutó a 95 Fps constantes.
Conclusión: los mapas con millones de mosaicos son factibles, al menos en PC para juegos .
fuente
Update
método durante la generación, el juego y el editor de Unity se congelan hasta que finaliza la generación. Si quieres que tu juego responda durante la generación del mapa, muévelo a una rutina que genere un fragmento a la vez y ceda el paso entre ellos.