Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: mutoit en Mayo 23, 2017, 03:11:04 PM

Título: Enviar mensajes cuando objeto es destruido
Publicado por: mutoit en Mayo 23, 2017, 03:11:04 PM
hola, estoy en un proyecto donde me encuentro cada 2 x 3 con este problema, dado que el objeto ya no existe, no se como enviar un mensaje. Llevo poco con unity y no conozco todos los metodos. Los que se, no me sirven.
 
Hay alguna manera de avisar de que el objeto ya no existe para que otro metodo haga uso de esta info ?
 
Gracias
 
 
Título: Enviar mensajes cuando objeto es destruido
Publicado por: francoe1 en Mayo 23, 2017, 04:00:02 PM
En principio, debería de detectar si X objeto existe antes de llamar uno de sus métodos.
 
Por ejemplo, tienes una cámara, que sigue a un Transform, si dicha referencia es nula entonces no se ejecuta ninguna acción dependiente.
 

public class CameraPlayer : MonoBehaviour
{
public Transform Target;
private void LateUpdate()
    {
   if(Target == null)return; //Si el target no esta asignado entonces salir de la funcion.
    }
}

 
Esto seria lo mas simple, si no es lo que buscas entonces estaríamos hablando de CallBack, Eventos, etc.. 
Título: Enviar mensajes cuando objeto es destruido
Publicado por: mutoit en Mayo 23, 2017, 07:06:50 PM
si algo por ahi he intentado, pero me falla al reconocer al portador del scrip, que es un prefab....
 
Pues lo que yo tengo es esto 
 

void OnDestroy()
        {
            if (!portador == null && monedaTocada == true)
                 {
                    Debug.Log("Vas a morir");
                    monedaDestruida = true;
                    Destroy(portador);
                    }
        }

 
el monedatocada se lo da el ontriggerenter cuando entra el player, creo que esta bien el if, si el portador aun existe y ha sido tocado, destruir, no ? pues no lo hace. 
Título: Enviar mensajes cuando objeto es destruido
Publicado por: ManuelUrbanoBen en Mayo 23, 2017, 07:46:04 PM
no se si lo que biscas es algo así pero ps tienes que ver con quien colisiona, ademas tienes que tener el traigger activado del objeto que vas a destruir si en el tienes que se mire la colision, este script iria en la moneda, así te aseguras que existe porque el script estaria asociado a ella. 
 



   
       
   
   
       void OnTriggerEnter(Collider other)
          {
              if (other.gameObject.tag == "colisionador" )
              {
                  Destroy(gameObject);// gameOBject seria tu moneda 
              }
   
   
      }
   
   
       
   

[/quote]
 
 
Título: Enviar mensajes cuando objeto es destruido
Publicado por: lightbug en Mayo 23, 2017, 08:39:42 PM
Cita de: mutoit date=1495559210si algo por ahi he intentado, pero me falla al reconocer al portador del scrip, que es un prefab....
   
   
      Pues lo que yo tengo es esto 
   
   

void OnDestroy()
        {
            if (!portador == null && monedaTocada == true)
                 {
                    Debug.Log("Vas a morir");
                    monedaDestruida = true;
                    Destroy(portador);
                    }
        }

   
      el monedatocada se lo da el ontriggerenter cuando entra el player, creo que esta bien el if, si el portador aun existe y ha sido tocado, destruir, no ? pues no lo hace. 
   


y porque en portador tenes el "!" adelante? ponelo asi
 

if(portador == null && ...)
o
if(!portador && ...)

 
 
Título: Enviar mensajes cuando objeto es destruido
Publicado por: mutoit en Mayo 23, 2017, 09:07:35 PM
vale gracias voy a ir probando estas cosas y en unas horas os cuento ! 
 
puse el signo  ! porque para mi dice asi :  " si portador no es null, entonces existe, si existe y ha sido tocado entonces debes destruirlo. Me equivocado ? 
Título: Enviar mensajes cuando objeto es destruido
Publicado por: lightbug en Mayo 23, 2017, 11:17:20 PM
Cita de: mutoit date=1495566455vale gracias voy a ir probando estas cosas y en unas horas os cuento ! 
   
   
      puse el signo  ! porque para mi dice asi :  " si portador no es null, entonces existe, si existe y ha sido tocado entonces debes destruirlo. Me equivocado ? 
   


ah claro, pense que era alreves la cosa, igual se suele usar el "!=" (distinto) por motivos de claridad mas que nada, y para leerlo es mas sencillo, o sino con solo el negado (o sin negar como tu caso) deberia estar bien, aunque por ahi vi en una de esas conferencias de Unity que querian sacar el ! de c# en los tipos y empezar a usar todo != o == null, yo por las dudas siempre uso null y no los "!...." solos.
Título: Enviar mensajes cuando objeto es destruido
Publicado por: mutoit en Mayo 24, 2017, 12:20:24 AM
hay muchas cosas confusas...sobretodo cuando empiezas como yo.... Muchas gracias  a todos, en resumen, el problema viene cuando quiero ssaber si el objeto esta destruido, y como ya esta destruido, pues nadie sabe nada :)
 
al fina, le puse el detector de colision al player, porque todo esto era solo para hacer sonar un ruido al recojer la moneda. Cuando el player la toca, el manager hace sonar.
 
Y el problema me vino porque de la otra manera,intentando acceder al objeto destruido, le puse un bool para indicar que estaba destruido, entonces reproducia el sonido de manera infinita aunque le puse un else.....supongo que al ya no haber objeto, y su ultimo suspiro fue decir true a esa bool....pues ahi se quedo ! 
 
En fin muchas gracias por las molestias ! ( pero se que voy a preguntar mas cosas....... :P )