---
# System prepended metadata

title: 'Projekt: Breakout i Unity 2024'

---

# Projekt: Breakout i Unity 2024

Breakout är ett klassiskt spel där man styr en platform för att hålla en studsande boll i luften. När bollen studsar på olika block försvinner dem, och målet är att få alla block att försvinna.

![Retro Game Atari Breakout Blog Thumbnail](https://hackmd.io/_uploads/rkJKJV7H6.png)


I det här projektet ska vi försöka koda ett spel i Unity som liknar Breakout. Det huvudsakliga målet är att ta det vi har lärt oss och applicera i ett nytt projekt.

## Del 1 - setup

Börja med att hämta hem github-projektet via github-classroom. Länken finns på google classroom. 

Förbered din scen genom att skapa de GameObjects som behövs:

* en spelar-platform
* en boll
* ett antal block.
* väggar

![image](https://hackmd.io/_uploads/Hyaj33bQkl.png)


## Del 2 - spelarrörelse

Lägg till en rigidbody till spelaren och ändra inställningar så att den inte påverkas av gravitation och är låst till att bara röra sig i x-led.

Lägg sedan till ett skript som gör så att vi kan styra spelaren höger och vänster. Ta inspiration av hur vi gjorde tidigare för spelarrörelse.

## Del 3 - bollen

Lägg till en rigidbody till bollen också och justera inställningarna. Lägg till ett skript som ger den en hastighet nedåt vid spelets start.

För att få bollen att studsa behöver vi ändra dess fysiska material. Skapa ett nytt Physics material 2D (se bild nedan), och sätt bounce till 1. Det här materialet ger vi till bollen, men också alla objekt som bollen kommer studsa på.


![image](https://hackmd.io/_uploads/S1Htod47yx.png)

![image](https://hackmd.io/_uploads/H1R9ju4Qkl.png)

När bollen studsar varierar hastigheten ganska mycket. Vi kan lösa detta genom att i update-funktionen på bollen sätta hastigheten till en viss storlek. 

```csharp
void Update(){
    float speed = 4;
    myRigidbody.velocity = myRigidbody.velocity.normalized * speed;
}
```

`myRigidbody.velocity.normalized` ger oss hastigheten som en vektor med storlek 1.

## Del 4 - kollisioner

När bollen kolliderar med ett block vill vi att blocket ska försvinna. Detta löser vi också med metoden `OnCollisionEnter2D(Collision2D collision)` och `Destroy`-metoden. Fundera också på hur vi kan skriva en if-sats som kollar att bollen kolliderar med ett block och inte något annat.


## Del 5 - återställa bollen

När bollen åker under spelaren vill vi att spelet ska börja om. Framförallt vill vi att bollen ska hoppa tillbaka till en startposition. Detta löser vi med en if-sats i `update`-funktionen på bollen där vi tittar på `transform.position.y` och sätter position till start. Till exempel:

```csharp
if (transform.position.y < -1){
    transform.position = new Vector2(0,5);
}
```

## Del 6 - förbättringar

Kvar att göra är några förbättringar:

* lägg till poäng som ökar varje gång ett block går sönder
* lägg till liv som minskar varje gång bollen åker ut
* lägg till "powerups" som spawnar när ett block går sönder, som gör till exempel att spelaren åker fortare, eller blir större
* lägg till att bollen studsar åt olika håll i x-led när den nuddar spelaren
* läs på vad [orginalspelet hade för regler och funktioner,](https://en.wikipedia.org/wiki/Breakout_(video_game)) och implementera några av dem.
* lägg till en start-meny och game over-meny

