Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

problemilla al crear List (Generic)

Iniciado por farenhai, Julio 08, 2015, 09:31:20 PM

Tema anterior - Siguiente tema
Julio 08, 2015, 09:31:20 PM Ultima modificación: Mayo 30, 2016, 04:25:38 AM por pioj
¡Buenas a todos!
 
 
 
¡Menudo lío! Intento hacer una lista de int con un dato de varios prefab que tendrán -obviamente- sus propios valores.
 
 
 
En el script 1 (prefabs) tengo la variable:
 



   
      public int armas;
   

[/quote]
 
(sin más complicaciones).
 
En el script 2, que es el que debe devolver el número de armas totales:
 

    void Start () {
        List<int> myCollection = new List<int>();
 
    GameObject [] armerías = GameObject.FindGameObjectsWithTag("Armería");
    armas = world.GetComponent<Country>().armas;
foreach (GameObject armas in armerías )
                {
            myCollection.Add (armas);
                 }
 
int armasTotales= myCollection.Sum();
Debug.Log (myCollection[] + "/" + myCollection[1] );
Debug.Log (armasTotales);
}

 
 
 
El caso es que myCollection[0] y myCollection[1] me salen con el mismo valor, cuando deberían mostrar valores int diferentes en el debug.
 
 
 
Asumo -igual me equivoco- que lo que sucede es que está tomando como referencia el último GameObject que encontró y lo repite tantas veces como (armerías.Length) Siendo eso, precisamente, lo que intentaba resolver a partir del foreach,
 
 
 
¿Cómo hago, pues, para que la lista integre los diferentes valores (y no dé a todos los componentes el mismo valor?
 
 
 
Como siempre, ¡mil gracias!

¡¡¡¡¡Wow!!!!! ¡Que Lío hermano!
 
Empieza mas despacio, ¿Cual es tu necesidad?, ¡estas haciendo una mala implementacion de estructuras!.
 
Dinos que quieres hacer, y te ayudaremos a estructurar tu problema.

Cita de: francoe1 date=1436388672¡¡¡¡¡Wow!!!!! ¡Que Lío hermano!
 
Empieza mas despacio, ¿Cual es tu necesidad?, ¡estas haciendo una mala implementacion de estructuras!.
 
Dinos que quieres hacer, y te ayudaremos a estructurar tu problema.
 
 
jajajaja!
 
Vamos a ver si me explico.
 
Tengo varias ciudades en un mapa. Cada una de estas ciudades tiene un script, que es el que contiene el número de armas (script1).
 
Tengo un segundo script, que es donde quiero almacenar (y, de ser posible, calcular) la información del número de armas total , es decir:
 
Armas en A = 1500 + Armas en B = armas  + Armas en C = 756
 
Total, que pensé hacer una lista y obtener el sumatorio. El caso es que funciona... pero como le da la gana, porque en lugar de hacer:
 
Armas en A = 1500 + Armas en B = armas  + Armas en C = 756
 
lo que hace (según pude comprobar en el primer debug) es:
 
Armas en C = 756 + Armas en C = 756 + Armas en C = 756
 
 
lo que, obviamente, no es lo que estoy buscando xDDD.  
 
No sé si ahora me he explicado un poco mejor    :D

Bien, entonces tenes X Ciudades, que tienen X armas, tu necesidad es saber cuantas armas Existen en Total.

public class Ciudad : MonoBehaviour
{
    public int CantidadDeArmas;
}

Bien, entonces añades tu Componente ciudad a Cada Ciudad, ahora necesitas saber Cuantas armas existen en cada Ciudad entonces debes acceder a cada componente Ciudad y averiguar la cantidad de armas que tienen.

using UnityEngine;
using System.Collections;
 
public class Reportes : MonoBehaviour
{
    public int CantidadDeArmasEnTodasLasCiudades()
    {
        int Result = 0;
        Ciudad[] ciudad = FindObjectsOfType(typeof(Ciudad)) as Ciudad[];
        foreach (Ciudad CurrentCiudad in ciudad) {
            Result += CurrentCiudad.CantidadDeArmas;
        }
        return Result;
    }
}

Listo, Con esto ya sabrías la cantidad de armas que existen en todas las ciudades.

Julio 09, 2015, 10:31:55 AM #4 Ultima modificación: Julio 09, 2015, 10:33:11 AM por farenhai
Vale, un dato que no te he dado:
 
Ya había probado a hacer tal y como habías hecho, pero por motivos de rendimiento, las ciudades se recalculan en 4 oleadas (pues con algo menos de 100 ciudades y múltiples variables que calcular al mismo tiempo, el ordenador se saturaba durante casi 3 segundos al hacerlo en el mismo frame), de manera que  cada vez que hago la suma
 
o bien suma solo lo del grupo, y por tanto:
 
Resultado = Grupo4 (ciudad1+ ciudad2+ ciudad3...)
 
pero
 
Resultado != Grupo1 + Grupo2 + Grupo3 + Grupo4  (lógicamente, puesto que el valor en frame de cada grupo difiere)
 
Por otro lado, si sumara los grupos (de la manera que dices) con independencia de las oleadas, el problema es que habría una desincronía (que es el problema que me ocupa) entre los datos de armas mostrados a nivel de cada ciudad, y la cantidad de armas totales, porque se crea un delay (para el recálculo -3segundos de diferencia entre Grupo1 y Grupo4) de los 3 primeros grupos.
 
Ambos datos son para GUI, con lo que aunque no parezca más que un problema estético, es un problema estético que no puedo ignorar...
 
De ahí que pensara primero en almacenar los datos en un array y hacer el cálculo a partir de ahí. Lo de intentar hacerlo con listas en vez de con array es porque leí (ignoro si es cierto o no, soy novatísimo en todo esto) que las listas son, en líneas generales, más nuevas y eficientes (además de variables en su volumen (¿dinámicas? dios, cuanto concepto nuevo!! xD), que creo que me puede venir bien).
 
El problema es que me da el mismo valor a todos los slots de la lista (aún con independencia de si comparten grupo o no).
 
No sé si he liado más la cosa, o me he conseguido explicar algo... Espero que lo segundo xDDD

Problema resuelto.
 
Al parecer, necesitaba añadir la coletilla "static" a la lista para hacerla disponible a lo largo de toda la corrutina. Con esto y añadiendo una variable por cada una de las "oleadas" (para guardar la información de cada grupo por separado), he conseguido hacer que funcione a la perfección.
 
Muchísimas gracias por la ayuda.
 
¡Un saludo!

Etiquetas: