Hola buen día amigos!
He tenido una duda desde hace un tiempo, espero y alguien conozca la solución .
Si tengo un script, por ejemplo:
public class Pocion{
public int Hp = 5;
}
ese script quiero agrégaselo a varios objetos en varias escenas, mi pregunta es la siguiente
¿Existe alguna manera de que si yo muevo la variable en una escena, se modifique también en las otras?
De antemano muchas gracias !
HOla
Cita de: Jorge R. date=1492476452¿Existe alguna manera de que si yo muevo la variable en una escena, se modifique también en las otras?
En las otras... escenas? si cargas nuevas escenas y los objetos no sobreviven (DontDestroyOnLoad) todo vuelve a cero y se carga todo de nuevo (equivalente de destruir el objeto e instanciarlo nuevamente), osea que la respuesta es NO. Es decir Hp viene bajando, se pone en 2, cuando cargas una escena nueva con otros objetos que tenga Porcion todos los hp deberian ser 5.
Pero es muy sencillo solucionarlo,
- podes crear una capa intermedia (manera elegante de decir GameObject vacio) guardando los datos de interes antes de carga la escena y cargandolos en la nueva escena a los objetos de interes (en Unity tutorials hay un ejemplo creo que hace exactamente esto)
- podes hacer que los objetos de interes sobrevivan (con DontDestroyOnLoad()), esta es la mas prolija en mi opinion, aunque el gameObject mantiene absolutamente todos los componentes con los valores que trae, es decir que cuando cargas la nueva escena esta no tiene que tener a ninguno de estos, sino habria clones y estarian todos en diferentes posiciones, un caos.
Yo me manejo con "puntos de entrada", las escenas tienen un simple gameObject vacio para usar su transform, el GameManager encuentra a dicho objeto y, sin importar la escena que arranco instancia al Player(en este caso tiene las variables de interes que quiero pasar de escena a escena) y lo posiciona acordemente. Cuando cargo una nueva escena el Player(que ya tenia el dontdestroyonload) se posiciona en el punto de entrada de dicha escena, y asi con todas, es decir que las escenas no tienen a ninguno de estos objetos de interes (Player en mi caso, porcion/es en el tuyo). En fin, es una manera de verlo.
Tenemos varios objetos (GameObject A, GameObject B, GameObject C, GameObject D, GameObject E, GameObject F), algunos en la misma escena otros en una escena distinta; cada una con el script "Pocion" agregado, es decir son varias instancia de la clase Pocion, osea que cada uno tiene su propia variable Hp, con esto quiero decir que lo que le pase al GameObject E no tiene nada que ver con lo que le pase al GameObject B.
Cita de: Jorge R. date=1492476452¿Existe alguna manera de que si yo muevo la variable en una escena, se modifique también en las otras?
Eso va depender de lo que realmente quieras lograr, una respuesta sencilla seria utilizar la variable Hp como static
Las variables estáticas son comunes a todas las instancias, si modificas una variable estática de una poción en una escena debería guardarse para la siguiente.