A ver si lo pillo. Arrastras el script pero luego lo vuelves a recoger de un gameobject en el start. Son iguales los scripts?
HOLA. Si bueno como dije antes en realidad solo extraje una porcion pequeña del codigo (la que ni me anda bien) para no liar.Y tenia varias formas distintas de acceder al script persistente. Y cuando no me funciono correctamente puse todos los objetos en escena para descartar errores ya que todo es instanciado y agregue la linea de "arrastre " y ahora que lo señalas veo que quedo de manera redundante.No estoy delante del pc. Pero no creo que eso afecte (aunque no estoy seguro ya que programar mediante scripts es muy distinto a lo que acostumbra y suelo liarme al cominucarlos entre si)Gracias Y
El problema es que no lo sumas, lo que estás haciendo es asignar:
int total;
int numero1;
int numero 2;
//Esto
total = numero1 + numero2;
//Es diferente a esto otr
total += numero1 + numero2;
En el segundo script está bien que lo tengas así, pero en el primero deberías cambiarlo para que se le sume, claro que se le sumaría todos los frames esa cantidad y empezará a subir muy rápidamente, pero eso ya es otro problema
buenas, no me preocupa la velocidad que se sumaria frame a frame, de hecho esta bien asi aunque seria mejor ajustarla a un tiempo exacto como decima de segundo en vez del fluctuante fps.en lo que escribi arrida de todo en texto el concepto de sumarlo lo puse, pero si yo este script 1 que va en todas las armas o generadores x igual donde el umico dato que tendrian distinto es que en el de arma, coloco un consumo... 10 y en los generadores una generacion....5 para obligar a poner 2 generadores x arma x ejemploque es lo que estaria sumando segun lo que aportas?osea si yo supiese de antemando.... que habran 25 armas y 73 generadores.... en el script persistene colocaria un for que recorra, tome los datos y calcule, pero nose cuantos habra. se me ocurrio poner un contador de objetos similares para decirle al For cuantos items recorrer, pero tambien deberia listar el nombre de cada clon para poder identificarlos individualmente y tomar los datos de cuanto genera cada uno o cuanto gasta cada uno para hacer los calculos pertinentes.espero haber sido claro en el problema base.... sino pensare otra forma de explicarlo que resulte menos confusagracias PD: tal vez se resuelva haciendo algo parecido a lo que opinas..... tomando la variable y sumandole a ella misma lo que quieroscp_calculos.var_Energia_Total_Generada = Energ_Generada //originalscp_calculos.var_Energia_Total_Generada = scp_calculos.var_Energia_Total_Generada + Energ_Generada //si era asi de facil..... me martillo un dedo ! ! cuando llegue al pc lo pruebo con varios items
si estoy segurisimo que es asi, ahora que lo pienso bien y releo mi pregunta me doy cuenta que en la jerarquia puse varios items de ejemplo y solo me tomaba los valores del ultimo de ellos, y claro en cada ciclo reemplazaba los valores leidos en cada item x el siguiente en el orden de jerarquia, hasta el ultimo.el codigo original es larguisimo, hay decenas de variables casi iguales que envian datos y otras que reciben, cuando me trave en esta pavada, se me bloqueo el cerebruto!! confirmo mas tarde pero seguro que vuelvo con el dedo martillado.jajaj saludos
Aver, creo que tienes un pequeño error de concepto, lo que debes hacer es calcular en cada frame los totales que se está generando y consumiendo, no generar y consumir, no sé si entiendes la diferencia. Como dices, los frames fructuan, tendrías que multiplicar por el deltaTime, los resultados no serían exactos y te daría demasiados problemas en general.Te dejo cómo lo haría yo, los he hecho en C# pero bueno, puedes traducirlo fácilmente. He dividido el código en 3 clases/ficheros (recuerda: separación de responsabilidades), un script para los generadores de energía, otro para los consumidores y un gestor encargado de hacer los cálculos:
public class GeneradorEnergia : MonoBehaviour
{
public int CantidadGeneracion;
void OnEnable()
{
// Cuando se crea un nuevo generador, se añade al gestor.
FindObjectOfType<GestorEnergia>().Generadores.Add(this);
}
void OnDestroy()
{
// Cuando se destruye un generador, se elimina del gestor.
FindObjectOfType<GestorEnergia>().Generadores.Remove(this);
}
}
public class ConsumidorEnergia : MonoBehaviour
{
public int CantidadConsumo;
void OnEnable()
{
// Cuando se crea un nuevo consumidor, se añade al gestor.
FindObjectOfType<GestorEnergia>().Consumidores.Add(this);
}
void OnDestroy()
{
// Cuando se destruye un consumidor, se elimina del gestor.
FindObjectOfType<GestorEnergia>().Consumidores.Remove(this);
}
}
public class GestorEnergia : MonoBehaviour
{
// Listados con todos los generadores y consumidores de la escena
public List<GeneradorEnergia> Generadores = new List<GeneradorEnergia>();
public List<ConsumidorEnergia> Consumidores = new List<ConsumidorEnergia>();
// Totales
public int GeneracionTotal;
public int ConsumoTotal;
public int Diferencia;
void Update()
{
// En cada Frame se realizan los cálculos
GeneracionTotal = Generadores.Sum(x => x.CantidadGeneracion);
ConsumoTotal = Consumidores.Sum(x => x.CantidadConsumo);
Diferencia = GeneracionTotal - ConsumoTotal;
}
}
De esta forma, cuando se instancia un nuevo generador/consumidor a la escena, automáticamente se tendrá en cuenta en los cálculos. De igual modo, si un generador/consumidor es destruido, dejará de contar.Espero que te sirva y un saludo.