Pelitilan tallennus ja lataus Unity-pelimoottorilla
Rytkölä, Hermanni (2021)
Rytkölä, Hermanni
2021
Tieto- ja sähkötekniikan kandidaattiohjelma - Bachelor's Programme in Computing and Electrical Engineering
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2021-05-17
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202104263570
https://urn.fi/URN:NBN:fi:tuni-202104263570
Tiivistelmä
Videopelin tilan tallentaminen on pelaajille tärkeä ominaisuus. Pelaaja pystyy keskeyttämään pelin ja jatkamaan sitä myöhemmin ilman, että peli on aloitettava kokonaan alusta. Pelin tilan tallentaminen on monimutkainen ja virhealtis prosessi. Ohjelmoijan on minimoitava tallennettavan datan määrä, jotta tallennustiedoston koko sekä tallennukseen ja lataukseen kuluva aika saadaan mahdollisimman alhaiseksi.
Tässä kandidaatintyössä tutkittiin tallennusjärjestelmien integrointia pelimaailmaan sekä tallennusjärjestelmän toteuttamismahdollisuuksia Unity-pelimoottorilla. Unity-pelimoottorilla pelitilan tallennus voidaan toteuttaa serialisaation avulla. Pelimaailmasta serialisoidaan kaikki pelitilan kannalta välttämättömät peliobjektit. Pelitila voidaan myöhemmin palauttaa deserialisoimalla tallennettu data uusiin peliobjekteihin.
Työssä tallennettiin yksinkertainen Unity-pelimoottorin peliobjekti levylle binääri-, JSON(Java-Script Object Notation)- sekä XML(Extensible Markup Language)- muotoisena tiedostona. Eri tiedostomuotojen tallennus- ja latausnopeutta sekä tallennustiedostojen kokoa vertailtiin. Työssä tehdyissä mittauksissa nopeimmat tallennus- ja latausajat tallennustiedostolle saatiin serialisoimalla tiedosto binäärimuotoon. Tallennustiedoston koko saatiin minimoitua serialisoimalla tiedosto JSON-muotoon Unityn valmiin JsonUtility-luokan avulla. Kun tallennettavaa dataa on vähän, eri serialisaatiomenetelmien väliset erot ovat kuitenkin pelaajan näkökulmasta hyvin pieniä. Tämän myötä serialisaatiomenetelmän ja tallennustiedostomuodon valinnalla ei ole pelikokemuksen kannalta peliprojektissa suurta merkitystä, ellei tallennettavaa dataa ole usean megatavun verran.
Pelikonfiguraatio eli peliasetukset voidaan tallentaa käyttämällä Unityn valmista PlayerPrefs-luokkaa. PlayerPrefs ei kuitenkaan sovellu varsinaisen pelitilan tallentamiseen, vaan siihen suositellaan sen sijaan serialisaation käyttöä.
Unitylle on saatavilla useita lisäosia, jotka helpottavat tallennusjärjestelmän integrointia peliin. Lisäosien avulla ohjelmoija voi tallentaa kokonaisia peliobjekteja yhdellä koodirivillä. Ohjelmoijan ei siis tarvitse perehtyä tarkemmin tallennusprosessissa tapahtuvaan serialisaatioon ja deserialisaatioon, mutta hänen on silti mietittävä, mitä kaikkea pelimaailmasta on tallennettava.
Tässä kandidaatintyössä tutkittiin tallennusjärjestelmien integrointia pelimaailmaan sekä tallennusjärjestelmän toteuttamismahdollisuuksia Unity-pelimoottorilla. Unity-pelimoottorilla pelitilan tallennus voidaan toteuttaa serialisaation avulla. Pelimaailmasta serialisoidaan kaikki pelitilan kannalta välttämättömät peliobjektit. Pelitila voidaan myöhemmin palauttaa deserialisoimalla tallennettu data uusiin peliobjekteihin.
Työssä tallennettiin yksinkertainen Unity-pelimoottorin peliobjekti levylle binääri-, JSON(Java-Script Object Notation)- sekä XML(Extensible Markup Language)- muotoisena tiedostona. Eri tiedostomuotojen tallennus- ja latausnopeutta sekä tallennustiedostojen kokoa vertailtiin. Työssä tehdyissä mittauksissa nopeimmat tallennus- ja latausajat tallennustiedostolle saatiin serialisoimalla tiedosto binäärimuotoon. Tallennustiedoston koko saatiin minimoitua serialisoimalla tiedosto JSON-muotoon Unityn valmiin JsonUtility-luokan avulla. Kun tallennettavaa dataa on vähän, eri serialisaatiomenetelmien väliset erot ovat kuitenkin pelaajan näkökulmasta hyvin pieniä. Tämän myötä serialisaatiomenetelmän ja tallennustiedostomuodon valinnalla ei ole pelikokemuksen kannalta peliprojektissa suurta merkitystä, ellei tallennettavaa dataa ole usean megatavun verran.
Pelikonfiguraatio eli peliasetukset voidaan tallentaa käyttämällä Unityn valmista PlayerPrefs-luokkaa. PlayerPrefs ei kuitenkaan sovellu varsinaisen pelitilan tallentamiseen, vaan siihen suositellaan sen sijaan serialisaation käyttöä.
Unitylle on saatavilla useita lisäosia, jotka helpottavat tallennusjärjestelmän integrointia peliin. Lisäosien avulla ohjelmoija voi tallentaa kokonaisia peliobjekteja yhdellä koodirivillä. Ohjelmoijan ei siis tarvitse perehtyä tarkemmin tallennusprosessissa tapahtuvaan serialisaatioon ja deserialisaatioon, mutta hänen on silti mietittävä, mitä kaikkea pelimaailmasta on tallennettava.
Kokoelmat
- Kandidaatintutkielmat [7049]