Nu har allvaret dragit igång på riktigt och produktionen av spelet F.R.A.U.S har verkligen fått en bra start. Jag personligen är kodare och sitter enbart med att skriva script. Min huvudsakliga fokus har legat på att skapa en AI; Artificiell Intelligens. Spelet F.R.A.U.S går ut att du som spelare spelar som ett virus som infiltrerat korrupta företag som gör inhumana experiment på fångar, rädda fångarna utan att bli upptäckt. Spelet är ett stealth spel (bli inte upptäckt) där du styr faciliteten, snarare än att ha fysik närvaro. Du vilseleder vakter och forskare och leder ut fångarna genom att kommunicera till dom genom teknologin i faciliteten.
Första veckan gick lite segare, då det för det mesta gick ut på att fördela arbete mellan gruppmedlemmar. Vi satte upp en Product Backlog som vi har att följa på hemsidan ”Trello”. Vecka 1 gick för det mesta ut på att sätta upp arbetet för resten av det kommande veckorna. Vecka 2 drog arbetet igång med en rasande fart. Mitt arbete för vecka 2 ser ut:
Måndag 4/4 – AI pathfinding.
Bild: En bild på scenen jag arbetar i när jag skapar AI. Scenen innehåller vakter (guldfärgade cylindrar), deras walking path (svart prickar), fångar (vita boxar) och deras walking path (blå cirklar). Lilla rummet till vänster är ett rum jag skapade Torsdag 7/4 som jag förklarar vad det gör senare i bloggen.
Patrol och AICharacter (script). Gå till förutsatta punkter. Punkterna är en lista med punkter som skaparen själv måste sätta ut. Skaparen skriver in hur många punkter det är och sätter ut objekt och säger vilken punkt som är vilket objekt.
Unity har en egen pathfinding som heter NavMesh. Med NavMesh så kan skaparen av scenen säga hur hela nivån kommer se ut med väggar och höjder så sätter den ut en plan där agenter till NavMesh kommer kunna röra sig på. Sen sätter man dem objekt som ska ha pathfinding till agenter så vet dom att dom inte kan gå in i väggar eller hoppa över stora objekt, istället gå runt dom. Jag lärde mig om den pathfinding här: http://docs.unity3d.com/Manual/Navigation.html .
Sen började jag skriva AIn som ska hantera event. Jag ville att när vakten ser en fånge ska den spara sin nuvarande position för att sen när den hämtat fången, ta sig tillbaka till punkten den utgick ifrån. Problemet jag stötte på när jag försökte spara den nuvarnde positionen är att den temporära punkten fick en updaterad position varje frame, fastän den inte borde det. Det problemet löste jag senare på Onsdag.
Tisdag 5/4 – Cirkulär kollision Skapa en cirkulär kollision som checkar efter tagen ”Prisoner”. Skriver ut i Debugen. Hard-reset på Sourcetree.
Idag skapade jag en sfär som har samma position som vakten och det den sfären gör att känna av kollision med objekten runt om vakten. Så ifall sfären krockar med en fånge så aktiveras ett event med vakten. Koden funkar som att den ständigt uppdaterar sfärens position till vaktens position så får skaparen själv skriva in hur stor sfären är i diameter så man får testa sig fram hur stor kollisionen ska vara. Problemet jag stötte på var att jag kunde inte ändra variabler i vaktens script från sfärens script. Jag löste det genom att säga specifikt vilket objekt som scriptet kom ifrån. Man borde inte behöva göra så men det funkar för nuvarande, så kanske kommer behöva ändra det senare.
Onsdag 6/4 – Fixade en state_machine
Bild: Där den röda pilen pekar är när sfären kolliderar med en fånge. Då i vaktens AI script aktiveras ett Event (blåa pilar) med en egen skapad State Machine. State Machine är ett system som hanterar event. I mitt fall kan bara ett Event ske åt gången. Så ifall vakten redan hanterar en fånge så kommer den sköta hela det eventet innan den kan påbörja något nytt.
Vakten går mellan förutsatta punkter och ifall den kommer i kontakt med ett event så avbryter den sin path och går till eventet. Just nu är det ett block med taggen ”Prisoner” som vakten går till, avaktiverar, och sedan fortsätter sin path den var på innan den gick till eventet. Problemet jag stötte på var samma problem jag hade i Måndags, den uppdaterar ständigt positionen på punkten den ska återgå till, vilket jag ingenstans i koden skriver att den ska göra. Jag löste det genom att istället för att spara punkten med en Transform variabel så gjorde jag en Vector3(x,y,z) som håller i tre koordinater. Med Vectorn så uppdaterades inte positionen och koden funkade som jag ville.
Torsdag 7/4 – Skapa Fängelse. Jag skapade ett till rum som fungerar som fängelse (se första bilden, rummet till vänster). Vakten eskorterar fången till fängelset. Funkar genom att ha en förutsatt punkt dit vakten går ifall han kolliderar med ”prisoner”. När vakten når punkten avaktiveras rörelsen på fången.
Vakten går till punkten som den var på väg mot innan den gick in i fången istället för att gå till den sparade punkten där vakten utgick ifrån.
fel – fången blockar vakten när vakten ska lämna så vakten vet till slut inte vart den ska.
lösning – inaktiverar fångens kollision och mesh-agent. Fången blir ett tomt objekt men det får jag fixa till senare.
problem – Skapar jag flera vakter så går fången till den senast skapade vakten. Problemet jag har är att i koden fungerar fysiken att den ska gå till ett objekt som är taggad med ”Guard” och därför när jag har flera vakter så
Fredag 8/4 – Bygga en test build.
Bild: det är en rörig bild. Bilden visar hur vår första build av spelet ser ut. Det man kan göra är att trycka mellanslag så rör sig en kub från rummet längst till höger mot utgången som är längst ner i mitten.
Det builden kan göra är att vakten går runt och samlar in fångar. Jag arbetar för nuvarande med hur fångarna ska röra sig. Tanken är att aktivera tv-skärmar för att visa åt vilket håll fångarna ska gå, men än så länge har jag bara hunnit med att göra så att man trycker på mellanslag så rör sig fången till förutsatta punkter. Till den kommande veckan ska jag få till rörelsen till fångarna bättre.