Combat hit detection system for 3D action role-playing games in Unity
Tamminen, Ville (2022)
Tamminen, Ville
2022
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2022112223619
https://urn.fi/URN:NBN:fi:amk-2022112223619
Tiivistelmä
Tämän opinnäytetyön tavoitteena oli luoda Unity-pelimoottoriin taisteluiskujen osumantunnistusjärjestelmä, jota voidaan käyttää 3D-toimintaroolipeleissä. Työssä tutkittiin myös pelimekaniikkoja, jotka vaativat toimiakseen osumantunnistuksen, kuten aseen vahinko ja hahmojen helposti vaurioituvat kohdat. Tämän opinnäytetyön idea syntyi opetusohjelmien puutteesta, jotka selittäisivät kuinka toteuttaa osumantunnistusjärjestelmä hyödyntäen useita törmäyslaatikoita hahmoissa. Nykyaikaisissa peleissä käytetään useita törmäyslaatikoita tarkemman osumantunnistuksen saavuttamiseksi. Osumien havaitsemisjärjestelmä pyrkii olemaan samankaltainen kuin Dark Souls -pelit.
Työn toteutus alkoi ottamalla käyttöön yksinkertainen yhden törmäyslaatikon osumantunnistus hahmoille, jonka jälkeen sitä muokattiin käyttämään useita törmäyslaatikoita. Osumantunnistuksen toteutuksessa on useita vaiheita, joissa jokainen vaihe parantaa osuman havaitsemista sisällyttämään mukaan enemmän taistelumekaniikkoja. Lisäksi toteutettiin vahingon välitys pelihahmoille, hahmojen heikot kohdat ja vihollisten erotus ystävällisistä hahmoista.
Tässä opinnäytetyössä esitettiin kaksi ratkaisua osumantunnistusjärjestelmän tekemiselle, jotka perustuvat Unityn fysiikkamoottoria käyttäviin komponentteihin. Ensimmäinen ratkaisu välittää tiedot aseesta hyökkäyksen aikana osumaa ottavalle hahmolle, joka tekee lopullisen päätöksen, lasketaanko hyökkäysisku osumaksi. Toinen ratkaisu on parannus ensimmäisestä ja siinä kaikki osumantunnistuspäätökset tehdään pelkästään aseen koodin puolella. Myös vaurioiden ja hahmojen heikot kohdat toteutettiin, ja viholliset voidaan erottaa ystävällisistä hahmoista hyökkäysiskujen aikana. The objective of this thesis was to create a combat hit detection system in the Unity game engine that can be used in 3D action role-playing games. The thesis also explored game mechanics that require hit detection such as weapon damage and weak spots. This thesis emerged from a lack of tutorials that would explain the implementation of a hit detection system while utilising multiple colliders in characters. Modern games use multiple colliders to achieve more accurate hit detection. The hit detection system created in this thesis aspires to be similar to the Dark Souls franchise games.
The start of the thesis, a simple hit detection system was implemented for characters using one hurtbox, and this was later elaborated into the use of multiple hurtboxes. Hit detection has multiple steps, with each step improving the previous one by including more combat mechanics. Also, features of characters such as damage accumulation, weak spots and target differentiation were implemented.
This thesis presents two solutions for the creation of a hit detection system that relies on Unity’s collision detection components. The first solution passes information of a weapon attack to a character which will make a final decision if the attack hit should count. The second solution is a rework of the first one with hit detection functionality integrated to the weapon's code. In this thesis, damage and character weak spots were also implemented, and a means to distinguish enemies from friendly characters during attack hits was created.
Työn toteutus alkoi ottamalla käyttöön yksinkertainen yhden törmäyslaatikon osumantunnistus hahmoille, jonka jälkeen sitä muokattiin käyttämään useita törmäyslaatikoita. Osumantunnistuksen toteutuksessa on useita vaiheita, joissa jokainen vaihe parantaa osuman havaitsemista sisällyttämään mukaan enemmän taistelumekaniikkoja. Lisäksi toteutettiin vahingon välitys pelihahmoille, hahmojen heikot kohdat ja vihollisten erotus ystävällisistä hahmoista.
Tässä opinnäytetyössä esitettiin kaksi ratkaisua osumantunnistusjärjestelmän tekemiselle, jotka perustuvat Unityn fysiikkamoottoria käyttäviin komponentteihin. Ensimmäinen ratkaisu välittää tiedot aseesta hyökkäyksen aikana osumaa ottavalle hahmolle, joka tekee lopullisen päätöksen, lasketaanko hyökkäysisku osumaksi. Toinen ratkaisu on parannus ensimmäisestä ja siinä kaikki osumantunnistuspäätökset tehdään pelkästään aseen koodin puolella. Myös vaurioiden ja hahmojen heikot kohdat toteutettiin, ja viholliset voidaan erottaa ystävällisistä hahmoista hyökkäysiskujen aikana.
The start of the thesis, a simple hit detection system was implemented for characters using one hurtbox, and this was later elaborated into the use of multiple hurtboxes. Hit detection has multiple steps, with each step improving the previous one by including more combat mechanics. Also, features of characters such as damage accumulation, weak spots and target differentiation were implemented.
This thesis presents two solutions for the creation of a hit detection system that relies on Unity’s collision detection components. The first solution passes information of a weapon attack to a character which will make a final decision if the attack hit should count. The second solution is a rework of the first one with hit detection functionality integrated to the weapon's code. In this thesis, damage and character weak spots were also implemented, and a means to distinguish enemies from friendly characters during attack hits was created.