Puzzle

28.3.2019
Tässä ohjeessa luodaan puzzle/lautapeli-tyyppinen peli.

Tässä harjoituksessa opittavia uusia asioita:

  • Satunnaisen kartan luominen
  • Maailman/kartan luominen skriptillä
  • Objektin värin muuttaminen skriptistä
  • Generoitujen prefabien nimeäminen koordinaattien mukaan

Osa 1 - Maailman luominen & Player 1


Aloita uusi 3D-projekti Unityllä. Luo scenelle cube, ja muuta sen skaalaksi X:9 Y:1 Z9. Tee siitä prefab, ja poista alkuperäinen sceneltä. Anna tuon prefabin nimeksi vaikkapa BasicPlate.

Tee toinen kuutio, ja siitäkin prefab. Anna sille nimeksi vaikkapa PlayerBlue. Tee sille sininen materiaali, ja aseta sen kooksi X:4 Y:4 Z:4. Poista sekin sceneltä. Nyt sinulla pitäisi olla kaksi prefabia:



Aseta Main cameran sijainniksi X:40 Y:60 Z:-20 ja Rotation X:50.

Luo scenelle tyhjä peliobjekti nimeltä Game. Luo siihen uusi skripti nimeltä CreateWorld, ja aseta siihen seuraava koodi: https://pastebin.com/NRbanCZq

Tässä on poikkeuksellisesti laitettu kaikki pelin koodi yhteen skriptiin: Maailman luominen, pelihahmon ohjaaminen ja pisteiden tulostaminen. Tämä on tehty viittausten yksinkertaistamiseksi: Jos pelin kontrollit olisivat toisessa skriptissä, niiden pitäisi jatkuvasti tehdä ristiinviittauksia maailmanluontiskriptin muuttujien kanssa, kun tarkistetaan voiko johonkin ruutuun liikkua.

Raahaa prefabit nyt Gamen skriptin gameobjekti-muuttujiin oikeillee paikoilleen.

Tutustu jokaiseen muuttujaan ja funktioon.

GridDefinition() luo kaksiulotteisen taulukon (kokoa 10X10), joka sisältää kokonaislukuja 0 ja 1. Reunimmaiset solut asetetaan arvoon 0. Keskimmäisissä satunnaisesti 1/20 laatoista saa arvon 0, muut arvon 1, eli keskellekin kenttää tulee satunnaisia esteruutuja.

CreateWorld() luo oikeanväriset ja nimiset laatat aiemmin määritellyn gridin perusteella: Jos laatan arvo on 0, tulee tumma läpipääsemätön laatta, ykkösellä vaalea koskematon peruslaatta. Näin pelin kartta on joka kerralla hieman erilainen. Huomaa myös kuinka laatat nimetään koordinaattiensa mukaan. Näin niihin saa viittauksen gridin perusteella helposti.

Update() -funktio seuraa nuolinäppäinten painamisia, ja tarkistaa onko gameMode 1. Tätä voit hyödyntää myöhemmin asettamalla pelille vaikkapa lähtölaskennan, tai lopettamalla pelaajien liikkuminen kun peli on ohi.

MovePlayerBlue() tarkistaa voiko pelaaja siirtyä siihen suuntaan mihin hän on nuolinäppäimillä ohjannut. Lisäksi se vaihtaa aiemmin käytyjen laattojen värisävyä vaaleammaksi. Jos pelaaja siirtyy uuteen ruutuun, laatta muuttuu siniseksi, pelaaja saa pisteen, ja gridin arvoa kyseisellä koordinaatilla päivitetään.

Nyt pelin pitäisi olla tällainen: http://dattari.fi/opettaja/Unity/puzzle_kesken/

Osa 2 - Player 2


Seuraavaksi sinun pitäisi luoda peliin myös punainen pelaaja. Se vaatii sinisen pelaajan muuttujien ymmärtämisen ja niistä punaisen versioiden tekemisen. Myöskin updateen tarvitaan punaisen pelaajan kontrollien seuranta, käytä punaiselle WASD-nappeja. Punainen tarvitsee tietenkin myös oman funktion ohjaamiseen.

Koodaa peli sellaiseksi, että pelaajat eivät pääse enää ruutuihin, joissa toinen pelaaja on käynyt. Valmis versio näyttää suurin piirtein tältä:


Osa 3 - Pelin muokkaaminen omaperäiseksi

Mieti seuraavaksi miten pelistä saisi tehtyä omaperäisen. Harkitse ainakin seuraavia vaihtoehtoja:
  • Vuoropohjaisuus: Pelaajat tekevät siirtonsa vuorotellen
  • Hippa: Toinen pelaaja yrittää saada toisen pelaajan kiinni
  • Alkuscene jossa peli on selitetty
  • Gameover, joka kertoo kumpi voitti
  • Ajastin
  • Satunnaiset "hedelmät" joita pelaajat yrittävät napsia
  • Kosketuspohjainen peli, jossa pelaaja valitsee viereisen laatan koskettamalla

No comments:

Post a Comment