Pagrindinis žaidimų kūrimo pradedantiesiems vadovas vienybėje

„Unity“ yra puikus įrankis prototipams kurti nuo žaidimų iki interaktyvių vizualizacijų. Šiame straipsnyje mes apžvelgsime viską, ką jums reikia žinoti, kad pradėtumėte naudoti „Unity“.

Pirma, šiek tiek apie mane: aš esu mėgėjų vienybės kūrėjas, 3D modeliuotojas ir grafikos dizaineris, dirbęs su „Unity“ ir „Blender“ daugiau nei 5 metus. Dabar esu finansų matematikos studentė Dublino universiteto koledže ir kartais užsiimu laisvai samdomu grafiniu dizainu, interneto ir žaidimų prototipais.

Įvadas

Šis straipsnis skirtas tiems, kurie dar niekada nenaudojo „Unity“, tačiau turi tam tikros patirties programuojant ar kuriant tinklalapius. Šio straipsnio pabaigoje turėtumėte turėti gerą bendrą variklio apžvalgą, taip pat visas reikiamas funkcijas ir kodą, kad galėtumėte pradėti kurti pagrindinį žaidimą.

Kodėl „Vienybė“?

Jei norite kurti žaidimus

„Indie Game“ kūrimo variantų yra tikrai nedaug. Trys pagrindiniai pasirinkimai, jei norite kurti žaidimus, yra „Unreal“, „Unity“ arba „GameMaker“.

„Unity“ yra bene mažiausiai nuomonė iš 3 platformų. Tai suteikia jums labai neapdorotą produktą iš dėžutės, tačiau yra labai lankstus, dokumentais pagrįstas ir labai išplėtojamas kuriant beveik bet kokį žaidimo žanrą, kurį galite sugalvoti.

Yra daugybė labai sėkmingų žaidimų, tokių kaip „Escape from Tarkov“ (FPS), „Monument Valley“ („Puzzler“) ir „This Mine War“ (strategija / išlikimas).

Iš tikrųjų variklis, ant kurio statote savo pirmąjį žaidimą, tikriausiai nėra kritinis, todėl patariu tik pasirinkti vieną ir eiti su juo.

Jei norite prototipuoti vartotojo patirtį

Kadangi „vienybė“ yra tik variklis su daugybe fizikos, animacijos ir realiuoju laiku pateikiamų 3D vaizdų, tai taip pat yra puiki erdvė sukurti pilnaverčius interaktyvius prototipus UX tyrimams.

„Unity“ turi visišką palaikymą VR ir AR, todėl tai gali būti puikus įrankis tiriant architektūrą, automatiką ir modeliavimą su klientais.

Šio straipsnio skyriai

  • Kodėl „Vienybė“?
  • Vienybės redaktoriaus langas
  • Vienybės žaidimo objektai
  • „Unity Builtin“ komponentai
  • Individualių komponentų kūrimas
  • Vieno elgesio struktūra
  • Manipuliavimas „GameObjects“
  • Spinduliavimas
  • Susidūrimo aptikimas
  • Pažangios funkcijos
  • Patarimai naujokams
  • Gražūs ištekliai ir bendruomenės
  • Išvada

„Unity“ redaktoriaus langas

Redaktoriaus langas yra padalintas į keletą skyrių. Mes tai aptarsime labai trumpai, nes nuolat apie tai kalbėsime visame straipsnyje. Jei jūsų tai jau žino, tiesiog praleiskite praeitį!

Scenos vaizdas: leidžia „GameObjects“ įdėti ir judėti „Scene Game View“: peržiūri, kaip grotuvas matys sceną iš fotoaparato inspektoriaus: pateikite išsamią informaciją apie pasirinktą „GameObject“ scenoje. Turtas / projektas: čia yra saugomi visi surenkamieji elementai, tekstūros, modeliai, scenarijai ir kt. Hierarchija: įgalina „GameObjects“ lizdą ir struktūrą scenoje

Dabar mums gera pradėti!

Vienybės žaidimo objektai

Kas yra „GameObjects“

