Uusintatoiminnallisuuden toteuttaminen Unity-pelimoottorissa
Rissanen, Roni (2024)
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2024052917615
https://urn.fi/URN:NBN:fi:amk-2024052917615
Tiivistelmä
Opinnäytetyön tarkoituksena oli kehittää uusintatoiminnallisuus (replay) Unity-pelimoottorissa. Ominaisuus tuli pulmapeliin, jossa pelaajan tekemät liikkeet toistetaan niiden tapahduttua. Pelaaja tallentaa itsestään kopioita, jotka auttavat pelaajaa ratkaisemaan pulmia. Työn löydökset pätevät myös perinteisempiin uusintaominaisuuksiin, joita on esimerkiksi e-urheilu peleissä otteluiden katsomista varten. Projekti tuottaa toimeksiantajalle ja alalle yleisesti tietoa peli- ja fysiikkamoottoreista sekä uusintatoiminnallisuuksista. Ominaisuus on toteutettu Unity-pelimoottorissa, mutta työn tietoja voi soveltaa myös muissa ympäristöissä.
Työssä analysoitiin aiemmin tehtyjä ratkaisuja. Tutkimuksen aikana löytyi kaksi varteenotettavaa vaihtoehtoa - snapshot-ratkaisu ja deterministinen ratkaisu. Ennen kehitystyön aloitusta tehtyjen laskelmien perusteella deterministinen ratkaisu oli muistinkäytön kannalta paljon tehokkaampi, jonka perusteella se valittiin toteutettavaksi. Deterministisen ratkaisun kannalta olennaisia pelimoottorin ominaisuuksia käydään työssä läpi. Suuri deterministisen ratkaisun ongelma on vaatimus deterministiselle fysiikalle, johon Unityn EC-framework järjestelmän mukana tuleva fysiikkamoottori ei pysty. Työssä käydään läpi syitä ja ratkaisuja ongelmaan.
Työn tuloksena valmistui uusintatoiminnallisuus. Ominaisuus kehitettiin determinististä ratkaisua mukaillen. Toiminnallisuuden koodia esitellään kuvakaappausten avulla. Deterministinen ratkaisu osoittautui myös kehitystyön kannalta hyväksi. Ratkaisua käytettäessä kehittäjän ei tarvitse itse huolehtia esimerkiksi animaatiotilojen toistamisesta.
Toista snapshot-ratkaisua ei ehditty kehittää pelikelpoiseen kuntoon. Ratkaisujen muistinkäyttöä pystyttiin silti mittaamaan tallentamalla snapshot-ratkaisun käyttämät tiedot ja vertaamalla muistinkäyttöä toimivaan deterministiseen ratkaisuun. Snapshot-ratkaisu osoittautui myös mittaustulosten perusteella käyttökelvottomaksi. Kehitetty ominaisuus on välttämätön pelin toiminnan kannalta.
Asiasanat: Unity, peli, ohjelmointi, peliohjelmointi, tallennus, uusinta The purpose of the thesis was to develop a replay feature in the Unity game engine. The feature was intended for a puzzle game where the player's movements are replayed after they occur. The player records copies of themselves that help solving puzzles. The findings of the thesis also apply to more traditional replay features, such as those used in e-sports games for viewing matches. The project provides the client and the industry in general with information about game engines, physics engines, and replay features. The feature was implemented in the Unity game engine, but the information from the thesis can also be applied in other environments.
Previously made solutions were analysed in the thesis. Two viable solutions were found during the research - a snapshot solution and a deterministic solution. Based on calculations made before the start of development, the deterministic solution was much more efficient in terms of memory usage, which is why it was chosen for as the implementation method. Essential features of the game engine for the deterministic solution are discussed in the thesis. A major problem with the deterministic solution is the requirement for deterministic physics, which the physics engine that comes with Unity's EC-framework cannot handle. The thesis discusses the reasons for and solutions to this problem.
As a result of the thesis, the replay feature was completed. The feature was developed following the deterministic solution. The code for the feature is presented with screenshots. The deterministic solution also proved to be good for development. When using the solution, the developer does not have to worry about replaying animation states, for example.
The other snapshot solution could not be developed to a playable state in time. However, the memory usage of the solutions could still be measured by recording the data used by the snapshot solution and comparing the memory usage to the functioning deterministic solution. Based on the measurement results, the snapshot solution also proved to be unusable. The developed feature is essential for the game to function.
Keywords: Unity, game, programming, physics, record, replay
Työssä analysoitiin aiemmin tehtyjä ratkaisuja. Tutkimuksen aikana löytyi kaksi varteenotettavaa vaihtoehtoa - snapshot-ratkaisu ja deterministinen ratkaisu. Ennen kehitystyön aloitusta tehtyjen laskelmien perusteella deterministinen ratkaisu oli muistinkäytön kannalta paljon tehokkaampi, jonka perusteella se valittiin toteutettavaksi. Deterministisen ratkaisun kannalta olennaisia pelimoottorin ominaisuuksia käydään työssä läpi. Suuri deterministisen ratkaisun ongelma on vaatimus deterministiselle fysiikalle, johon Unityn EC-framework järjestelmän mukana tuleva fysiikkamoottori ei pysty. Työssä käydään läpi syitä ja ratkaisuja ongelmaan.
Työn tuloksena valmistui uusintatoiminnallisuus. Ominaisuus kehitettiin determinististä ratkaisua mukaillen. Toiminnallisuuden koodia esitellään kuvakaappausten avulla. Deterministinen ratkaisu osoittautui myös kehitystyön kannalta hyväksi. Ratkaisua käytettäessä kehittäjän ei tarvitse itse huolehtia esimerkiksi animaatiotilojen toistamisesta.
Toista snapshot-ratkaisua ei ehditty kehittää pelikelpoiseen kuntoon. Ratkaisujen muistinkäyttöä pystyttiin silti mittaamaan tallentamalla snapshot-ratkaisun käyttämät tiedot ja vertaamalla muistinkäyttöä toimivaan deterministiseen ratkaisuun. Snapshot-ratkaisu osoittautui myös mittaustulosten perusteella käyttökelvottomaksi. Kehitetty ominaisuus on välttämätön pelin toiminnan kannalta.
Asiasanat: Unity, peli, ohjelmointi, peliohjelmointi, tallennus, uusinta
Previously made solutions were analysed in the thesis. Two viable solutions were found during the research - a snapshot solution and a deterministic solution. Based on calculations made before the start of development, the deterministic solution was much more efficient in terms of memory usage, which is why it was chosen for as the implementation method. Essential features of the game engine for the deterministic solution are discussed in the thesis. A major problem with the deterministic solution is the requirement for deterministic physics, which the physics engine that comes with Unity's EC-framework cannot handle. The thesis discusses the reasons for and solutions to this problem.
As a result of the thesis, the replay feature was completed. The feature was developed following the deterministic solution. The code for the feature is presented with screenshots. The deterministic solution also proved to be good for development. When using the solution, the developer does not have to worry about replaying animation states, for example.
The other snapshot solution could not be developed to a playable state in time. However, the memory usage of the solutions could still be measured by recording the data used by the snapshot solution and comparing the memory usage to the functioning deterministic solution. Based on the measurement results, the snapshot solution also proved to be unusable. The developed feature is essential for the game to function.
Keywords: Unity, game, programming, physics, record, replay