Jump to content
Argantonio

Colisionador y destructor, ayuda.

Recommended Posts

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");
    }
}

 

 

Edited by pioj
Por favor, usa el <> o el "quote" para pegar código.

Share this post


Link to post
Share on other sites
1 hour ago, Argantonio said:

¿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

  • Like 1

Share this post


Link to post
Share on other sites

Gracias lightbug, voy a probar y te cuento :91_thumbsup:

:1_grinning: Genial! Lo dejé así y funciona. Ahora a por el contador y casi tengo terminado mi primer proyecto.:96_ok_hand:

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

 

Edited by pioj
Por favor, usa el <> o el "quote" para pegar código.

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...