A*:n ja Flowfieldin vertailu Unity-pelimoottorissa
Niemelä, Oskari (2022)
Niemelä, Oskari
2022
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2022121530264
https://urn.fi/URN:NBN:fi:amk-2022121530264
Tiivistelmä
Reitinlöytö on nimensä mukaisesti reittien etsintää. Etsintä toteutetaan matemaattisesti laskien. Tässä opinnäytetyössä esiintyvät reitinlöytöalgoritmit laskevat reitit graafien avulla. Taustatietona käydään läpi Dijkstran algoritmin toiminta.
Reitinlöydöllä on monia applikaatioita. Tässä työssä vertaillaan kahta reitinlöytöalgoritmia erityisesti strategiapelien näkökulmasta. Työssä käytetään laajasti alalla käytössä olevaa Unity-pelimoottoria algoritmien implementointiin sekä testaukseen.
Reitinlöytö on tärkeä osa peliohjelmointia. Reitinlöytöä täytyy käyttää, kun pelin sisäiset hahmot navigoivat pelimaailmaa itsenäisesti, joko tekoälyn tai sitten pelaajan käskyttämänä. On erityisen tärkeää, että reitinlöytö tehdään tehokkain keinoin, jotta pelien kuvataajuus säilyy pelin ohjautuvuuden kannalta hyväksyttävällä tasolla.
Työn kaksi algoritmia, A* sekä Flowfield, valittiin niiden miltei päinvastaisten käyttötarkoitusten takia. Flowfield on tehty suurien hahmomäärien liikuttamiseen pelikentällä, minkä vuoksi se laskee koko kentän kattavan reitistön aina kun algoritmia käytetään. A* on tehty laskemaan yksi reitti pisteestä A pisteeseen B, jolloin sen täytyy laskea jokaiselle liikkuvalle yksikölle oma reittinsä päämäärään. A* sekä Flowfield käyttävät pohjanaan Dijkstran algoritmia.
Algoritmien vertailua varten määriteltiin testejä, joiden tarkoituksena oli tarkastella algoritmien skaalautuvuutta eri tilanteissa. Toteutusvaiheessa haastavimmaksi osoittautui algoritmien toteutus pelimoottorissa sekä tulosten ulossaanti.
Työn tulokset vastasivat odotuksia: algoritmien skaalautuvuus riippui eri asioista. A* skaalautui hahmojen määrän sekä laskettavan reitin pituuden mukaan. Flowfield skaalautui kartan koon sekä monimutkaisuuden mukaan. Pohdintoihin lisättiin vielä huomautus reitinlöydön muista teknisistä osista, jotka tulee ottaa huomioon reitinlöytöä implementoidessa.
Reitinlöydöllä on monia applikaatioita. Tässä työssä vertaillaan kahta reitinlöytöalgoritmia erityisesti strategiapelien näkökulmasta. Työssä käytetään laajasti alalla käytössä olevaa Unity-pelimoottoria algoritmien implementointiin sekä testaukseen.
Reitinlöytö on tärkeä osa peliohjelmointia. Reitinlöytöä täytyy käyttää, kun pelin sisäiset hahmot navigoivat pelimaailmaa itsenäisesti, joko tekoälyn tai sitten pelaajan käskyttämänä. On erityisen tärkeää, että reitinlöytö tehdään tehokkain keinoin, jotta pelien kuvataajuus säilyy pelin ohjautuvuuden kannalta hyväksyttävällä tasolla.
Työn kaksi algoritmia, A* sekä Flowfield, valittiin niiden miltei päinvastaisten käyttötarkoitusten takia. Flowfield on tehty suurien hahmomäärien liikuttamiseen pelikentällä, minkä vuoksi se laskee koko kentän kattavan reitistön aina kun algoritmia käytetään. A* on tehty laskemaan yksi reitti pisteestä A pisteeseen B, jolloin sen täytyy laskea jokaiselle liikkuvalle yksikölle oma reittinsä päämäärään. A* sekä Flowfield käyttävät pohjanaan Dijkstran algoritmia.
Algoritmien vertailua varten määriteltiin testejä, joiden tarkoituksena oli tarkastella algoritmien skaalautuvuutta eri tilanteissa. Toteutusvaiheessa haastavimmaksi osoittautui algoritmien toteutus pelimoottorissa sekä tulosten ulossaanti.
Työn tulokset vastasivat odotuksia: algoritmien skaalautuvuus riippui eri asioista. A* skaalautui hahmojen määrän sekä laskettavan reitin pituuden mukaan. Flowfield skaalautui kartan koon sekä monimutkaisuuden mukaan. Pohdintoihin lisättiin vielä huomautus reitinlöydön muista teknisistä osista, jotka tulee ottaa huomioon reitinlöytöä implementoidessa.