diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/GDC2024.iml b/.idea/GDC2024.iml new file mode 100644 index 0000000..6102194 --- /dev/null +++ b/.idea/GDC2024.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..4a4994d --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/~Documentation/topics/Opgave-3-Random-og-NavMesh.md b/~Documentation/topics/Opgave-3-Random-og-NavMesh.md index 2ab64b2..f23ed40 100644 --- a/~Documentation/topics/Opgave-3-Random-og-NavMesh.md +++ b/~Documentation/topics/Opgave-3-Random-og-NavMesh.md @@ -2,17 +2,82 @@ ## NavMesh -.. navmesh surface .. navmesh agent .. +.. navmesh surface .. + +For at kunne skabe nogle mere spændende fjender, vil vi gerne have de kan bevæge sig. +Til det bruger vi NavMesh. Først skal vi fortælle unity hvorhenne vores enemy må og kan gå. +Til det formål giver unity os komponentet **NavMeshSurface**. Lad os tilføje den til vores plane. + +**INDSÆT BILLEDE AF NAVMESHSURFACE MENU** + +Her er der en del indstillinger at lege rundt med, men for nu trykker vi på Bake knappen. + +**INDSÆT BILLEDE AF BAKED OVERFLADE** + +Det blå område der tegner sig er vores navmeshsurface. Det er det område vores enemy kan gå på. + +.. navmesh agent .. +Men før vores enemy kan finde rundt skal vi også lige fortælle vores enemy object at den kan gå. +Her giver vi den komponetet **Nav Mesh Agent**. Den fotæller unity at vores enemy object skal kunne navigere på en navmesh surface, +som den vi lige har lavet. + +**INDSÆT BILLEDE AF NAV MESH AGENT MENU HER EVENTUELT**. + +Vi skal dog stadig fortælle den hvor den skal gå hen. Det kan vi heldigvis nemt gøre med **SetDestination()** funktionen. +SetDestination tager imod en Vector3 position, som for eksempel vores spillers position. +I vores enemy script skal vi hive fat i vores **Nav Mesh Agent**, brug enten **GetComponent()**, +eller lav en public NavMeshAgent og drag and drop den i Unity. +Vi skal have en reference til vores player, her skal vi igen gøre brug af **Tags**, heldigvis har unity allerede et player tag. +Giv vores playerobject player tagget og brug **FindWithTag("Player")**. + +**INDSÆT BILLEDE AF AT VÆLGE PLAYER TAG PÅ PLAYER OBJECT** + +```c# +public NavMeshAgent agent; +private GameObject player; + +void Start(){ + player = GameObject.FindWithTag("Player"); +} + +void Update(){ + agent.SetDestination(player.transform.position); +} +``` +... Enemy spawner ... + +**INDSÆT GIF AF ENEMY GÅR MOD PLAYER** ## Random +Det er jo ikke så spændende at der kun er en fjende. +Til det laver vi et enemySpawner object. Siden det ikke er noget vi skal kunne se, giver det mening at lave et empty object. -```C# +**INDSÆT BILLEDE AF MENU MED MUS PÅ EMPTY OBJECT** + +Så laver vi et enemySpawnerScript på vores enemySpawner. +I det skal vi have en reference til det object vi gerne vil spawne, altså vores enemyobject. +Som med vores bullet kan vi spawne flere med **Instantiate()**. +```c# +public GameObject spawnObject + +void Update(){ + Initiate(spawnObject, transform.position, Quaternion.identity); +} +``` + +**INDSÆT GIF AF SPAWNING FJENDER** + +Det ville dog være kedeligt hvis de alle spawnede det sammes sted hver gang. +Så hvad nu hvis vi generede nogle tilfælge positioner til vores fjender. +Her kan vi bruge **Random.Range** der giver os et tilfældigt tal mellem 2 tal vi vælger. +Vi starter småt med et tal mellem -5 og 5. +```c# Vector3 spawnPosition = transform.position; spawnPosition.x = spawnPosition.x + Random.Range(-5, 5); spawnPosition.z = spawnPosition.z + Random.Range(-5, 5); Instantiate(prefab, spawnPosition, Quaternion.Identity); ``` - +**GIF AF SPAWN AF FJENDER I TILFÆLDIG POSITION**. Det er vigtig at huske at højre side af `=` tegnet bliver kørt først. Så selvom: ```C# val = val + 1;