Ultimate Aloittelijan opas pelikehitykseen yhtenäisyydessä

Unity on loistava työkalu kaiken prototyyppien luomiseen peleistä interaktiivisiin visualisointeihin. Tässä artikkelissa käydään läpi kaikki mitä sinun tarvitsee tietää aloittaaksesi Unityn käytön.

Ensinnäkin, vähän minusta: Olen harrastajayhteisön kehittäjä, 3D-mallintaja ja graafinen suunnittelija, joka on työskennellyt Unityn ja Blenderin kanssa yli 5 vuotta. Olen nyt rahoitusmatematiikan opiskelija University College Dublinissa, ja satunnaisesti harrastan freelance-graafista suunnittelua, web-prototyyppejä ja pelien prototyyppejä.

Johdanto

Tämä artikkeli on tarkoitettu kaikille, jotka eivät ole koskaan käyttäneet Unityä aiemmin, mutta joilla on aikaisempaa kokemusta ohjelmoinnista tai web-suunnittelusta / kehityksestä. Tämän artikkelin loppuun mennessä sinulla on oltava hyvä yleiskatsaus moottorista sekä kaikki tarvittavat toiminnot ja koodi peruspelin tekemisen aloittamiseksi.

Miksi yhtenäisyys?

Jos haluat tehdä pelejä

Indie Game -kehityksessä on todella vähän vaihtoehtoja. Kolme päävaihtoehtoa, jos haluat rakentaa pelejä, ovat Unreal, Unity tai GameMaker.

Unity on todennäköisesti vähiten mielipiteitä kolmesta alustasta. Se antaa sinulle erittäin raakan tuotteen kättelyssä, mutta on erittäin joustava, hyvin dokumentoitu ja erittäin laajennettavissa rakentamaan melkein minkä tahansa pelin genren, jonka voit ajatella.

Unityyn on rakennettu paljon erittäin onnistuneita pelejä, kuten Escape from Tarkov (FPS), Monument Valley (Puzzler) ja This War of Mine (Strategia / Survival).

Todellisuudessa moottori, johon rakennat ensimmäisen pelisi, ei todennäköisesti ole kriittinen, joten neuvoni on vain valita yksi ja mennä sen kanssa.

Jos haluat prototyyppiä käyttökokemuksia

Koska yhtenäisyys on vain moottori, jossa on joukko fysiikkaa, animaatioita ja reaaliaikainen 3D-renderöinti, se on myös loistava tila tehdä täysimittaisia ​​interaktiivisia prototyyppejä UX-tutkimuksiin.

Unityllä on täysi tuki VR: lle ja AR: lle, joten se voi olla loistava työkalu arkkitehtuurin, automaation ja simulaatioiden tutkimiseen asiakkaiden kanssa.

Tämän artikkelin osiot

  • Miksi yhtenäisyys?
  • Unity Editor -ikkuna
  • Unity-pelin objektit
  • Unity Builtin -komponentit
  • Mukautettujen komponenttien luominen
  • Monokäyttäytymisen rakenne
  • GameObjectsin manipulointi
  • Säteilylähetys
  • Törmäystunnistus
  • Lisäominaisuudet
  • Neuvoja uusille tulokkaille
  • Hyvät resurssit ja yhteisöt
  • Johtopäätös

Unity-editori-ikkuna

Editori-ikkuna on jaettu pari osaa. Käsittelemme tätä hyvin lyhyesti, koska viittaamme siihen jatkuvasti koko artikkelissa. Jos tämä on sinulle tuttua, ohita vain ohi!

Näkymänäkymä : Sallii GameObjectsin sijoittamisen ja liikkumisen Näkymän pelinäkymässä : Esikatselee, kuinka pelaaja näkee kohtauksen kameran tarkastajasta: Anna kohtauksen valitun GameObjectin yksityiskohdat. Varat / projekti: Kaikki esivalmistelut, tekstuurit, mallit, komentosarjat jne. Tallennetaan tähän. Hierarkia: Mahdollistaa GameObjectsin sisäkkäisyyden ja jäsentämisen

Nyt olemme hyvät aloittaa!

