Måndag 9/5 – Scientist. Så, idag har jag för det mesta bara arbetat med att göra AI till vår Scientist, som blir vår andra fiende till spelet. Tidigare hade vi bara vakter som går runt på nivån och jagar fångarna och skickar tillbaka dom till deras cell men nu har vi även då Scientist. Skillnaden är att Scientist själv inte utgör något direkt hot mot fångarna, utan istället ska springa till vakterna och leda dom till platsen där dom såg fången gå. Scientist hittar närmsta vakt på samma sätt som vakterna hittar närmsta Prison Pod, som jag nämnt i tidigare blogg. Den räknar ut distansen mellan sig själv och alla vakter och tar alltid den med längsta skillnaden, varav detta uppdateras; så ifall en vakt är närmare, men är flera rum bort och det finns en vakt utanför så kommer Scientisten till slut springa till den som är utanför rummet eftersom den kommer få kortare distans än den första som räknades ut. Alltså; Scientist räknar ut fågelvägen. Och fågelvägen är inte alltid den kortaste vägen i spelet, så ifall Scientisten väl börjar röra sig ditåt och hittar någon som är närmare, kommer den välja att gå till den närmare istället.
Scientist är gjord på samma sätt som vakterna och fångarna, med en State Machine som hanterar beteende. Än så länge har den bara två beteende och det är att den går runt till punkter och ifall den ser en fånge går den över till nästa beteende och springer till närmsta vakt och leder vakten till platsen där den såg en fånge.
Tisdag 10/5 Fixat med vakterna. Jag har gjort så med animationer och ett stort ”!” (utropstecken) dyker upp när dom ser en fånge. Det är för att ge spelaren mer feedback om att man har blivit tagen, eftersom speltestare har tyckt det varit dåligt visat.
Annars har jag jobbat med animationer och kod en hel del. Som med Scientist, så först går dom runt helt vanligt, men sen när dom ser en fånge så börjar dom springa. När Scientist hittar en vakt börjar även vakten springa och ifall dom inte hittar någon fånge går dem sen tillbaka till sina platser. Vakterna kollar ständigt efter fången och lämnar Scientist ifall den hittar någon och animationen blir när att den springer. Men när den har fått tag i en fånge och ska eskortera den till en Prison Pod så får den animation att gå.
Onsdag 11/5 Fixat med animationer och vakten. Jag blev inte riktigt klar igår utan fick fortsätta mitt arbete idag. Men nu funkar det att vakten börjar springa när den ser fången och går tillbaka efter. Fixat animation för scientist så att Level Designer kan välja vilka punkter som scientisten ska ”arbeta” vid. Okej så; tidigare hade jag att scientisten går till specifika punkter där den går över till en animation som ser ut som att den jobbar. Men problemet var att ifall Scientist behövde gå längre sträckor så började den kapa kanter så vår Level Designer bad om ett system då han personligen kan välja vilka punkter som animationen ska spelas vid. Så jag gjorde att när en Scientist kolliderar med en punkt som är taggad med ”WorkBench” så aktiveras en variabel som säger åt animationen att spelas. Den animationen kan när som helst avaktiveras ifall då Scientist ser en fånge och måste leta rätt på en vakt.
Torsdag 12/5 Arbetat med Level Designer. Idag har jag för det mesta hjälpt till för att skapa en tutorial level. Vår Level Designer håller på att skapa en level som ska hjälpa spelaren att förstå hur man spelar. Så det jag gör att att se till att mitt arbete fungerar tillsammans med den leveln. Ett exempel på problem som vi stötte på var att ifall vakten som befinner sig på leveln hittar en fånge så visste den inte vart den skulle ta vägen med den. Det som hände var att den försökte plocka in alla Prison Pods som var på hela leveln, fastän bara en var aktiv. Jag löste det genom att säga att den bara ska leta efter aktiva och ifall den då hittar en inaktiv, ska den bara ignorera den.
Jag har även arbetat massa med animationer så att rätt animation spelas när ett visst event sker. Som exempel ifall en fånge blir hittad så sätter den sig på knä och väntar på att bli eskorterad.
Fredag 13/5 Buggfixat. Jag har stött på massa buggar som borde ha uppenbarat sig tidigare men som vi inte stött på ändå. En är med NavMeshAgents egna variabel ”RemainingDistance” som räknar ut hur långt det är mellan agenten och dess destination. Det som händer är att den vägrar räkna ut distansen och mycket av min kod är beroende på det. Som när en vakt eskorterar en fånge så vill jag att vakten ska gå till närmsta Prison Pod, eller när Scientist ska hämta närmsta vakt, eller när mina navmeshagenter ska röra sig mellan punkter. Jag har haft enorma problem med just ”RemainingDistance” då den säger att distansen antingen inte existerar eller säger att distansen är oändlig. Så jag har valt att räkna ut distansen med hjälp av Unitys egna Vector.Distance, som tar in två vektorer och räknar avståndet mellan dom. Problemet med Vector.Distance är att den räknar ut fågelvägen mellan två vektorer och inte själva avståndet som agenten måste färdas.
En annan bugg jag arbetat med under en längre tid är att ifall en vakt går fram till en fånge vid ett hörn i en korridor, så kan ibland fången blocka vakten, ifall Prison Poden är närmare fången än vakten. Det löste jag genom att använda mig av ”Navmesh Obsticle”. Problemet är att en Navmeshagent kan inte också vara en obsticle. Så det jag gör är att vakten räknar ut avståndet mellan sig själv och närmsta Prison Pod och ifall fången är närmare, så avaktiveras fångens NavMeshAgent och aktiverar NavMeshObsticle så att vakten vet att den måste gå runt fången; alltså att den inte bara kan försöka trycka sig rakt fram, då den tror att vägen är fri.
Lördag 14/5 Buggfix med prefabs. Jag har arbetat med prefabs och uppdaterat värden som varit nödvändiga för projektet. Jag har även fixat så att vakten skickar ifrån sig fler raycast för vi stötte på ett problem, då korridoren var för lång så blev det för långt mellanrum mellan de olika raycasten och hittade ibland inte fången tillräckligt snabbt.