I denna guide går vi igenom hur du skapar en spelkaraktär med rörelser och animationer i Unity, steg för steg.
Börja med att importera ditt sprite sheet. I denna guide används Frog från Pixel Adventure 1.

Markera huvud spriten till jump idle och run och ställ in Pixel per unit till 32 och tryck på apply på dem annars blir de väldigt små.

Du behöver även klicka på sprite editor och dela upp ( slicea) spriten. ställ in Type till grid by size och 32 tryck på slice och sedan på apply.

PlayerGround och sätt spriten till en Square-spriteSkapa tre animationer för spelaren. Markera Player i Hierarchy och öppna Animation-fönstret (Window → Animation → Animation).
Skapa följande animationer:
| Animation | Beskrivning |
|---|---|
Idle |
Stillastående |
Run |
Springer |
Jump |
Hoppar |
För varje animation:

Öppna Animator-fönstret (Window → Animation → Animator) och skapa övergångar mellan animationerna.
Lägg till följande Parameters:
| Parameter | Typ |
|---|---|
speed |
Float |
isGrounded |
Bool |
Skapa övergångarna:
speed är större än 0.1speed är mindre än 0.1isGrounded är falseisGrounded är true
💡 Kom ihåg att avmarkera Can Transition To Self och Has Exit Time på övergångarna för smidigare animationer.
Markera Player i Hierarchy och lägg till följande komponenter i Inspector:
För att hoppa ska fungera behöver spelaren veta vad som är mark.
Ground i HierarchyGroundGround-lagret till ditt markblock⚠️ Se till att
Playerinte harGround-lagret, annars kan den känna av sig själv som mark.

PlayerMovementPlayer i Hierarchyusing UnityEngine;
using UnityEngine.InputSystem;
// Hanterar spelarens rörelse, hopp och animation
public class PlayerMovement : MonoBehaviour {
[SerializeField] private LayerMask groundLayer; // Lagret som räknas som mark
// Komponenter som hämtas från samma GameObject
private Rigidbody2D body;
private Collider2D coll;
private Animator anim;
private SpriteRenderer sprite;
// Hämtar referenser till komponenter när objektet skapas
void Awake() {
body = GetComponent<Rigidbody2D>();
coll = GetComponent<Collider2D>();
anim = GetComponent<Animator>();
sprite = GetComponent<SpriteRenderer>();
}
// Körs varje bildruta – hanterar input, rörelse och hopp
void Update() {
float moveInput = 0; // -1 för vänster, 1 för höger, 0 för stillastående
var keyboard = Keyboard.current;
if (keyboard != null) {
// Gå höger/vänster
if (keyboard.leftArrowKey.isPressed) {
moveInput = -1;
sprite.flipX = true; // Vänder gubben åt vänster
} else if (keyboard.rightArrowKey.isPressed) {
moveInput = 1;
sprite.flipX = false; // Vänder gubben åt höger
}
// Håller in mellanslag för att springa, annars normal gånghastighet
float currentSpeed = keyboard.spaceKey.isPressed ? 8f : 5f;
body.linearVelocity = new Vector2(moveInput * currentSpeed, body.linearVelocity.y);
// Hoppa
if (keyboard.upArrowKey.wasPressedThisFrame && IsGrounded()) {
body.linearVelocity = new Vector2(body.linearVelocity.x, 10f);
}
}
// Uppdatera Animatorn
anim.SetFloat("speed", Mathf.Abs(body.linearVelocity.x));
anim.SetBool("isGrounded", IsGrounded());
}
// Kontrollerar om spelaren står på marken med en BoxCast nedåt
public bool IsGrounded() {
return Physics2D.BoxCast(coll.bounds.center, coll.bounds.size * 0.9f, 0f, Vector2.down, 0.1f, groundLayer);
}
}
⚠️ Detta är ett vanligt misstag – glöm inte detta steg!
Player i HierarchyPlayerMovement-scriptet i InspectorGround-lager
Nu ska din karaktär kunna:
