Fysik (2D och 3D)
I Unity Ă€r det fysikmotorn som sköter gravitation och andra fysikaliska krafter, och hindrar objekt frĂ„n att clippa in i varandra. Den sköter dessutom andra kollisioner â sĂ„dana som inte har med fysikaliska krafter att göra alls, utan dĂ€r det bara finns anledning att avgöra ifall tvĂ„ objekt överlappar varandra.
Det finns tvĂ„ helt separata fysikmotorer â 2D och 3D. BĂ„da kan finnas med i samma projekt, men de kan inte pĂ„verka eller kĂ€nna av samma objekt.
Fysikuppdatering
Fysikmotorn uppdaterar normalt inte objektens position varje bildruta, utan har en egen frekvens. Som standard Ă€r denna 50 ggr/sekund. Det gĂ„r att stĂ€lla in under Edit â Project Settings, och sedan Time. DĂ€r finns "Fixed Timestep", som normalt Ă€r 0.02.
Metoden FixedUpdate körs varje fysik-timestep.
Rigidbody/Rigidbody2D
RigidBody-komponenterna Ă€r kĂ€rnan i fysikmotorn. Bara objekt med en RigidBody omfattas av fysikmotorns simuleringar. Undantaget Ă€r objekt som kolliderar med dem â de pĂ„verkas ocksĂ„, om de har rĂ€tt sorts collider.
TL,DR: för att ett objekt ska ges gravitation etc behöver det en RigidBody. För att en kollision ska kunna avlÀsas med kod (eller mÀrkas av i fysikmotorn) behöver minst ett av de inblandade objekten ha en RigidBody.
Velocity
Velocity Ă€r en property som beskriver objektets nuvarande hastighet â hur mycket dess position förĂ€ndras över tid. Man bör vara försiktig med att modifiera den direkt.
AddForce()
AnvÀnds för att applicera ny kraft till en RigidBody, och dÀrmed pÄverka dess Velocity. Hur mycket velocityn pÄverkas beror pÄ vilken ForceMode som anvÀnds och eventuellt pÄ objektets massa.
Unity-enheter fungerar hÀr som meter, och Force-vÀrdet anges i newtons eller newtonsekunder.
ForceMode.Impulse: applicerar en omedelbar mÀngd kraft (kraften som adderas Àr per timestep), och tar massan med i berÀkningen.
ForceMode.Force: applicerar en mÀngd kraft per sekund, och tar massan med i berÀkningen.
ForceMode.VelocityChange: applicerar en omedelbar mÀngd kraft (kraften som adderas Àr per timestep), men struntar i massan.
ForceMode.Acceleration: applicerar en mÀngd kraft per sekund, men struntar i massan.
HÀr Àr en trÄd pÄ Unitys forum som gÄr igenom den exakta matten, för den som vill lÀsa mer.
OBS: För Rigidbody2D-komponenter anvÀnds ForceMode2D istÀllet för ForceMode.
Colliders
En collider Àr en "hit box" som anvÀnds istÀllet för ett spelobjekts faktiska geometri för att se om det kolliderar med nÄgot. För att en kollision mellan tvÄ objekt ska registreras av fysikmotorn behöver bÄda ha en collider.
BoxCollider Àr en collider som Àr format som ett rektangulÀrt block.
SphereCollider Àr en collider formad som ett klot.
CapsuleCollider Àr en collider formad som en cylinder som Àr rundad med halvklot i Àndarna.
BoxCollider2D Àr en 2D-collider formad som en rektangel.
CircleCollider2D Àr en 2D-collider formad som en cirkel.
CapsuleCollider2D Àr en 2D-collider formad som en rektangel med halvcirklar i Àndarna.
Triggers
En collider som Àr markerad som "Is Trigger" agerar inte som ett hinder för kollisioner, men kan anvÀndas för att genom kod kÀnna av ifall ett annat objekts collider överlappar den.
Exempel: NÀr avataren kliver över tröskeln sÄ gÄr larmet och monster instansieras i rummet.
Kollisionsmetoder
Skrivs dessa metoder in i script som Àr knutna till ett objekt med en RididBody/RigidBody2D sÄ anropas de automatiskt nÀr en kollision intrÀffar.
OnTriggerEnter()
En metod som anropas ifall en collider kolliderar med nÄgon av det hÀr objektets trigger colliders.
OnCollisionEnter()
En metod som anropas ifall en collider kolliderar med nÄgon av det hÀr objektets vanliga colliders.
OnTriggerEnter2D()
För objekt med RigidBody2D. En metod som anropas ifall en 2D-collider kolliderar med nÄgon av det hÀr objektets 2D trigger colliders.
OnCollisionEnter2D()
För objekt med RigidBody2D. En metod som anropas ifall en 2D collider kolliderar med nÄgon av det hÀr objektets vanliga 2D-colliders.
Last updated