| ... | ... | @@ -5,7 +5,46 @@ TTOS0700 - kurssin harjoitustyönä toteutin yksinkertaisen fysiikkapohjaisen fp |
|
|
|
|
|
|
|
## Pelaaja
|
|
|
|
|
|
|
|
### Kamera
|
|
|
|
Pelaaja on yksinkertainen kapseli, johon on liitetty kamera gameObjectin lapseksi. Kamera seuraa pelaajan hiirtä ja toimii näin ollen yksinkertaisena ensimmäisen persoonan kamerana. FPS-kamera toteutettiin lähninnä tutoriaalien avulla. Lisäsin tähän itse pehmennyksen Quaternion.Lerp - ominaisuuttan käyttäen, sillä ilman sitä lopputulos oli parhaimmillaankin primitiivinen.
|
|
|
|
|
|
|
|
Pelaajan liikkumisen toteutin alunperin itse, mutta halusin kokeilla erilaisten fysiikka-elementtien vaikutusta pelaajaan. Vaihdoin siis liikkumis-scriptin Unityn wikistä löytyvään [RigidbodyFPSWalker-scriptiin](http://wiki.unity3d.com/index.php/RigidbodyFPSWalker).
|
|
|
|
### Liikkuminen
|
|
|
|
Pelaajan liikkumisen toteutin alunperin itse ilman pelaajaan vaikuttavia voimia, mutta halusin kokeilla erilaisten fysiikka-elementtien vaikutusta pelaajaan. Vaihdoin siis liikkumis-scriptin Unityn wikistä löytyvään [RigidbodyFPSWalker-scriptiin](http://wiki.unity3d.com/index.php/RigidbodyFPSWalker). Vaikutusta ei juurikaan ollut, mutta olin liian laiska vaihtaakseni scriptiä takaisin vanhaan. Lisäksi scriptin mukana tullut hyppyfunktio on täysi susi. Ilman muokkaamista pelaaja pystyi liukumaan seiniä pitkin ylöspäin ja tekemään kaikkea muuta typerää. Korjasin nämä ongelmat rajoittamalla hyppäämisen onnistumaan vain y-velocityn ollessa nolla. Tämä estää siis hyppäämisen esim. portaita kiivetessä, mutta aika ei riittänyt korjaamaan tätä.
|
|
|
|
|
|
|
|
Pelaaja voi myös "juosta" pitämällä pohjassa shift(fire3)-näppäintä.
|
|
|
|
|
|
|
|
### Hyökkääminen
|
|
|
|
Pelaaja hyökkää painamalla fire1 ja fire2 -näppäimiä. Pelaaja nyrkit koostuvat palloista, joita liikutetaan animaatioiden avulla. Hyökkäysnäppäimen painaminen laukaisee triggerin, joka suorittaa määrätyn animaation. Tämä myös aktivoi nyrkkien collision-detectionin.
|
|
|
|
|
|
|
|
## Pelimaailma
|
|
|
|
Pelimaailma voidaan jakaa fysiikkaelementteihin, tuhottaviin elementteihin ja staattisiin elementteihin.
|
|
|
|
|
|
|
|
### Fysiikkaelementit
|
|
|
|
Pelaaja voi lyödä monia eri elementtejä pelimaailmassa. Fysiikkaelementeissä on käytetty ApplyForce-scriptiä, joka yksinkertaisesti vain asettaa elementtiin räjähtävää voimaa, kun pelaajan nyrkki osuu kohteeseen.
|
|
|
|
|
|
|
|
### Tuhottavat elementit tuhoutuvat, mikäli pelaaja lyö niitä, tai niihin kohdistuu tarpeeksi suuri isku. Alunperin mallinsin tuhoutuneet kopiot tuhottavista elementeistä, mutta näiden negatiivinen vaikutus suorituskykyyn tuli nopeasti selville. Päätin siis käyttää elementin tuhoutuessa partikkeliefektejä.
|
|
|
|
|
|
|
|
### Staattiset elementit
|
|
|
|
Pelimaailman perusrakennuspalikat, joiden päällä voi kävellä. Tekoälyn navigaatio on myös leivottu näille pinnoille.
|
|
|
|
|
|
|
|
## Viholliset
|
|
|
|
Viholliset ovat kapseleita, joihin on liitetty navigaatioagentti.
|
|
|
|
|
|
|
|
### Liikkuminen
|
|
|
|
Liikkuminen tapahtuu navigaatioagentin avulla. Tämä osoittautui suureksi ongelmaksi ragdollausta suunnitellessa, mutta keksin omasta mielestäni suhteellisen kekseliään ratkaisun ongelmaan.
|
|
|
|
|
|
|
|
### Ragdollaus
|
|
|
|
Kun viholliseen kohdistuu tietty määrä energiaa, tai pelaaja lyö vihollista, vaihtuu vihollinen ns. kuolleeseen tilaan. Toisin sanoen alkuperäinen gameObject tuhotaan, ja tilalle asetetaan kuollut fysiikkaelementti. Tähän vaikuttavat kaikki unityn fysiikan lait, eikä navigaatioagentti häiritse tapahtumia.
|
|
|
|
|
|
|
|
### Hyökkääminen
|
|
|
|
Hyökkäys tapahtuu täysin identtisellä tavalla pelaajan kanssa. Hyökkäyksen osuessa pelaaja menettää elämäpisteitä. Näiden tippuessa nollaan pelaaja kuolee.
|
|
|
|
|
|
|
|
## Pelin kulku
|
|
|
|
Jokaisen erän alussa lasketaan, kuinka monta vihollista syntyy. Tämän jälkeen viholliset syntyvät instanssina satunnaiseen spawnipisteeseen (tässä tapauksessa hissit). Kun kaikki viholliset on tapettu, alkaa uusi erä.
|
|
|
|
|
|
|
|
## Valikot
|
|
|
|
Alkuvalikko on oma tilansa. Start-nappulaa painamalla varsinainen pelin sisältävä tila ladataan. Pelin voi pysäyttää painamalla escape-näppäintä. Tällä saa auki ruudun, jossa peli voidaan aloittaa uudestaan, tai lopettaa. Quit-nappula palauttaa pelaajan ensimmäiseen tilaan.
|
|
|
|
|
|
|
|
## HUD
|
|
|
|
HUD on äärimmäisen yksinkertainen.
|
|
|
|
|
|
|
\ No newline at end of file |