„GameObjects“ yra pagrindinis „Unity“ žaidimų variklio elementas. Pavadinimas jį beveik atiduoda:

Viskas, ką įdėsite „Unity“ scenoje, turi būti suvyniota į „žaidimo objektą“.

Jei turite žiniatinklio dizaino foną, galite galvoti, kad „GameObjects“ yra panašūs į elementus! Itin nuobodūs konteineriai, tačiau yra labai išplėsti, kad būtų sukurtas sudėtingas funkcionalumas ar vaizdai.

Pažodžiui viskas, pradedant dalelių efektais, fotoaparatais, grotuvais, vartotojo sąsajos elementais ... (sąrašas tęsiamas), yra „GameObject“.

Hierarchijos kūrimas

Kaip ir kuriant žiniatinklį, „GameObject“ taip pat yra talpykla. Lygiai taip, kaip jūs sukursite įvairius ir pageidaujamus maketus ar abstrakcijas, galbūt norėsite tą patį padaryti ir su žaidimų objektais.

Lizdų žaidimo objektų logika yra beveik tokia pati kaip interneto kūrimo, pateiksiu keletą pavyzdžių ...

Netvarka ir efektyvumas

Žiniatinklio analogija: turite daug panašių elementų, kurie gali būti dinamiškai generuojami skriejant, reaguojant į vartotojo sąveiką, ir norite juos išlaikyti tvarkingus. „Vienybės vertimas“: kurdami „Minecraft“ kloną ir scenoje turite daugybę blokų, atlikimo sumetimais iš scenos turite pridėti ir pašalinti „blokus“. Taigi yra prasminga juos ištuštinti tuščiam „GameObject“ kiekvienam gabalui, nes ištrynus dalį tėvų, bus pašalinti visi vaikų blokai.

Padėties nustatymas

Žiniatinklio analogija: norite išlaikyti turinio, esančio sudėtiniame rodinyje, o ne tinklalapio, padėtį. „Unity Translation“: sukūrėte krūvą pagalbinių dronų, kurie sklando aplink grotuvą. Tikrai nenorėtumėte rašyti kodo, kad galėtumėte jiems persekioti žaidėją, todėl jūs juos išteisinate kaip žaidėjo žaidimo objekto vaikus.

„Unity Builtin“ komponentai

Aktoriaus komponento modelis

„GameObjects“ atskirai yra gana nenaudingi - kaip matėme, jie beveik nėra tik konteineriai. Norėdami pridėti jų funkcionalumą, turime pridėti komponentų, kurie iš esmės yra scenarijai, parašyti C # arba „Javascript“.

„Unity“ veikia pagal „Actor Component“ modelį, paprasčiausiai „GameObjects“ yra aktoriai, o „Components“ yra jūsų scenarijai.

Jei prieš tai parašėte kokias nors žiniatinklio programas, susipažinsite su idėja sukurti mažus daugkartinio naudojimo komponentus, tokius kaip mygtukai, formos elementai, lankstūs išdėstymai, turintys įvairias direktyvas ir pritaikomas ypatybes. Tada surinkite šiuos mažus komponentus į didesnius tinklalapius.

Didelis šio požiūrio privalumas yra pakartotinio naudojimo lygis ir aiškiai apibrėžti komunikacijos kanalai tarp elementų. Lygiai taip pat kurdami žaidimus, norime sumažinti nenumatyto šalutinio poveikio riziką. Mažos klaidos yra nekontroliuojamos, jei nesate atsargūs, ir jas labai sunku derinti. Taigi labai svarbu sukurti mažus, tvirtus ir daugkartinio naudojimo komponentus.

Pagrindiniai integruoti komponentai

Manau, kad atėjo laikas pateikti keletą „Unity Games“ variklio pateiktų integruotų komponentų pavyzdžių.

  • „MeshFilter“: leidžia priskirti medžiagą „3D“ tinklui prie „GameObject“
  • „MeshRender“: leidžia priskirti medžiagą 3D tinklui
  • [Langelis | Mesh] Collider: leidžia aptikti „GameObject“ susidūrimo metu
  • „Rigidbody“: įgalina realų fizinį modeliavimą, kad veiktų „GameObjects“ su 3D tinkleliais, ir sukels aptikimo įvykius dėžutės koliuteriuose
  • Šviesa: apšviečia jūsų scenos dalis
  • Kamera: nustato grotuvo peržiūros sritį, kuri bus pridėta prie „GameObject“
  • Įvairūs vartotojo sąsajos komponentai, skirti GUI rodyti

