Noticias

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

Problema con la asociación de un objeto a otro

Iniciado por magicdidac, Noviembre 29, 2015, 11:37:37 AM

Tema anterior - Siguiente tema
Buenos días, tardes, noches,Mi problema es que he hecho dos scripts (Script01 y Script02) y el Script01 contiene una variable que el Script02 utiliza, los dos scripts están en diferentes objetos, para ello he puesto el siguiente codigo:-Script01
public float variableA = 0f;[/quote]-Script02
    public float variableB = 0f;
    public StarAndTicks variable;    void Start(){          variableB = variable.variableA;    }[/quote]https://gyazo.com/939c66bbf4dc845991f983c4078481be (Stat es variable y en variable se añade el objeto que tiene el Script01)Hasta aquí todo bien, pero cuando cambio de escena y vuelvo a cargar la misma escena me pasa lo siguiente: https://gyazo.com/10dda70e494db19f73693a2064c5085ees decir no encuentra el objeto. Soy nuevo en Unity y no se me ocurre la forma de arreglarlo. El objeto que contiene el Script01 tiene otro script que sirve para que el objeto esté en todas las escenas, es decir con todas las variables cambiadas ya que es el controlador que tiene las variables de todo el juego y los objetos cogen las variables de ese ya que cuando te pasas un nivel tiene una variable que hace que en la escena de los niveles le cambie el sprite para que se vea que se ha pasado y con cuantas estrellas, no se si me explico.-El Script es este:
public static ScriptPermanent StatusGame;void Awake(){
        if (StatusGame == null) {
            StatusGame = this;
            DontDestroyOnLoad (gameObject);
        } else if (StatusGame != this) {
            Destroy(gameObject);
        }}[/quote]Se que puede ser lioso pero no encuentro solución a mi problema. Cualquier ayuda será recibida.Gracias de antemano. 

Eso te pasa porque cuando recargas la escena pierde la referencia del objeto.Creo que te entendí, pero no es necesario que uses el DontDestroy si no es necesario.http://docs.unity3d.com/ScriptReference/GameObject.Find.html?from=index" rel="external nofollow">http://docs.unity3d.com/ScriptReference/GameObject.Find.html?from=indexDeberías de hacer en el start:
  variableB = http://docs.unity3d.com/ScriptReference/GameObject.Find.html" rel="external nofollow">GameObject.Find("NombreDelObjetoConVariable.").GetComponent<StarAndTicks>();

