keenni
August 26, 2022, 5:44pm
1
public class bombscript : MonoBehaviour
{
public float fieldofImpact;
public float force;
public LayerMask LayerToHit;
public GameObject ExplosionEffect;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
OnCollisionEnter2D(Collision2D col);
{
explode();
}
}
void explode()
{
Collider2D[] objects = Physics2D.OverlapCircleAll(transform.position,fieldofImpact,LayerToHit);
foreach (Collider2D obj in objects)
{
Vector2 direction = obj.transform.position - transform.position;
obj.GetComponent<Rigidbody2D>().AddForce(direction * force);
}
GameObject ExplosionEffectIns = Instantiate(ExplosionEffect,transform.position,Quaternion.identity);
Destroy(ExplosionEffectIns,10);
}
void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(transform.position,fieldofImpact);
}
void OnCollisionEnter2D(Collision2D col)
{
Debug.Log("OnCollisionEnter2D");
}
}
You can’t use OnCollisionEnter2D in Update, OnCollisionEnter2D is called automatically. You can try changing your script to something like
public LayerMask LayerToHit;
public GameObject ExplosionEffect;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
void explode()
{
Collider2D[] objects = Physics2D.OverlapCircleAll(transform.position,fieldofImpact,LayerToHit);
foreach (Collider2D obj in objects)
{
Vector2 direction = obj.transform.position - transform.position;
obj.GetComponent<Rigidbody2D>().AddForce(direction * force);
}
GameObject ExplosionEffectIns = Instantiate(ExplosionEffect,transform.position,Quaternion.identity);
Destroy(ExplosionEffectIns,10);
}
void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(transform.position,fieldofImpact);
}
void OnCollisionEnter2D(Collision2D col)
{
Debug.Log("OnCollisionEnter2D");
explode();
}
OnCollisionEnter2D() is a function that is called by Unity itself upon detecting that the object has collided with something, not a function that is called every time Update() is called. So you don’t need to call it in the Update() function.