Unity-pelin objektit

Mitä ovat GameObjects

GameObjects on Unity-pelimoottorin kaiken ydin. Nimi melkein antaa sen pois:

Kaikki, mitä sijoitat Unityn kohtaukseen, on käärittävä 'peliobjektiin'.

Jos sinulla on verkkosuunnittelutausta, voit ajatella GameObjectsin olevan paljon samanlaisia ​​elementtejä! Erittäin tylsät säiliöt, mutta ne ovat erittäin laajennettavissa monimutkaisten toimintojen tai visuaalisten ominaisuuksien luomiseksi.

Kirjaimellisesti kaikki hiukkastehosteista, kameroista, soittimista, käyttöliittymän elementeistä… (luettelo jatkuu) on GameObject.

Hierarkian luominen

Kuten web-kehityksessä, GameObject on myös säilö. Aivan kuten teet pesän monipuolisten ja toivottavien ulkoasujen tai abstraktien luomiseksi, saatat haluta tehdä saman peliesineiden kanssa.

Pesäpeliobjektien logiikka on paljolti sama kuin verkkokehitys, annan muutaman esimerkin…

Sotku ja tehokkuus

Verkkoanalogiikka: Sinulla on monia samanlaisia ​​elementtejä, jotka voidaan luoda dynaamisesti lennossa vastauksena käyttäjien vuorovaikutukseen ja haluat pitää ne siistinä. Unity-käännös: Rakennat Minecraft-kloonin ja sinulla on paljon lohkoja näkymässä, sinun on lisättävä ja poistettava lohkojen palasia paikasta suorituskyvyn vuoksi. Siksi on järkevää saada heidät vanhemmiksi tyhjälle GameObjectille jokaiselle osalle, koska palan vanhemman poistaminen poistaa kaikki lapsilohkot.

Paikannus

Verkkoanalogiikka: Haluat säilyttää sisältämän sisällön sijainnin suhteessa säilöön eikä verkkosivuun. Unity Translation: Olet luonut joukon auttaja-droneja, jotka leijuvat soittimen ympärillä. Et todellakaan halua kirjoittaa koodia, joka käskee heitä jahtaamaan pelaajaa, joten sen sijaan heti heidät pelaavat pelaajapelin kohteena.

Unity Builtin -komponentit

Näyttelijäkomponenttimalli

GameObjects yksinään on melko hyödytön - kuten olemme nähneet, ne ovat melkein vain kontteja. Toiminnallisuuden lisäämiseksi meidän on lisättävä komponentteja, jotka ovat pääosin joko C #: lla tai Javascriptilla kirjoitettuja komentosarjoja.

Unity toimii näyttelijäkomponenttimallin ulkopuolella, yksinkertaisesti sanottuna GameObjects ovat näyttelijöitä ja Components ovat skriptejäsi.

Jos olet kirjoittanut mitään verkkosovelluksia ennen kuin olet perehtynyt ajatukseen luoda pieniä uudelleenkäytettäviä komponentteja, kuten painikkeet, lomake-elementit, joustavat asettelut, joilla on useita erilaisia ​​direktiivejä ja mukautettavia ominaisuuksia. Sitten koota nämä pienet komponentit suuremmiksi verkkosivuiksi.

Tämän lähestymistavan suuri etu on uudelleenkäytettävyys ja selkeästi määritellyt viestintäkanavat elementtien välillä. Samoin pelikehityksessä haluamme minimoida tahattomien sivuvaikutusten riskin. Pienet virheet ovat yleensä kierre hallitsemattomia, jos et ole varovainen, ja niiden virheenkorjaus on erittäin vaikeaa. Siksi pienten, kestävien ja uudelleenkäytettävien komponenttien luominen on kriittistä.

Sisäiset avainkomponentit

Mielestäni on aika tehdä muutama esimerkki Unity Games -moottorin tarjoamista sisäänrakennetuista komponenteista.

  • MeshFilter: Voit määrittää materiaaleja 3D-verkkoon GameObjectille
  • MeshRender: Voit määrittää materiaaleja 3D- verkkoon
  • [Laatikko | Mesh] Collider: Mahdollistaa GameObject-tunnistuksen törmäyksissä
  • Rigidbody: Mahdollistaa realistisen fyysisen simulaation toimia GameObjectsissa 3D-silmukoilla ja laukaisee havaintotapahtumat laatikoiden törmäyksissä
  • Valo: Valaisee kohtauksen osia
  • Kamera: Määrittää PlayerObjectiin liitettävän soittimen näkymän
  • Erilaiset käyttöliittymän Canvas-komponentit käyttöliittymien näyttämiseen

Kuormia on enemmän, mutta nämä ovat tärkeimmät, jotka sinun on tutustuttava. Yksi vinkki on, että voit käyttää kaikkia näiden asiakirjoja Unity-käsikirjan ja komentosarjaviitteen kautta offline-tilassa, missä tahansa oletkin:

Mukautettujen komponenttien luominen

Sisäänrakennetut komponentit ohjaavat ensisijaisesti fysiikkaa ja grafiikkaa, mutta todella pelin tekemiseksi sinun on hyväksyttävä käyttäjän syöttö ja käsiteltävä näitä vakiokomponentteja sekä itse GameObjectsia.

Aloita komponenttien luominen siirtymällä haluamaasi GameObject> Lisää komponentti> kirjoita uuden komponentin nimi hakupalkkiin> uusi komentosarja (c #).

Suosittelen, että suosittelen Javascriptin käyttöä Unityssä. Sitä ei ole pidetty ajan tasalla kaikilla ES6: n mukana tulleilla hienoilla jutuilla, ja suurin osa edistyneemmistä asioista perustuu C # -tavaroihin, jotka on siirretty Javascriptiin ... Siitä tulee kokemukseni mukaan vain yksi jättiläinen kiertotapa.

Monokäyttäytymisen rakenne

Tärkeimmät toiminnot

Kaikki komponentit periytyvät MonoBehaviour-luokasta. Se sisältää useita standardimenetelmiä, mikä tärkeintä:

  • void Start (), jota kutsutaan aina, kun komentosarjan sisältävä objekti on ilmentynyt kohtauksessa. Tämä on hyödyllistä aina, kun haluamme suorittaa alustuskoodin, esim. aseta pelaajan varusteet, kun he kutevat otteluun.
  • void Update (), jota kutsutaan jokaiseksi kehykseksi. Tähän menee suurin osa koodista, johon liittyy käyttäjän syöttö, päivittämällä erilaisia ​​ominaisuuksia, kuten soittimen liike kohtauksessa.

Tarkastajamuuttujat

Usein haluamme tehdä komponenteista mahdollisimman joustavia. Esimerkiksi kaikilla aseilla voi olla erilainen vahinko, tulinopeus, näköhavainto jne. Vaikka kaikki aseet ovat olennaisilta osin samat, voimme haluta pystyä luomaan nopeasti erilaisia ​​muunnelmia unity editorissa.

Toinen esimerkki, josta saatamme haluta tehdä tämän, on luoda käyttöliittymäkomponentti, joka seuraa käyttäjän hiiren liikkeitä ja sijoittaa kohdistimen näkymäikkunaan. Tässä kannattaa ehkä säätää kohdistimen herkkyyttä liikkeille (jos käyttäjä käytti ohjainta tai peliohjainta tai tietokoneen hiirtä). Siksi olisi järkevää, että näitä muuttujia on helppo vaihtaa sekä muokkaustilassa että myös kokeilla niiden kanssa ajon aikana.

Voimme tehdä tämän helposti yksinkertaisesti julistamalla ne julkisiksi muuttujiksi komponentin rungossa.

Hyväksytään käyttäjän syöttö

Tietysti haluamme, että pelimme reagoi käyttäjien panoksiin. Yleisimpiä tapoja tehdä tämä ovat seuraavien menetelmien käyttäminen komponentin Update () -toiminnossa (tai missä tahansa muualla):

  • Input.GetKey (KeyCode.W) Palauttaa True W -avaimen pidetään alhaalla
  • Input.GetKeyDown (KeyCode.W) palauttaa arvon True, kun W-näppäintä painetaan ensimmäisen kerran
  • Input.GetAxis ("Pystysuora"), Input.GetAxis ("Vaakasuora") Palauttaa -1,1 hiiren syöttöliikkeen välillä

GameObjectsin manipulointi

Kun olemme saaneet käyttäjätietoja, haluamme GameObjects-kohtauksemme vastaavan. Harkitsemme useita vastaustyyppejä:

  • Käännös, kierto, asteikko
  • Luo uudet GameObjects
  • Viestien lähettäminen olemassa oleville GameObjects / komponenteille

Muutokset

Kaikilla GameObjectsilla on muunnosominaisuus, joka mahdollistaa erilaisten hyödyllisten manipulaatioiden suorittamisen nykyisellä peliobjektilla.

Yllä olevat menetelmät ovat melko itsestään selviä, huomaa vain, että käytämme pientä gameObject-ohjelmaa viittaamaan GameObjectiin, joka omistaa komponentin tämän erityisen esiintymän.

Yleensä on hyvä käytäntö käyttää paikallista [Position, Rotation] sijasta kohteen globaalin sijainnin / rotaation sijasta. Tämä helpottaa yleensä esineiden siirtämistä järkevällä tavalla, koska paikallinen avaruusakseli on suunnattu ja keskitetty pääobjektiin eikä maailman alkuperään ja x, y, z-suuntiin.

Jos sinun on muunnettava paikallisen ja maailmatilan välillä (mikä usein tapahtuu), voit käyttää seuraavaa:

Kuten voitte kuvitella, tämän takana on melko yksinkertainen lineaarinen algebra, jonka metodin nimessä oleva käänteinen viittaa.

Uusien GameObjectien luominen

Koska GameObjects ovat pohjimmiltaan kaikki kohtauksessasi, voit ehkä pystyä luomaan ne lennossa. Esimerkiksi jos soittimellasi on jonkinlainen ammusten laukaisulaite, haluat ehkä pystyä luomaan lennossa ammuksia, joilla on oma kapseloitu logiikka lentoa, vahinkoja jne. Varten.

Ensin meidän on esiteltävä esivalmisteen käsite . Voimme luoda nämä yksinkertaisesti vetämällä minkä tahansa kohtaushierarkian GameObjectin resurssikansioon.

Tämä tallentaa pohjimmiltaan mallin objektista, joka juuri oli kohtauksessamme, kaikilla samoilla kokoonpanoilla.

Kun meillä on nämä valmiit komponentit, voimme määrittää ne tarkastusmuuttujiin (kuten puhuimme aiemmin) mistä tahansa kohtauksen osasta, jotta voimme luoda uusia GameObjects-elementtejä esivalmisteen määrittämällä tavalla milloin tahansa.

Voimme sitten suorittaa esivalmisteen "instantiation" ja manipuloida sitä haluttuun kohtaan kohtauksessa ja luoda tarvittavat vanhempien suhteet.

Pääsy muihin GameObjects ja komponentteihin

Usein meidän on kommunikoitava muiden GameObjectien sekä niihin liittyvien komponenttien kanssa. Kun sinulla on viittaus peliobjektiin, tämä on melko yksinkertaista.

Komponentinimi comp = some_game_object.GetComponent ();

Sen jälkeen voit käyttää mitä tahansa komponentin julkista menetelmää / muuttujaa manipuloidaksesi GameObjectia. Tämä on suoraviivainen bitti, mutta tosiasiassa viitteen hankkiminen GameObjectiin voidaan tehdä useilla tavoilla ...

Pääsy tarkastajamuuttujan kautta

Tämä on suorinta. Luo yksinkertaisesti julkinen muuttuja GameObjectille, kuten olemme aiemmin osoittaneet esivalmisteilla, ja vedä ja pudota se manuaalisesti komponentille tarkastajan kautta. Käytä sitten muuttujaa kuten yllä.

Pääsy taggaamalla

Voimme merkitä GameObjects- tai prefab-elementit tarkastajan kautta ja etsiä sitten viitteitä niihin löytää peliobjektitoimintoja.

Tämä tehdään yksinkertaisesti kuten alla.

GameObject some_game_object = GameObject.FindGameObjectWithTag ("tiili");

Pääsy muunnoksen kautta

Jos haluamme käyttää komponentteja jossakin pääobjektissa, voimme tehdä sen helposti transform-attribuutin kautta.

Komponentinimi comp = gameObject.transform.parent.GetComponent ();

Pääsy SendMessagen kautta

Vaihtoehtoisesti, jos haluamme lähettää viestin monille muille komponenteille tai haluamme lähettää viestin objektille, joka on kaukana sisäkkäisessä hierarkiassa, voimme käyttää lähetysviestitoimintoja, jotka hyväksyvät funktion nimen, jota seuraavat argumentit.

gameObject.SendMessage ("MethodName", parametrit); // Lähetä messagegameObject.SendMessageUpwards (“MethodName”, parametrit); // Vastaanottavat vain komponentit, jotka ovat sisäkkäin.

Säteilylähetys

Olet ehkä kuullut tästä aiemmin, kun ihmiset vertaavat FPS-pelejä, jotka perustuvat 'fysiikkaan' tai 'säteisiin'. Radiolähetys on pohjimmiltaan kuin laserosoitin, joka joutuessaan kosketuksiin törmäimen tai jäykän rungon kanssa palauttaa osuman ja välittää kohteen yksityiskohdat.

On kaksi skenaariota, joissa tämä on kätevää (todennäköisesti lisää):

  1. Jos suunnittelet asejärjestelmää pelille, voit käyttää säteilylähetystä osumien havaitsemiseen ja jopa mukauttaa säteen pituuden niin, että lähitaisteluvälineet osuvat vain lyhyillä etäisyyksillä
  2. Luo hiiri osoittimesta pisteeseen kolmiulotteisessa tilassa, ts. Jos haluat käyttäjän pystyvän valitsemaan yksiköt hiirellään strategiapelissä.

Kuten näette, tämän koodi on hieman enemmän mukana. Tärkeintä on ymmärtää, että säteen heittäminen sinne, missä hiiri osoittaa 3D-tilassa, vaatii ScreenPointToRay-muunnoksen. Syynä tähän on, että kamera hahmottaa 3D-tilan 2d-näkymänä kannettavan tietokoneen näytöllä, joten luonnollisesti mukana on projektio, joka siirtyy takaisin 3D-tilaan.

Törmäystunnistus

Aiemmin mainitsimme Collider- ja Rigidbody-komponentit, jotka voidaan lisätä esineeseen. Törmäyssääntö on, että törmäyksessä yhdellä esineellä on oltava jäykkä runko ja toisella törmäys (tai molemmissa on molemmat komponentit). Huomaa, että säteilyä käytettäessä säteet ovat vuorovaikutuksessa vain esineiden kanssa, joihin on kiinnitetty törmäyskomponentteja.

Kun olet määrittänyt minkä tahansa objektiin liitetyn mukautetun komponentin, voimme käyttää OnCollisionEnter-, OnCollisionStay- ja OnCollisionExit-menetelmiä reagoimaan törmäyksiin. Kun meillä on törmäystiedot, voimme saada GameObjectin vastuulliseksi ja käyttää aiemmin oppimiamme vuorovaikutuksessa siihen liitettyjen komponenttien kanssa.

Yksi asia on huomata, että jäykät kappaleet tarjoavat fysiikkaa, kuten esineiden painovoima, joten jos haluat tämän pois päältä, sinun on tarkistettava is_kinematic päällä.

Lisäominaisuudet

Emme käsittele mitään tästä nyt, mutta ehkä tulevassa artikkelissa - vain saadaksemme sinut tietämään, että ne ovat olemassa.

Luodaan käyttöliittymiä

Unitylla on täysimittainen käyttöliittymämoottori pelin käyttöliittymän asettamiseen. Yleensä nämä komponentit toimivat melko samalla tavalla kuin muu moottori.

Unity Editorin laajentaminen

Unityn avulla voit lisätä mukautettuja painikkeita tarkastajiin, jotta voit vaikuttaa maailmaan muokkaustilassa. Esimerkiksi maailman rakentamisen helpottamiseksi voit kehittää mukautetun työkaluikkunan moduulitalojen rakentamiseen.

Animaatio

Unitylla on kaaviopohjainen animaatiojärjestelmä, jonka avulla voit yhdistää ja hallita animaatioita erilaisille esineille, kuten luupohjaisen animaatiojärjestelmän toteuttaville pelaajille.

Materiaalit ja PBR

Unity sammuttaa fyysisesti perustuvan renderointimoottorin, joka mahdollistaa reaaliaikaisen valaistuksen ja realistiset materiaalit. Todellisuudessa sinun on joko opittava ensin 3D-mallinnus tai käytettävä jonkun muun tekemiä ja optimoimia malleja, ennen kuin pääset tähän, jotta voit tehdä tavaraa, joka todella näyttää hyvältä.

Neuvoja uusille tulokkaille

Jos aiot kirjoittaa ensimmäisen pelisi, älä aliarvioi kaikkein triviaalimpien pelien kirjoittamisen monimutkaisuutta ja aikaa. Muista, että suurimmalla osalla Steamin peleistä tiimit työskentelevät vuosia kokopäiväisesti!

Valitse yksinkertainen käsite ja jaa se pieniin saavutettavissa oleviin virstanpylväisiin. On erittäin suositeltavaa erottaa peli mahdollisimman pieniksi itsenäisiksi komponenteiksi, koska sinulla on paljon vähemmän todennäköisiä virheitä, jos pidät komponentit yksinkertaisina monoliittisten koodilohkojen sijaan.

Ennen kuin menet ja kirjoitat koodia mihinkään pelin osaan, mene tutkimaan, mitä joku muu on aiemmin tehnyt saman ongelman ratkaisemiseksi - on todennäköistä, että heillä on paljon hitaampi ratkaisu.

Hyvät resurssit ja yhteisöt

Pelisuunnittelulla on yksi parhaista yhteisöistä siellä, ja alalla on paljon ammattitaitoisia ammattilaisia, jotka asettavat sisältöä ilmaiseksi tai turhaan. Se on kenttä, joka vaatii 3D-mallinnajia, konseptitaiteilijoita, pelisuunnittelijoita, ohjelmoijia ja niin edelleen. Olen linkittänyt hienoja yleisiä resursseja, joita olen törmännyt alla oleviin kenttiin:

Konseptitaide

  • Feng Zhu -suunnittelukoulu (yli 90 tuntia kestäviä konseptitaideoppaita)
  • Tyler Edlin Art (loistava BST-taideyhteisö, ammattilaisten palaute kuukausihaasteista)
  • Art Cafe (haastattelut ja työpajat kuuluisien konseptitaiteilijoiden kanssa)
  • Trent Kaniuga (kuvittaja ja 2D-taiteilija, joka tekee myös oman pelinsä)

3D-mallinnus

  • CG-eväste (Blender Everin parhaat verkkomallinnuksen perusteet, heillä on paljon muuta erinomaista sisältöä sekoittimelle)
  • Tor Frick (kovan pinnan mallintajat ja kuvanveistäjät tehosekoittimessa)
  • Gleb Alexandrov (Lyhyet, tehokkaat renderointioppaat Blenderissä)

Pelin suunnittelu

  • DoubleFine Amnesia Fortnight (GameDevs, jotka harjoittavat kahden viikon hakkerointia ja tallentavat koko suunnitteluprosessinsa)
  • GameMakers Toolkit (tutkii pelisuunnittelun periaatteita)

Ohjelmointi

  • Käsintehty sankari (Pelin ja moottorin kirjoittaminen tyhjästä C: ssä)
  • Jonathan Blow (Indie-kehittäjä, joka suoratoistaa pelikehitystään)
  • Brackeys (Nizzan Unity-oppaat)

Johtopäätös

Toivottavasti pidit tästä opetusohjelmasta! Teen vähän graafista suunnittelua sekä pelin ja käyttöliittymän prototyyppejä, joten tarkista portfolioni ! Olen myös linkitetty sisään .

Salkku| LinkedIn