Tengo un sistema que mira una imagen, toma cada píxel y genera un bloque para representar cada píxel. Actualmente estoy en el proceso de optimizar esto mediante la creación de un sistema de combinación de mallas para que todos los miles de objetos cúbicos sean, en cambio, una malla única.
He estado siguiendo este video para hacerlo: https://www.youtube.com/watch?v=NcmPz_nbArY
Esencialmente, el problema que tengo es que cuando se genera un cubo, intento agregarlo a una matriz de objetos de juego en la posición del contador de la matriz (que comienza en 0). Sin embargo, siempre me arroja este error:
IndexOutOfRangeException: Index was outside the bounds of the array. (wrapper stelemref) System.Object.virt_stelemref_sealed_class(intptr,object)Simplemente no entiendo cómo. La matriz comienza en la posición 0, le digo que establezca un objeto de juego en la posición del contador de matriz que es 0 inicialmente. Incluso arrojar un Debug.Log (arraycounter) muestra que el valor es 0, pero aún se arroja el error.
El objetivo de la matriz es actuar como un parámetro que se puede incluir en la función CombineGroundMeshes() para que la función sepa para qué objetos necesita combinar mallas.
Inicialmente, habría 2 funciones, una para combinar mallas de suelo y otra para combinar mallas de pared, pero he recurrido a todo lo relacionado con mallas de suelo hasta que se soluciona este problema. ¡Así que no se confunda por qué hay 3 declaraciones if para píxeles de diferentes colores que van a la misma matriz!
Mi código fuente completo se puede encontrar en este pastebin. https://pastebin.com/sYjmzsnz
El problema se puede ubicar en las líneas 105 a 144. Donde ocurre el error es en las líneas 118, 129 y 140.
EDITAR: ¿Alguien pidió una versión mini de mi código? He hecho todo lo posible a continuación para resumirlo.
public GameObject[] groundObjects; ... foreach(Vector3 pos in spawnpositions) counter = 1 arraycounter = 0 Color colour = pixel[counter]; if(colour.equals(Color.White)) { //instantiate gameobject as a transform //change transforms localscale groundObjects[arraycounter] = spawnedTransform.gameObject; // The above line is causing the error (Unity console log) } counter++; arraycounter++; ... for (int i = 0; i < groundObjects.Length; i++) { CombineGroundMeshes(groundObjects[i]); }