Yra daugybė krovinių, tačiau tai yra pagrindiniai dalykai, su kuriais turėsite susipažinti. Vienas patarimas yra tai, kad visus šių dokumentų dokumentus galite pasiekti naudodami „unity“ vadovą ir scenarijų nuorodą neprisijungę, kad ir kur būtumėte:

Individualių komponentų kūrimas

Įtaisyti komponentai pirmiausia kontroliuoja fiziką ir vaizdą, tačiau norint iš tikrųjų sukurti žaidimą, jums reikės priimti vartotojo įvestį ir manipuliuoti tais standartiniais komponentais bei pačiais „GameObjects“.

Norėdami pradėti kurti komponentus, eikite į norimą „GameObject“> Pridėti komponentą> paieškos juostoje įveskite naujo komponento pavadinimą> naujas scenarijus (c #).

Kaip bendrą rekomendaciją patarčiau nenaudoti „Javascript“ „Unity“. Tai nebuvo atnaujinta su visais puikiais dalykais, gautais su ES6, ir dauguma pažangesnių dalykų priklauso nuo C # dalykų, perkeltų į „Javascript“ ... Mano patirtis tai tiesiog tampa milžinišku darbu.

Vieno elgesio struktūra

Pagrindinės funkcijos

Visi komponentai paveldimi iš „MonoBehaviour“ klasės. Tai apima keletą standartinių metodų, svarbiausia:

  • void Start (), kuris yra iškviečiamas, kai scenoje užfiksuojamas objektas, kuriame yra scenarijus. Tai naudinga bet kuriuo metu, kai norime atlikti inicijavimo kodą, pvz. nustatyti žaidėjo įrangą, kai jie nerš į rungtynes.
  • void Update (), kuris vadinamas kiekvienu kadru. Čia eis didžioji dalis vartotojo įvesties kodo, atnaujinanti įvairias savybes, pavyzdžiui, grotuvo judesį scenoje.

Inspektoriaus kintamieji

Dažnai komponentus norime padaryti kuo lankstesnius. Pavyzdžiui, visi ginklai gali turėti skirtingą žalą, ugnies greitį, matomumą ir pan. Nors visi ginklai iš esmės yra tas pats dalykas, mes galime norėti, kad galėtume greitai sukurti skirtingus variantus naudodamiesi „Unity“ redaktoriumi.

Kitas pavyzdys, kai galbūt norėtume tai padaryti, yra kuriant vartotojo sąsajos komponentą, kuris stebi vartotojo pelės judesius ir nukreipia žymeklį į peržiūros sritį. Čia galbūt norėsime kontroliuoti žymeklio jautrumą judesiams (jei vartotojas naudojo vairasvirtę arba žaidimų pultą, palyginti su kompiuterio pele). Taigi būtų prasminga, kad šiuos kintamuosius būtų lengva pakeisti ir redagavimo režimu, ir eksperimentuoti su jais vykdymo metu.

Tai galime padaryti lengvai, paprasčiausiai paskelbdami juos kaip viešuosius kintamuosius komponento kūne.

Priimamas vartotojo įvestis

Žinoma, mes norime, kad mūsų žaidimas reaguotų į vartotojo indėlį. Dažniausiai tai atliekami naudojant šiuos metodus komponento (arba bet kur kitur, kur jums patinka) funkcija Update ():

  • Input.GetKey (KeyCode.W) Grąžina tikrąjį W klavišą
  • „Input.GetKeyDown“ (KeyCode.W) grąžina „True“, kai pirmą kartą paspaudžiate W mygtuką
  • „Input.GetAxis“ („Vertikalus“), „Input.GetAxis“ („Horizontalus“) Grąžina tarp -1,1 pelės įvesties judėjimo

Manipuliavimas „GameObjects“

Kai turėsime vartotojo įvestį, norime, kad „GameObjects“ mūsų scenoje reaguotų. Galime apsvarstyti keletą atsakymų tipų:

  • Vertimas, sukimas, mastelis
  • Sukurkite naujus „GameObjects“
  • Pranešimų siuntimas esamiems „GameObjects“ / komponentams

Transformacijos

Visi „GameObjects“ turi transformavimo ypatybę, kuri leidžia atlikti įvairias naudingas manipuliacijas dabartiniu žaidimo objektu.

Pirmiau pateikti metodai yra gana savaime suprantami, tiesiog atkreipkite dėmesį, kad mes naudojame mažąsias „ gameObject“, norėdami nurodyti „GameObject“, kuriam priklauso šis konkretus komponento egzempliorius.

Paprastai gera praktika yra naudoti vietinę [padėtis, pasukimas], o ne objekto visuotinę padėtį / pasukimą. Tai paprastai palengvina objektų judėjimą prasmingu būdu, nes vietinės erdvės ašis bus orientuota ir sutelkta į pagrindinį objektą, o ne į pasaulio kilmę ir x, y, z kryptis.

Jei jums reikia konvertuoti tarp vietos ir pasaulio erdvės (taip būna dažnai), galite naudoti šiuos veiksmus:

Kaip galite įsivaizduoti, už to yra metodo pavadinimo „atvirkštinė“ užuomina apie gana paprastą tiesinę algebrą.

Naujų „GameObjects“ kūrimas

Kadangi „GameObjects“ iš esmės yra viskas jūsų scenoje, galbūt norėsite sugebėti juos sugeneruoti skrisdami. Pvz., Jei jūsų grotuvas turi kažkokį sviedinių paleidimo įrenginį, galbūt norėsite sugebėti skraidyti sukurti sviedinius, turinčius savo kapsulės logiką, skirtą skrydžiui, žalos atlyginimui ir kt.

Pirmiausia turime pristatyti surenkamojo elemento sąvoką . Tai galime sukurti paprasčiausiai nuvildami bet kurią „GameObject“ scenos hierarchijoje į aplanką „turtai“.

Tai iš esmės saugo objekto, kurį ką tik turėjome savo scenoje, šabloną su visomis tomis pačiomis konfigūracijomis.

Turėdami šiuos surenkamuosius komponentus, galime juos priskirti inspektoriaus kintamiesiems (kaip jau kalbėjome anksčiau) apie bet kurį scenos komponentą, kad galėtume bet kada sukurti naujus „GameObjects“, kaip nurodyta surenkamojoje dalyje.

Tada mes galime atlikti surenkamojo elemento „greitinimą“ ir manipuliuoti juo norimoje scenos vietoje ir užmegzti būtinus tėvų santykius.

Prieiga prie kitų „GameObjects“ ir komponentų

Dažnai mums reikia bendrauti su kitais „GameObjects“ ir su jais susijusiais komponentais. Kai turite nuorodą į žaidimo objektą, tai yra gana paprasta.

ComponentName comp = some_game_object.GetComponent ();

Po to galite pasiekti bet kurį iš viešųjų komponento metodų / kintamųjų, kad galėtumėte manipuliuoti „GameObject“. Tai yra nesudėtinga bitė, tačiau iš tikrųjų nuorodą į „GameObject“ galima gauti keliais būdais ...

Prieiga per inspektoriaus kintamąjį

Tai paprasčiausia. Tiesiog sukurkite „GameObject“ viešąjį kintamąjį, kaip jau anksčiau įrodėme su surenkamaisiais elementais, ir rankiniu būdu nuvilkite jį ant komponento per inspektorių. Tada pasiekite kintamąjį, kaip nurodyta aukščiau.

Prieiga per žymėjimą

Mes galime pažymėti „GameObjects“ arba surenkamuosius elementus per inspektorių ir tada naudoti žaidimo objekto radimo funkcijas, norėdami rasti nuorodas į juos.

Tai tiesiog daroma taip, kaip nurodyta toliau.

GameObject some_game_object = GameObject.FindGameObjectWithTag („Plyta“);

Prieiga per transformaciją

Jei norime pasiekti komponentus kokiame nors pagrindiniame objekte, galime lengvai tai padaryti naudodami transformo atributą.

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

Prieiga per „SendMessage“

Arba, jei norime išsiųsti pranešimą daugeliui kitų komponentų arba norime išsiųsti pranešimą apie objektą, kuris yra toli įterptoje hierarchijoje, galime naudoti pranešimo siuntimo funkcijas, kurios priima funkcijos pavadinimą ir argumentus.

gameObject.SendMessage („MethodName“, parametrai); // Transliuoti messagegameObject.SendMessageUpwards („MethodName“, parametrai); // Gauna tik aukščiau įdėti komponentai.

Spinduliavimas

Galbūt jau girdėjote apie tai anksčiau, kai žmonės lygina „fizikos“ ar „spinduliais pagrįstus“ FPS žaidimus. Spindulinis transliavimas iš esmės yra tas pats, kas turėti lazerinį žymeklį, kuris, kontaktuodamas su „susidūrėju“ ar „standžiu kūnu“, grąžina „smūgį“ ir perduoda objekto detales.

Yra du scenarijai, kai tai yra naudinga (tikriausiai yra daug daugiau):

  1. Jei kurtumėte žaidimo ginklų sistemą, smūgio aptikimui galėtumėte naudoti radijo transliaciją ir netgi pritaikyti spindulio ilgį, kad kovos daiktai „pataikytų“ tik mažais atstumais
  2. Sukurkite spindulį nuo pelės žymiklio iki taško 3d erdvėje, ty jei norite, kad vartotojas strateginiame žaidime galėtų pasirinkti vienetus su pele.

Kaip matote, to kodas yra šiek tiek labiau susijęs. Svarbiausia suprasti, kad norint mesti spindulį ten, kur pelė rodo 3D erdvėje, reikia „ScreenPointToRay“ transformacijos. Priežastis yra tai, kad fotoaparatas 3D erdvę perteikia kaip 2d peržiūros sritį nešiojamojo kompiuterio ekrane, todėl natūraliai yra projekcija, kurią reikia perkelti atgal į 3D.

Susidūrimo aptikimas

Anksčiau minėjome „Collider“ ir „Rigidbody“ komponentus, kuriuos galima pridėti prie objekto. Susidūrimo taisyklė yra ta, kad vienas susidūrimo objektas turi turėti standųjį kūną, o kitas - susidūrimą (arba abu turi abu komponentus). Atminkite, kad naudojant radijo transliaciją spinduliai sąveikauja tik su objektais, prie kurių pritvirtinti susidūrimo komponentai.

Nustatę bet kurį prie objekto pridedamą pasirinktinį komponentą, mes galime naudoti OnCollisionEnter, OnCollisionStay ir OnCollisionExit metodus, kad reaguotume į susidūrimus. Gavę susidūrimo informaciją, galime atsakyti už „GameObject“ ir panaudoti tai, ko išmokome anksčiau, taip pat sąveikauti su prie jo prijungtais komponentais.

Reikėtų atkreipti dėmesį į tai, kad nelankstūs kūnai suteikia fiziką, pvz., Objektų gravitaciją, taigi, jei norite, kad tai būtų išjungta, turėsite pažymėti „ is_kinematic “.

Pažangios funkcijos

Neaptarsime šio dalyko dabar, bet galbūt būsimame straipsnyje, kad tik suprastume, jog jie egzistuoja.

Kurti GUI

„Unity“ turi pilnavertį vartotojo sąsajos variklį, skirtą jūsų žaidimo GUI išdėstyti. Apskritai šie komponentai veikia gana panašiai kaip ir likę varikliai.

„Unity“ redaktoriaus išplėtimas

„Unity“ leidžia pridėti prie inspektorių pasirinktinius mygtukus, kad redagavimo režimu galėtumėte paveikti pasaulį. Pavyzdžiui, norėdami padėti statyti pasaulį, galite sukurti individualų langą moduliniams namams statyti.

Animacija

„Unity“ turi grafikais pagrįstą animacijos sistemą, leidžiančią sujungti ir valdyti įvairių objektų animacijas, pavyzdžiui, žaidėjus, įgyvendinančius kaulų pagrindo animacijos sistemą.

Medžiagos ir PBR

„Unity“ paleidžia fiziškai pagrįstą atvaizdavimo variklį, kuris leidžia realiu laiku apšviesti ir naudoti tikroviškas medžiagas. Realybė yra tai, kad prieš gamindamiesi iš tikrųjų gerai atrodančius dalykus, pirmiausia turėsite išmokti 3D modeliavimo arba naudoti modelius, kuriuos sukūrė ir optimizavo kažkas kitas.

Patarimai naujokams

Jei planuojate parašyti savo pirmąjį žaidimą, nenuvertinkite sudėtingumo ir laiko, kurio reikia net ir nereikšmingiausiems žaidimams parašyti. Prisiminkite, kad daugumoje „Steam“ pasirodančių žaidimų komandos dirba ilgus metus!

Pasirinkite paprastą koncepciją ir suskirstykite ją į mažus pasiekiamus etapus. Labai rekomenduojama atskirti žaidimą į kuo mažesnius nepriklausomus komponentus, nes daug mažiau tikėtina, kad susidursite su klaidomis, jei komponentus laikysite paprastus, o ne monolitinius kodų blokus.

Prieš eidami ir rašydami bet kurios savo žaidimo dalies kodą, eikite ir tyrinėkite, ką kažkas darė anksčiau, kad išspręstų tą pačią problemą - tikėtina, kad jie turės daug silpnesnį sprendimą.

Gražūs ištekliai ir bendruomenės

Žaidimų dizainas turi vieną geriausių bendruomenių iš visų ten esančių, o pramonėje yra daugybė aukštos kvalifikacijos profesionalų, kurie nemokamai arba be nieko pateikia turinį. Tai sritis, kuriai reikalingi 3D modeliuotojai, konceptualūs menininkai, žaidimų dizaineriai, programuotojai ir pan. Susiejau keletą puikių bendrųjų šaltinių, kuriuos aptikau kiekviename iš šių laukų:

Koncepcijos menas

  • „Feng Zhu“ dizaino mokykla (daugiau nei 90 valandų trukmės koncepcijos meno pamokos)
  • Tyleris Edlinas Artas (puiki BST meno bendruomenė su profesionalų atsiliepimais apie mėnesinius iššūkius)
  • „Art Cafe“ (interviu ir seminarai su garsiomis konceptualiomis dailininkėmis)
  • Trentas Kaniuga (iliustratorius ir 2D menininkas, kuris taip pat kuria savo žaidimą)

3D modeliavimas

  • „CG Cookie“ (geriausi tinklinio audeklo modeliavimo pagrindai), jie turi daugybę kitų puikių maišytuvų turinių
  • Toras Frickas (kietojo paviršiaus modeliuotojai ir skulptoriai maišytuve)
  • Glebas Aleksandrovas (trumpi galingi „Blender“ atvaizdavimo mokymai)

Žaidimo dizainas

  • „DoubleFine Amnesia Fortnight“ („GameDevs“, kurie atlieka 2 savaičių hakatoną ir įrašo visą savo projektavimo procesą)
  • „GameMakers“ įrankių rinkinys (nagrinėja žaidimo dizaino principus)

Programavimas

  • Rankų darbo herojus (žaidimo ir variklio rašymas nuo nulio C)
  • Jonathanas Blowas („Indie“ kūrėjas, tiesiogiai transliuojantis savo žaidimų kūrimą)
  • „Brackeys“ („Nice Unity“ mokymo programos)

Išvada

Tikiuosi, kad jums patiko ši pamoka! Aš darau šiek tiek grafinio dizaino darbų, taip pat žaidimų ir vartotojo sąsajų prototipus, todėl patikrinkite savo portfolio ! Aš taip pat esu susietas .

Portfelis| „LinkedIn“