Noticias

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

Temas recientes

Colisionador y destructor, ayuda.

Iniciado por Argantonio, Enero 24, 2019, 09:44:13 PM

Tema anterior - Siguiente tema
Enero 24, 2019, 09:44:13 PM Ultima modificación: Enero 24, 2019, 10:34:26 PM por pioj
Hola a todos. Tengo un 'colisionador' (un gameobject con un BoxCollider2d y un RigidBody2d), en el tengo asignado este script para detectar las colisiones que funciona bien, pero me gustaría que el sprite que pasa sobre este 'colisionador' sea destruido. He intentado algunos métodos pero estoy muy verde aún... ¿Qué debo implementar en el? Gracias.
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Colisionador : MonoBehaviour {
public void OnTriggerEnter2D(Collider2D trigger){
Debug.Log ("fallo");
    }
}

 
 
 
 

Cita de: Argantonio date=1548362653¿Qué debo implementar en el?
   


primero definir que es destruir para vos, podrías tener un conjunto de funcionalidades que definen al proceso de destrucción (en absolutamente todo juego, incluso el más pedorro ocurre esto), un ejemplo:
 


  •    se inicia el proceso de "Destrucción" (con la llamada de DestroySprite() ponele, la inventé )


  •    se agrega un script, típico del KillMe y le ponés unos segundos (o usas la instrucción Destroy(gameObject , tiempo) )


  •    se instancian unas particulas de efecto


  •    se reproduce un sonido


  •    Se reproduce una animación


  •    etc


luego en el Ontrigger lo unico que hacés es obtener la referencia del objeto desafortunado, y llamás al método DestroySprite() ... obviamente podrías haber llamado a Destroy (de unity), de nuevo nadie hace esto pero para probar está bien ...  o hacer todo lo de arriba en el mismo trigger para cada objeto , pero queda poco práctico , y además porqué el destructr debe conocer esa información ??.
 
Para encontrar la referencia del objeto y llamar al método es:
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Colisionador : MonoBehaviour {
public void OnTriggerEnter2D(Collider2D trigger)
{
   // tenés trigger arriba, usalo, con ".gameObject" accedés al GameObject del objeto que colisiona
   GameObject target = trigger.gameObject;
   // 1 - ------------------- Si solamente vas a llamar a Destroy (de unity) -----------
   // una vez que colisiones ya lo llamás, (o aplicá antes los if's que creas necesarios)
   Destroy( target );  
   
   // 2 - --------- Si vas a usar el método de arriba (DestroySprite) -----------
   // vamos a suponer que el método para destruir es público y está en el componente "Health"
   // se define la referencia para luego verificar que exista, se podría dar que colisiones con algo que no tenga "Health"
   Health targetHealth = target;
   if(target != null)
   {
      // con el super método descripto arriba
      target.DestroySprite();         
   }
    }
}

 
lo escribí así nomas, puede haber errores.
 
Saludos

Enero 24, 2019, 11:25:22 PM #2 Ultima modificación: Enero 25, 2019, 12:25:33 AM por pioj
Gracias lightbug, voy a probar y te cuento 
 


public class Colisionador : MonoBehaviour {

  public void OnTriggerEnter2D(Collider2D trigger) {
GameObject target = trigger.gameObject;
Destroy( target );
}
}

 
 

Etiquetas: