🎼
Unity snabbreferens
  • Unity snabbreferens
  • Installation & setup
  • Kompilera och distribuera
  • Unity och git
  • GrundlĂ€ggande koncept
    • Begrepp
    • Ett Unityprojekts uppbyggnad
    • Prefabs och instanser
    • Komponenter
    • Scener
    • MonoBehavior
    • Lager och taggar
    • Knappar och axlar
  • Grundfunktioner
    • Debug och gizmos
    • Datatyper och synlighet
    • Input
      • Action-based Input System
    • Flytta och rotera
    • Kollisioner
    • Skapa och förstör
    • Hitta spelobjekt
    • BestĂ€ndig data
    • Slump
    • Fysik (2D och 3D)
      • Raycasting*
    • UI och Canvas*
    • Importera grafik*
      • Sprite editor*
    • Unity Events
    • Invoke, Couroutines
    • Animationer*
      • AnimationClip*
      • Animator Controller*
  • Andra funktioner
    • Tilemaps*
    • Asset Store
      • AnvĂ€ndbara Assets
    • Package manager
    • Meddelanden
    • CharacterController
    • Scriptable objects*
  • TillĂ€ggspaket
    • AI-Navmesh*
    • Mirror (nĂ€tverk)
    • XR Toolkit
      • Controllers
      • Interaktion*
      • Device Simulator
      • Teleportation
      • Meta Quest 2/3
      • 3D-modeller*
    • MRTK3 (HoloLens 2)
      • Grundkoncept*
      • Simulering
      • Interaktion*
      • Röststyrning
      • UI/UX och Canvas*
      • Spatial awareness*
      • Deployment*
    • MRTK2 (Hololens 1)
    • ProBuilder
  • Tekniker
    • PĂ„verka andra objekt*
    • RutnĂ€t*
Powered by GitBook
On this page
  • Triggers
  • OnCollisionEnter2D()
  • OnTriggerEnter2D()
  • OnCollisionEnter()
  • OnTriggerEnter()

Was this helpful?

  1. Grundfunktioner

Kollisioner

PreviousFlytta och roteraNextSkapa och förstör

Last updated 1 year ago

Was this helpful?

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