Kollisioner

Unity kan kÀnna av en kollision mellan tvÄ objekt, men bara om:

  • BĂ„da objekten har en collider.

  • BĂ„da dessa colliders Ă€r av samma "familj"; en 2d-collider kan inte kollidera med en 3d-collider.

  • Minst ett av objekten har en RigidBody av samma familj.

Med andra ord: För ett 2d-spel, se till sÄ att minst ett av tvÄ objekt som ska kunna kollidera har en rigidbody2d och att bÄda har en 2d-collider.

Om man inte behöver gravitation i sitt spel sÄ kan man Àndra Gravity Scale till 0.

För mer exakt kollisionshantering kan man Àndra Collision Detection till Continuous, Sleeping Mode till Never Sleep och Interpolate till antingen Interpolate eller Extrapolate.

Triggers

Trigger-colliders Àr colliders som inte har nÄgon fysisk nÀrvaro; de hindrar inte förflyttning och saker studsar inte frÄn dem. Man förvandlar en vanlig collider till en trigger genom att kryssa i "Is Trigger".

OnCollisionEnter2D()

Metoden OnCollisionEnter2D anropas nÀr tvÄ objekt kolliderar och bÄda har vanliga 2d-colliders - och minst en av dem har en RigidBody. Om ett objekt har flera scripts med en OnCollisionEnter2D-metod sÄ anropas samtliga.

Dess första parameter innehÄller en referens till kollisionen, som bland annat innehÄller information om det andra objektet.

void OnCollisionEnter2D(Collision2D col)
{
  Debug.Log("OnCollisionEnter2D");
  if (col.gameObject.tag == "bullet")
  {
    Debug.Log("Bullet collision!");
  }
}

I ovanstÄende exempel anvÀnds variabeln col som namn pÄ kollisionen, och man kan dÀrmed komma Ät det andra spelobjektet genom att anvÀnda col.gameObject.

OnTriggerEnter2D()

Om tvÄ objekt kolliderar och bÄda har 2d-colliders, men den ena collidern Àr en trigger, sÄ anropas OnTriggerEnter2D istÀllet för OnCollisionEnter2D. Metoderna fungerar i övrigt nÀstan likadant.

Skillnaden Àr att den första parametern innehÄller en referens till det andra objektets collider, snarare Àn information om kollisionen i sig.

void OnTriggerEnter2D(Collider2D other)
{
  Debug.Log("OnTriggerEnter2D");
  if (other.gameObject.tag == "trap")
  {
    Debug.Log("Trap triggered!!");
  }
}

I praktiken anvÀnds de dock oftast likadant.

OnCollisionEnter()

Fungerar likadant som 2D-versionen, förutom att den anvÀnder sig av RigidBody och vanliga Colliders snarare Àn 2D-versionerna.

void OnCollisionEnter(Collision collision)
{
  Debug.Log("OnCollisionEnter");
  if (col.gameObject.tag == "bullet")
  {
    Debug.Log("Bullet collision!");
  }
}

OnTriggerEnter()

Fungerar likadant som 2D-versionen, förutom att den anvÀnder sig av RigidBody och vanliga Colliders snarare Àn 2D-versionerna.

void OnTriggerEnter(Collider other)
{
  Debug.Log("OnTriggerEnter");
  if (other.gameObject.tag == "trap")
  {
    Debug.Log("Trap triggered!!");
  }
}

Last updated