# Övningar Unity
1. Skapa en kub med ett skript `RotatingCube` som gör att kuben roterar sakta runt sin egna axel. Använda update-metoden tillsammans med `transform.Rotate()`.
2. Skapa en kub med ett skript `ColorChanger` som gör att kuben byter färg varje gång man trycker på mellanslagstangenten. För att sätta färg på ett objekt ändrar du materialets färg i MeshRenderer-komponentent.
```csharp
MeshRenderer mr = GetComponent<MeshRenderer>();
mr.material.color = Color.Red;
```
3. Skapa ett objekt med ett skript `Patrol` som gör att objektet rör sig fram och tillbaka mellan två andra objekt, som du anger i inspektorn i Unity.
*Tips:*
* För att bestämma en riktning mellan två punkter tar du punkterna minus varandra.
* För att bestämma avståndet mellan två punkter kan man använda [funktionen](https://docs.unity3d.com/ScriptReference/Vector3.Distance.html) `Vector3.Distance(Vector3 a, Vector3 b)`
4. Skapa ett tomt objekt med ett skript `CubeSpawner`. Varje gång man trycker på mellanslagstangenten ska en kub *instantieras* (skapas) på en slumpad plats, med gränser som anges i inspektorn.
*Tips:* Använda Unitys [random-funktion](https://docs.unity3d.com/ScriptReference/Random.Range.html) för att slumpa fram koordinater, sen skapa en Vektor3 med de koordinaterna.
5. Skapa en UI-text med ett skript `Timer` som ska fungera som ett stoppur. Stoppuret ska gå att att pausa och starta med mellanslagstangent. Trycker man på "R" ska tiden sättas tillbaka till noll.
*Tips:*
* Använd en float variabel som du ökar med `Time.deltaTime` i update-funktionen.
* Sätt texten på UI-objektet genom att få tag på `TextMeshProUGUI`-komponenten och sätt text-variabeln
**Utmaningar:**
*Utmaning 1*
Bygg ett system där det går att flytta styra en spelare genom att klicka med musen där man vill att spelaren ska gå.
*Tips:*
* Använd en [raycast från kamera](https://docs.unity3d.com/Manual/CameraRays.html) när man klickar på musknappen för att få ut var man klickade.
*Utmaning 2*
Experimentera med att [generera grottor](https://www.reddit.com/r/proceduralgeneration/comments/u5kvm1/basic_cave_generation_with_random_walk/) med hjälp av en så kallad *random walk*. Börja med att skapa ett rutnät av kvadratiska sprites med en färg som ska reprsenterar väggar, som du namnger utifrån deras koordinater. Välj sedan en slumpad startplats, och för ett bestämt antal gånger slumpa en riktning (upp, ner, höger, vänster), för att komma till en ny ruta. Varje gång en ruta besöks byter du rutans färg till en färg som representerar golv.
*Tips*
* Använd två for-loopar för att skapa initiala rutnätet.
* Använd [transform.find](https://docs.unity3d.com/ScriptReference/Transform.Find.html) för att få tag på en ruta på en viss plats, utifrån namnet på rutan.
* Man kan också använda en så kallad 2D-array för att lagra GameObjects i ett rutnät. Detta har vi inte gått igenom, men du kan [läsa mer här.](https://www.w3schools.com/cs/cs_arrays_multi.php)
* Låt flera "agenter" vandra genom rutnätet samtidigt (välja olika startpositioner)