[quote author=mrpacogp" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34551" data-ipsquote-contentcommentid="124243">Eso te pasa porque cuando recargas la escena pierde la referencia del objeto.Creo que te entendí, pero no es necesario que uses el DontDestroy si no es necesario.http://docs.unity3d.com/ScriptReference/GameObject.Find.html?from=index">http://docs.unity3d.com/ScriptReference/GameObject.Find.html?from=indexDeberías de hacer en el start:
  variableB = http://docs.unity3d.com/ScriptReference/GameObject.Find.html">GameObject.Find("NombreDelObjetoConVariable.").GetComponent<StarAndTicks>();
[/quote]Haciendo eso me tira un error: https://gyazo.com/ad101d30a4093e783e9c8a8851d22aa4" rel="external nofollow date=1448799502]https://gyazo.com/ad101d30a4093e783e9c8a8851d22aa4

Noviembre 29, 2015, 01:57:22 PM #3 Ultima modificación: Noviembre 29, 2015, 02:00:42 PM por brok
Eso es porque estas intentando convertir un GameObject en float.ValiableB debe ser un GameObject

[quote author=brok" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34551" data-ipsquote-contentcommentid="124245 date=1448801842]Eso es porque estas intentando convertir un gameobject en float.[/quote]Y ¿cómo puedo solucionar mi error?


[quote author=brok" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34551" data-ipsquote-contentcommentid="124247 date=1448802087]VariableB deve ser GameObject.[/quote]Pero quiero que sea un float es decir que quiero utilizar la variable que tiene el otro script y eso lo he conseguido pero el problema es al cambiar de escena no se guarda el objeto que lo contiene es decir que cuando se entra en la escena no tiene asignado el objeto que tiene la variable que busco, por ello no encuentra la variable cuando entras de nuevo no puedes acudir a esa variable.

Cita de: magicdidac date=1448801992" data-ipsquote="" data-cite="magicdidac" class="ipsQuoteY ¿cómo puedo solucionar mi error?
pasando de Unity por el momento y tomandote la molestia de estudiar programacion (empezando por lo mas basico); mas adelante ya tendras tiempo de meterle mano a Unity y la programacion de videojuegos. No hace falta que sigas este consejo, pero haces preguntas que tienen que ver con el ambito de variables, comunicacion entre objetos (instancias de clase, no simplemente gameobjects de unity), vida de los objetos ... y con una evidente falta de resolucion de problemas porque cada vez que te dan una pista pones "Haciendo eso me tira este error" junto a un enlace que imagino sera una imagen hasta que te lo den mascado.no hace falta emplear unos meses en aprender programacion antes de meterse a Unity (o cualquier otro engine), pero comprobaras que si te molestas en aprender programacion ese tiempo habra sido muy bien invertido; luego podras ir haciendo sin estas perdidas de tiempo para ti mismo y cuando te encuentres con un problema de este tipo podras solucionarlo tu solo con los ojos cerrados y sin necesidad de ayuda.

 No puedes poner float = GameObject te dara error siempre intenta que la variable sea static asin puedes interactuar con ella aunque consuma mas recurso pero es mas eficaz a la hora de intentar haceder a ella desde otro script.

[quote author=Arthure" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34551" data-ipsquote-contentcommentid="124250">variableB no debe ser un GameObject, debe ser de tipo StarAndTicks segun el ejemplo que puso el otro genio.pasando de Unity por el momento y tomandote la molestia de estudiar programacion (empezando por lo mas basico); mas adelante ya tendras tiempo de meterle mano a Unity y la programacion de videojuegos. No hace falta que sigas este consejo, pero haces preguntas que tienen que ver con el ambito de variables, comunicacion entre objetos (instancias de clase, no simplemente gameobjects de unity), vida de los objetos ... y con una evidente falta de resolucion de problemas porque cada vez que te dan una pista pones "Haciendo eso me tira este error" junto a un enlace que imagino sera una imagen hasta que te lo den mascado.no hace falta emplear unos meses en aprender programacion antes de meterse a Unity (o cualquier otro engine), pero comprobaras que si te molestas en aprender programacion ese tiempo habra sido muy bien invertido; luego podras ir haciendo sin estas perdidas de tiempo para ti mismo y cuando te encuentres con un problema de este tipo podras solucionarlo tu solo con los ojos cerrados y sin necesidad de ayuda.[/quote]Creo que tienes razón, lo siento es que todavía estoy en bachillerato, el año que viene empezaré la carrera y empece con otro más fácil que c y aprendí ha como resolver los problemas en ese lenguaje pero quería empezar con c quiero empezar a programar de verdad y no perder otro año y quise empezar por unity directamente ya que creí que así aprendería c pero supongo que me equivoco...Gracias a todos igualmente.

[quote author=magicdidac date=1448806126" data-ipsquote="" data-cite="magicdidac" class="ipsQuote">Creo que tienes razón, lo siento es que todavía estoy en bachillerato, el año que viene empezaré la carrera y empece con otro más fácil que c y aprendí ha como resolver los problemas en ese lenguaje pero quería empezar con c quiero empezar a programar de verdad y no perder otro año y quise empezar por unity directamente ya que creí que así aprendería c pero supongo que me equivoco...Gracias a todos igualmente.[/quote]No pretendia desanimar, todo lo contrario y mas teniendo 15-16 añitos ... es muy buena edad para comenzar con la programacion y tienes un monton de tiempo por delante. Si tu intencion es aprender C es una muy buena opcion como lenguaje porque, ademas de ser un lenguaje muy utilizado en multitud de software de desarrollo, saber ese lenguaje luego hara que entiendas rapidamente casi cualquier otro lenguaje; tanto C como Java (no javascript) son la clave.Lo unico en lo que creo que te equivocaste fue en el medio que elegiste: Unity no es para aprender C, es para saber C que es el lenguaje que se utiliza mayormente. Puedes meterte en Unity sin saber previamente C pero comprobaras que iras a paso de tortuga y a la larga tardaras menos si aprendes la base de la POO y luego te metes a Unity que no si te metes directamente a utilizar este engine.Unity es para crear videojuegos, que puede ser el sueño de muchos de los que empiezan a estudiar programacion ... pero por poner un ejemplo con otra carrera, el sueño de muchos que empiezan medicina es ser cirujanos pero tardan tiempo desde que empiezan a estudiar hasta que tocan un simple bisturi y no hablemos hasta el momento de entrar a una sala de operaciones xD. Aunque no por eso debes dejar de estudiar y aprender, y siendo tan jovencito todo te llegara ;)

se acaba de resolver un problema similar hace poco.. de hecho pense que era la misma persona..  saludos  

se acaba de resolver un problema similar hace poco.. de hecho pense que era la misma persona..  saludos  

pero si no lo acabos de solucionar no?   si te salio un nuevo problema trata de usar el mismo tema que usaste la vez pasada... 

Etiquetas: