Indholdsfortegnelse
Animation
I det følgende beskrives hvordan vi kan lave Sprite Sheet Animation (SPA) i Unity. SPA er i sin enkelthed en række af sprites(billeder) der med kort mellemrum bliver vist efter hinanden.
Vi vil i denne animationsøvelse gøre brug af sprite asset : Sunny Land
Denne tutorial er udarbejdet på baggrund af denne video: 2D Animation af Brackeys
Player Animation
- Markér Player i Hieracy (eller Scene)
- Åben animations vinduet ved at: Window → Animation → Animation 1)
click „create“ for at oprette din første animation.
Opret evt. en folder 'Animation' til alle dine animationer, og husk at angive et sigende navn til din animation f.eks „player_walking“ , „player_jumping“, „player_shooting“, „player_idle“ etc. alt efter hvad der animeres.
I Project view kan du nu markere de sprites som skal udgøre din animation. Træk disse sprites ind i dit animation vindow.
Test din animation ved at klikke play-ikonet i animationsvinduet. Som udgangspunkt kører animation meget hurtigt. For at ændre dette kan vi ændre sample rate. Sample rate er ikke vist som default. Vis 'Sample rate' ved at click de tre prikker, og vælg „Show sample rate“ se nedenstående.
Eksperimentér med din sample rate, så animation virker „naturlig“. (Jeg vælger værdien 25)
Tilføj alle de animation du ønsker at anvende for din player som ovenstående..dvs:
- „Create new Clip“
- Navngiv dit nye animations-clip
- Træk sprites ind i Animation vindue
- Juster „Sample Rate“ således animation har den „rigtige“ hastighed
- Animator Controller ( Styrer hvornår en animation skal afspilles )
- Animation clips
Animator Controller
Animator Controller styre hvilke animations der skal afspilles og hvornår. Vælg Windows→Animation→Animator for at vise Animator window.
Animator-vinduet består af en række tilstande (states), samt de animations clips som vi har oprettet:
Tilstandende er:
- Entry (default tilstand ved opstart af Scene)
- AnyState
- Exit
Animator kan påvirkes at dine C# scripts, og der kommunikeres gennem parametre (Parameters) som du kan oprette tilvenstre for Animator vinduet.
Styring af animation
Det er muligt at starte en animation
- Transition (med input parameters)
- Exit time (vente-tid indtil næste animation, typisk disabled )
- Transition duration (tid overlap af animation = 0)
private Animator anim;
I vores PlayerMovement C# script vil vi nu i metoden void start() oprette en reference til vores Animator i unity.
... anim = GetComponent<Animator>(); ...
if (Mathf.Abs(direction) > 0f){ anim.SetBool("isRunning", true); } else { anim.SetBool("isRunning", false); }
Tilføjer her en parameter ved navn 'isRunning' med typen Bool
Enhver transition skal have mindst én condition (betingelse) for at kunne skifte fra en tilstand til en anden. Betingelsen for at skifte fra Idle til Walking animationen er at vores tidligere oprettede parameter 'isRunning' er sat til true.
Vi opretter en condition på transitionen fra Idle til Walking, som vist nedenstående :
Jump animation
Det skal være muligt at foretage et hop (Jump) uanset hvilken state vi befinder os i. Her benytter vi os af anystate state, som eksisterer til netop dette formål.
Opret transition fra anystate til Player_Jump.
husk også her at sætte:
- „Has exit time“ til off
- „transition duration“ til 0 sek.)
For at senere at kunne kommunikere fra C# til animator om hvornår en hop (Jump) animation skal afspilles, oprettes en parameter 'isJumping' af typen Bool i din animamtor. (se billede)
Der skal nu laves en condition på transitionen mellem anystate og Player Jump, vi tester her på om den ny-oprettede parameter 'isJumping' er sat til true. (se billede)
Det skal være muligt for Player, at forlade tilstanden Player_Jump for enten at animere Player_Idle, eller Player_Running. Opret transitioner fra Player_Jump tilstanden, til disse førnævnte tilstande.
Vi skal nu kigge på de conditions (betingelser) fra transition: Player_Jump → Player_Idle samt, transitionen: Player_Jump → Player_Idle
Bemærk at vi her er nødt til at have to betingelser i spil, både om Player er i færd med at hoppe, samt om Player løber eller ej.
Vi benytter nu to 'isRunning' samt 'isJumping' i vores liste af conditions, de skal have nedenstående værdier:
Player_Jump -> Player_Running
| Parameter | Value |
|---|---|
| isJumping | false |
| isRunning | true |
Player_Jump -> Player_Idle
| Parameter | Value |
|---|---|
| isJumping | false |
| isRunning | false |
Nu mangler vi blot at „manipulere“ vores parametre fra vores PlayerMovement C# script.
Styring af parametre fra C#
Vi kan igangsætte en Player_Jump animation ved at ændre parameter 'isJumping' fra PlayerMoveent C# scriptet. Dette gør vi ved at sætte isJumping til true, ved taste tryk (se nedenstående)
if (Input.GetButtonDown("Jump") && isGrounded == true) { rb.velocity = new Vector2(rb.velocity.x, speed); anim.SetBool("isJumping", true); // Player_Jumping animation startes }
Vi forlader Player_Jumping animation når Player igen lander på „jorden“.
private void OnCollisionEnter2D(Collision2D other) { if (other.gameObject.CompareTag("Floor")) { isGrounded = true; anim.SetBool("isJumping", false); // <-- } }










