Tengo una matriz de 3x5 que actúa como un carrete de juego. Primero, busco a través de los símbolos del juego que me interesan (llamémoslos clones salvajes) y luego busco a través de sus elementos secundarios (para ubicar el objeto del juego que tiene la animación) y luego activo esas animaciones.
private IEnumerator EnableWilds(float delayBetweenWildsAppear) { WildSymbol[] wilds = FindObjectsOfType<WildSymbol>(); GameObject[] symbols = new GameObject[wilds.Length]; for (int i = 0; i < wilds.Length; i++) { symbols[i] = wilds[i].gameObject; } for (int i = 0; i < symbols.Length; i++) { if ( symbols[i].name.Contains("(Clone)") ) { int reelIndex = symbols[i].GetComponentInParent<GameReel>().ReelIndex; int indexOnReel = symbols[i].GetComponent<WildSymbol>().IndexOnReel; // ?? for (int j = 0; j < symbols[i].transform.childCount; j++) { if ( symbols[i].transform.GetChild(j).gameObject.name.Contains("MM_wild") ) { symbols[i].transform.GetChild(j).gameObject.SetActive(true); yield return new WaitForSeconds(delayBetweenWildsAppear); } } } } }Empecé a pensar en cómo puedo activar esos comodines comenzando desde la esquina superior izquierda, bajando por el carrete y pasando al siguiente carrete y animando los comodines de arriba a abajo, etc...
Entonces, me di cuenta de que necesito obtener el índice de carrete de cada símbolo (es decir, el número de columna) y el índice en el carrete (es decir, la posición en el carrete), así que voy a Reel1 y luego wild clon 1 y 2 y 3, y luego Reel2 seguido de wild clon 1 y 2 y 3, y así sucesivamente...
Estoy tratando de hacer esto donde puse un // ?? pero en este punto, estoy un poco perdido, conceptualmente. No puedo entender cómo realizar este recorrido.
¿Podría alguien ayudarme con esto, por favor?
Así es como lo resolví yo mismo y luego lo simplifiqué:
private IEnumerator DisableWilds(float delayBetweenWildsDisappear) { WildSymbol[] wilds = FindObjectsOfType<WildSymbol>(); wilds = wilds.Where( (item, index) => item.name.Contains("(Clone)") ) .OrderBy( x => x.GetComponent<WildSymbol>().IndexOnReel ) .OrderBy( x => x.GetComponentInParent<GameReel>().ReelIndex ) .ToArray(); for (int i = 0; i < wilds.Length; i++) { for (int j = 0; j < wilds[i].transform.childCount; j++) { if (wilds[i].transform.GetChild(j).gameObject.name.Contains("MM_wild")) { wilds[i].transform.GetChild(j).gameObject.SetActive(false); yield return new WaitForSeconds(delayBetweenWildsDisappear); } } } }