Žaidimo su vienybe programavimas: pradedančiųjų vadovas

Žaidimo su vienybe programavimas: pradedančiųjų vadovas
Šį vadovą galima atsisiųsti kaip nemokamą PDF. Atsisiųskite šį failą dabar . Nesivaržykite nukopijuoti ir pasidalyti šia informacija su draugais ir šeima.

Stebina interneto ekonomikos bruožas yra nepriklausomų vaizdo žaidimų populiarėjimas. Kai tai buvo išskirtinis tūkstančių žmonių domenas, kelių milijonų dolerių vertės trigubos A studijos, buvo sukurta daugybė įrankių rinkinių, kurie šiuolaikinius žaidimų kūrimo išteklius atneša į asmenų rankas arba nedideles, specialias programuotojų ir dizainerių kolekcijas. Anksčiau aptarėme geriausius indie žaidimus, todėl būtinai patikrinkite, ar jie įkvepia, ką galima pasiekti naudojant tokias priemones kaip „Unity“.





Šios nepriklausomų žaidimų kūrimo komandos pademonstravo judrumą ir toleranciją rizikai, kuri daugeliu atvejų leidžia joms greičiau paskatinti žaidimo naujoves nei jų dideli biudžeto kolegos. Pastaraisiais metais buvo pristatyta daug šokiruojančiai sėkmingų indie kūrinių, įskaitant Minecraft , Limbo , ir Super mėsos berniukas ir net jei neturite įgūdžių kurti tokius žaidimus, galite sukurti žaidimą naudodami „Buildbox“.





Sparčiai besikeičiančiame nepriklausomų žaidimų kūrimo kraštovaizdyje, Vienybė tapo de facto standartu: jo maža kaina, paprastas naudojimas ir platus funkcijų rinkinys idealiai tinka greitam žaidimų kūrimui. „Unity“ yra tokia lanksti, kad jūs netgi galite sukurkite savo pasirinktinius žaidimų valdiklius su šiek tiek pasidaryk pats žinok!





Net didelės studijos, tokios kaip CCP (Developers of Ieva internete ) naudoti jį greitai prototipų kūrimui. „Unity“ siūlo „žaidimų variklį dėžutėje“ - fizikos ir atvaizdavimo variklį su kabliukais kelioms scenarijų kalboms, pritaikomas praktiškai bet kokiam vaizdo žaidimų žanrui.

Nors „Unity“ teikia vaizdinį redaktorių, skirtą manipuliuoti žaidimų aplinka, „Unity“ nėra „nulinio programavimo“ žaidimų kūrimo įrankis. Norint pasiekti rezultatų, jums reikia programuoti, bet taip pat suteikia daug lankstesnio ir galingesnio įrankio nei bet kuri „žaidimų kūrimo“ programa.



„Unity“ nepadarys darbo už jus, tačiau žymiai sumažina patekimo į rinką barjerą. Pradedant visiškai nuo nulio naudojant „C ++“ ir „OpenGL“, gali prireikti dienų, kad pasiektume tašką, kuriame iš tikrųjų kažkas ekrane rodoma. Naudojant „Unity“, tai trunka apie dešimt sekundžių. „Unity“ greitai ir intuityviai perduoda pagrindinius žaidimų kūrimo elementus pradedantiesiems programuotojams.

Šiandien aš jums padėsiu viską, ką reikia žinoti, kad sukurtumėte žaidimą „Unity“, kuris yra suskirstytas į dešimt pagrindinių skyrių:





§1 - Vienybės versijos

§2 - „Unity“ įdiegimas





§3-Trumpas į objektą orientuotos paradigmos įvadas

§4 - Vienybės pagrindai

§5 - Pavyzdys: Pagrindiniai žaidimo elementai

§6 - scenarijus vienybėje

§7 - Pavyzdys: scenarijus

§8 - Dokumentų tyrimas / daugiau sužinoti

§9 - žaidimo kūrimas / kompiliavimas į atskirą programą

§10-Uždarymo pastabos

1. Vienybės versijos

„Unity“ yra dviejų pagrindinių skonių: „Pro“ ir nemokamos versijos. Čia yra skirtumų skaičius , bet, apskritai kalbant, „Pro“ versija palaiko daugybę vizualinių patobulinimų (pvz., minkštus šešėlius realiuoju laiku ir papildomą apdorojimą) ir daugybę palyginti nedidelių funkcijų, kurios yra labai naudingos sudėtingesniems žaidimams.

Tai reiškia, kad daugumai palyginti paprastų žaidimų, kuriuos galbūt norėsite sukurti, nemokama „Unity“ versija yra visiškai tinkama. Susidomėjusiems išsamiau išnagrinėsime pagrindinius skirtumus.

1.1 Kainodara

Nemokama „Unity“ versija, žinoma, yra nemokama. Tačiau yra keletas apribojimų: nemokama „Unity“ versija negali būti licencijuota jokiai bendrovei, kurios metinės pajamos yra didesnės nei 100 000 USD . Nors tokios organizacijos nepatenka į šio vadovo taikymo sritį, jei įtariate, kad galite tapti tokia organizacija, tikriausiai būtų protinga rinktis „Pro“ versiją.

„Unity“ „Pro“ versija yra 75 USD per mėnesį, arba 1500 USD gauti nuolatinę licenciją ir neriboja, ką galite daryti su ja sukurtais žaidimais. Taip pat galimas 30 dienų nemokamas bandomasis laikotarpis, kurį naudosime šiame vadove, kad galėtume kuo išsamiau apžvelgti galimas funkcijas. Taip pat galima gauti vienerių metų studento licenciją Studija dėl 129 USD .

1.2 Savybės

Nemokamoje „Unity“ versijoje nėra daug funkcijų. Tačiau svarbiausi skirtumai yra šie: nemokamoje „Unity“ versijoje trūksta daugybės atvaizdavimo parinkčių, leidžiančių geriau atrodyti, greičiau veikti (LOD palaikymas, ekrano erdvės papildomas apdorojimas, pažangūs šešėliai, realaus laiko programinė įranga) šešėliai ir atidėtas atvaizdavimas). Taip pat trūksta pilnatvės mechanim animacijos sistema ir kai kurie AI įrankiai.

Apskritai, sudėtingiems, didelio masto projektams ar projektams, kuriuose svarbus grafinis našumas, verta naudoti profesionalią versiją. Aš naudoju profesionalią versiją, nes kuriu virtualios realybės žaidimus „Oculus Rift“, o ekrano erdvės papildomo apdorojimo palaikymas yra būtinas norint teisingai sąveikauti su laisvų rankų įranga.

2. „Unity“ diegimas

„Unity“ įdiegti paprasta. Vykdomąjį failą galite atsisiųsti iš unity3d.com/get-unity/download .

Atsisiuntę paleiskite ją ir vykdykite diegimo programos instrukcijas. Kai diegimas bus baigtas, pasirodys langas pavadinimu „aktyvuoti„ Unity “licenciją“. Pažymėkite laukelį „suaktyvinti nemokamą 30 dienų„ Unity Pro “bandomąją versiją“, tada „Gerai“.

Sveikinu! Dabar turite 30 dienų „Unity Pro“ bandomąją versiją. Pasibaigus bandomajam laikotarpiui, jei nenorite pirkti profesionalios versijos, galite pereiti prie nemokamos versijos ir pasilikti esamą turinį.

2 grotuvo programos atskiruose įrenginiuose

3. Trumpas į objektą orientuotos paradigmos įvadas

Prieš pradedant „Unity“, svarbu šiek tiek peržvelgti pagrindus. „Unity“ palaiko abu C # ir „JavaScript“ dėl žaidimų programavimas ; šioje pamokoje dirbsime su C#.

Pirmiausia, jei niekada anksčiau neprogramavote, atidėkite šią mokymo programą ir praleiskite kelias dienas dirbdami su „Microsoft“ C # Kalbos gruntas kol nesijausite patogiai naudodami kalbą paprastoms užduotims atlikti.

Jei norite kažko šiek tiek kitokio nei C# (bet nebūtinai kalbos, kurią galite naudoti „Unity“), peržiūrėkite mūsų šešių lengviausių pradedantiesiems programavimo kalbų vadovą.

Jei anksčiau programavote imperatyvia ar į objektą orientuota kalba, pvz., C ar „Java“, peržiūrėkite pradmenis ir susipažinkite su tuo, kaip C# skiriasi nuo kitų kalbų, kurias naudojote anksčiau. Bet kuriuo atveju tęskite mokymo programą, kol nesijausite patogiai spręsdami paprastas C# problemas (pvz., Jei paprašyčiau parašyti programą, kuri spausdina pirmuosius šimtus pirminių skaičių, turėtumėte sugebėti parašyti šią programą be konsultuojasi su „Google“).

Svarbiausia čia suprantama sąvoka yra į objektą orientuota paradigma (sutrumpinta kaip ATVIRAS ). Objektinėmis kalbomis programos yra suskirstytos į funkcinius vienetus, vadinamus Objektai . Kiekvienas objektas turi savo asmeninius kintamuosius ir funkcijas. Vadinamos konkretaus objekto funkcijos metodus .

Idėja čia yra moduliškumas: izoliuodami kiekvieną objektą ir priversdami kitus objektus su juo sąveikauti savo metodais, galite sumažinti galimų netyčinių sąveikų skaičių, o kartu ir klaidas. Taip pat galite sukurti objektus, kuriuos vėliau galėsite pakartotinai naudoti be jokių pakeitimų. „Unity“ jūs kursite šiuos objektus ir pritvirtinsite juos žaidimo subjektai (kurių elgesį jie valdys).

Objektai imituojami iš klasės : klasė yra tik failas, kuriame pateikiamas jūsų objekto apibrėžimas. Taigi, jei norite a mook objektą, kuris tvarko jūsų žaidimo priešo dirbtinį intelektą, parašytumėte „Mook“ klasę ir pridėtumėte tą failą prie kiekvieno priešo subjekto. Kai paleisite žaidimą, kiekvienas priešas turės „Mook“ objekto kopiją.

Naujo scenarijaus pridėjimas prie objekto atrodo taip:

Pirmas, pasirinkti objektą ir eikite į Inspektorius . Spustelėkite Pridėti komponentą mygtuką.

Eiti į naujas scenarijus , įveskite norimą vardą ir spustelėkite sukurti ir pridėti .

Dabar turite naują scenarijų, kurį galite redaguoti dukart spustelėdami jį!

Klasės failas atrodo maždaug taip:

using UnityEngine;
public class Mook : MonoBehaviour {
private float health;
void Start () {
health = 100;
}
void Update(){
if (health > 0) {
/* Search for player
if you encounter the player on the road, kill him
if you get shot, remove a random amount of health */
}
}
}

Padalinkime tai:

  • „UnityEngine“ naudojimas: Ši eilutė nurodo C#, kad norime naudoti „Unity“ bibliotekas, kurios leidžia mums prisijungti prie „Unity“ žaidimo variklio.
  • Viešoji klasė „Mook: Mono“ Elgesys: Ši eilutė nurodo klasę ir jos pavadinimą - mook .
  • Privati ​​plūdės sveikata: Tai deklaruoja privačios klasės kintamąjį (kurį galima pakeisti tik iš klasės). Kintamajam suteikiama reikšmė Pradėti .
  • Tuščia pradžia (): Tai skelbia metodą, vadinamą Pradėti . Pradėti yra specialus metodas, kuris veikia tik vieną kartą, kai žaidimas iš pradžių paleidžiamas.
  • Negaliojantis atnaujinimas (): Atnaujinimas yra dar vienas ypatingas metodas, kuris veikia kiekviename kadre. Dauguma jūsų žaidimo logikos bus čia.
  • // jei kelyje susiduri su žaidėju, nužudyk jį: Ši eilutė yra komentaras (bet kuri eilutė, prasidedanti dvigubu pasviruoju brūkšniu, ignoruojama C#). Komentarai naudojami priminti sau, ką daro tam tikri kodo bitai. Šiuo atveju šis komentaras naudojamas sudėtingesniam kodo blokui, kuris iš tikrųjų daro tai, kas aprašyta komentare.

Kartu su Pradėti ir Atnaujinti , savo metodus galite parodyti beveik bet kokiu pavadinimu. Tačiau jūsų sukurti metodai nebus vykdomi, nebent jie bus vadinami. Paskelbkime hipotetinės klasės metodą, vadinamą addTwoNumbers kuris sujungia du skaičius:

public float addTwoNumbers(float a, float b) {
return a+b;
}

Tai deklaruoja viešą (prieinamą kitiems objektams) metodą, kuris grąžina plūdę, vadinamą addTwoNumbers , kuris naudoja du plūdes kaip įvestį (vadinamas į ir b ). Tada ji grąžina dviejų verčių sumą kaip išvestį.

Skambinkite šiam metodui iš tos pačios klasės (tarkime, iš vidaus) Atnaujinti ) atrodo taip:

float result = addTwoNumbers(1, 2);

Metodo iškvietimas iš kitos klasės yra panašus:

addTwoNumbers instance;
float result = instance.addTwoNumbers(1, 2);

Vėlgi, tai tik sukuria mūsų klasės egzempliorių, pasiekia tinkamą metodą ir pateikia jam skaičius, kuriuos norime pridėti, tada išsaugo rezultatą rezultatas . Paprasta.

Jei jūsų scenarijus pridedamas prie objekto, turinčio specialių savybių (pvz., Dalelių skleidėjas), kurio negalima pasiekti naudojant įprastą „GameObject“ parametrų rinkinį, galite pasirinkti jį laikyti kitokio pobūdžio žaidimo objektu, naudodami „GetComponent“ metodas.

To sintaksė atrodo taip:

GetComponent().Play();

Jei kas nors jums nepažįstama, grįžkite ir pereikite prie C# pradmenų. Tęsdami tai sutaupysite daug nusivylimo.

4. Vienybės pagrindai

Šiame skyriuje aptarsime pagrindinę „Unity“ variklio mechaniką. „Unity“ darbo eiga yra maždaug tokia:

  1. Sukurkite objektą, kuris atliktų vaidmenį žaidime (tuščia „GameObjects“ gali būti naudojamas abstrakčioms loginėms užduotims).
  2. Parašykite arba raskite klasės failą ir pridėkite jį prie objekto kaip scenarijų (naudodami Pridėti komponentą mygtuką inspektorius vaizdas.
  3. Bėgti > testas > derinimas > kartoti kol jis veiks ir pereikite prie kito žaidimo elemento.

„Unity“ yra keletas pagrindinių peržiūros skirtukų, kuriuos galima įvairiai išdėstyti pagal vartotojo skonį. Didieji penki yra:

  1. Žaidimas: rodomas veikiantis žaidimo egzempliorius, su kuriuo galite bendrauti ir išbandyti.
  2. Scena: pateikia statinę, redaguojamą žaidimų pasaulis .
  3. Inspektorius: leidžia keisti atskirus žaidimo pasaulio objektus, juos pasirinkus redaktorius skirtuką.
  4. Projektas: leidžia naršyti projekto failus ir vilkti modelius, medžiagą ir kitus išteklius į redaktorius skirtuką, kad juos įtrauktumėte į žaidimų pasaulį.
  5. Hierarchija: šiame skirtuke rodomi visi pasaulio objektai, leidžiantys rasti tolimus scenos objektus ir pirminius objektus vienas kitam spustelėjus ir vilkdami.

Žemiau esančioje diagramoje rasite visų šių dalykų vietas:

4.1 Vienybės subjektai

4.1.1 Akys

Tinklai yra kelias 3D geometrija yra atstovaujamas vienybėje. Galite naudoti įmontuotą „Unity“ primityvus objektus (kubelius, rutulius, cilindrus ir kt.) arba importuokite savo 3D modelius iš modeliavimo paketo, pvz. Maišytuvas arba Maya . „Unity“ palaiko įvairius 3D formatus, įskaitant .fbx , ir .3ds .

Pagrindinės tinklelio manipuliavimo priemonės yra mastelio keitimo, pasukimo ir vertimo mygtukai viršutiniame kairiajame sąsajos kampe. Šie mygtukai prideda valdymo piktogramas prie modelių redagavimo priemonės vaizde, kuriuos vėliau galima naudoti manipuliuoti jais erdvėje. Norėdami pakeisti objekto tekstūrą ar fizines savybes, pasirinkite jas ir naudokite inspektorius peržiūrėti, analizuoti medžiaga ir tvirtas kūnas elementai.

4.1.2 GUI elementai

Tradiciniai GUI raštai ir tekstas gali būti rodomi naudojant GUI tekstas ir GUI tekstūra „GameObjects“ redaktoriuje. Tačiau patikimesnis ir realistiškesnis UI elementų tvarkymo būdas yra naudoti 3D tekstas ir Keturvietis „GameObjects“ (su skaidriomis tekstūromis ir neapšviestu skaidriu šešėliu), kad HUD elementai būtų įtraukti į žaidimų pasaulį kaip esybės.

Viduje konors hierarchija vaizdą, šiuos žaidimo elementus galima nuvilkti į pagrindinę kamerą, kad jie taptų vaikais, užtikrinant, kad jie judėtų ir suktųsi su fotoaparatu.

GUI elementų (teksto ir tekstūros) dydis ir mastelis gali būti pakoreguoti naudojant atitinkamus skirtukus inspektorius.

4.1.3 Medžiagos

Medžiagos yra tekstūrų ir šešėlių deriniai, jas galima nuvilkti tiesiai į žaidimo objektus iš projekto skirtuko. Su „Unity Pro“ yra daug šešėlių, o prie jų pritvirtintą tekstūrą galite koreguoti naudodami objekto, kuriam jie taikomi, skirtuką inspektorius.

Norėdami importuoti tekstūrą, konvertuokite ją į .jpg , .png , arba .bmp ir vilkite jį į turto aplanką „Unity“ projekto kataloge (kuris rodomas Mano dokumentai pagal numatytuosius nustatymus). Po kelių sekundžių redaktoriuje pasirodys įkėlimo juosta. Kai jis bus baigtas, galėsite rasti vaizdą kaip tekstūrą po projektas skirtuką.

4.1.5 Žibintai

Šviesos yra „GameObjects“ kuris projektuoja spindesį į pasaulį. Jei jūsų scenoje nėra šviesų, visi daugiakampiai nubrėžti to paties ryškumo lygiu, suteikiant pasauliui plokščią, išplautą išvaizdą.

Šviestuvai gali būti išdėstyti, pasukti ir turėti keletą vidinių savybių, kurias galite pritaikyti. The intensyvumas slankiklis valdo šviesos ryškumą ir diapazonas kontroliuoja, kaip greitai jis išnyksta.

Gairės scenos vaizdas parodyti maksimalų apšvietimo diapazoną. Norėdami pasiekti norimą efektą, žaiskite naudodami abu nustatymus. Taip pat galite reguliuoti šviesos spalvą, modelį ( slapukas ant paviršiaus, į kurį nukreipta šviesa, ir koks blyksnis atsiranda ekrane, kai žiūrima tiesiai į šviesą. Slapukas gali būti naudojamas suklastoti tikroviškesnius šviesos modelius, sukurti dramatiškus netikrus šešėlius ir imituoti projektorius.

Yra trys pagrindinės šviesos rūšys vieta , taškas , ir kryptingas .

Vietiniai žibintai turėti vietą 3D erdvėje ir projektuoti šviesą tik viena kryptimi kintamo kampo kūgiu. Jie tinka žibintuvėliams, prožektoriams ir apskritai suteikia tikslesnį apšvietimo valdymą. Taškiniai žibintai gali mesti šešėlius.

Taškiniai žibintai turėti vietą 3D erdvėje ir tolygiai skleisti šviesą visomis kryptimis. Taškiniai žibintai nemeta šešėlių.

Kryptiniai žibintai Galiausiai, jie naudojami saulės šviesai imituoti: jie skleidžia šviesą ta kryptimi, tarsi iš be galo toli. Kryptinės šviesos veikia kiekvieną scenos objektą ir gali sukelti šešėlį.

4.1.6 Dalelių sistemos

Į Dalelių sistema yra „GameObject“ kuris vienu metu sukuria ir valdo šimtus ar tūkstančius dalelių. Dalelės yra maži, optimizuoti 2D objektai, rodomi 3D erdvėje. Dalelių sistemos naudoja supaprastintą atvaizdavimą ir fiziką, tačiau gali rodyti tūkstančius objektų realiu laiku be mikčiojimo, todėl jos idealiai tinka dūmams, ugniai, lietui, kibirkštims, stebuklingiems efektams ir kt.

Yra daug parametrų, kuriuos galite patobulinti, kad pasiektumėte šiuos efektus, ir jūs galite juos pasiekti sukurdami dalelių sistemą po komponentų redaktorius > pasirenkant dalelių sistemą > atidarydami inspektoriaus skirtuką . Galite pakeisti kiekvienos dalelės dydį, greitį, kryptį, sukimąsi, spalvą ir tekstūrą ir nustatyti, kad dauguma šių parametrų taip pat keistųsi laikui bėgant.

Pagal susidūrimas atributą, jei jį įgalinsite ir nustatysite modeliavimo erdvę į pasaulis gausite dalelių, kurios susidurs su pasaulio objektais, kurios gali būti panaudotos daugeliui realių dalelių efektų, įskaitant lietų, judantį vandenį ir kibirkštis.

5. Pavyzdys: pagrindiniai žaidimo elementai

Šioje pamokoje mes padarysime paprastą žaidimą Tenisas - tai, apie ką jau ne kartą kalbėjome „pasidaryk pats“:

  • Arduino klasikinis tenisas
  • Arduino OLED tenisas

Šiame skyriuje apžvelgsime pagrindinių elementų išdėstymą - scenarijaus vadovėlis bus pateiktas vėliau.

Pirmiausia suskaidykime „Pong“ žaidimą į pagrindinius jo komponentus. Pirma, mums reikia dviejų irklų ir rutulio. Kamuolys skrenda už ekrano ribų, todėl norėsime mechanizmo, kuris jį iš naujo nustatytų. Mes taip pat norime, kad tekste būtų rodomas dabartinis rezultatas, o norėdami parodyti jums visus pagrindinius „Unity“ elementus, mes norėsime išgalvoto dalelių efekto, kai pataikysite į kamuolį. Visas žaidimas turės būti dramatiškai apšviestas.

Tai suskaidoma į a rutulio objektas (sfera), a nerštas , dvi irklo atramos su dalelių skleidėjai pridedamas, a 3D teksto esybė ir a taškinė šviesa . Šioje pamokoje naudosime numatytąją fizinę medžiagą atšokti , su atšokti kombainas nustatytas į daugintis . Štai kaip atrodo sąranka dešimtyje ekrano kopijų:

Pirmiausia sukurkite a kubo rekvizitas irklui.

Tinkamai sureguliuokite, jį dubliuoti , ir įdėkite a sfera tarp kamuoliuko.

Tada sukurkite a 3D teksto objektas ir skalė ir poziciją teisingai, keičiant šrifto dydis atributą, kad gautumėte mažiau pikselių vaizdą.

Tada sukurkite du dalelių sistemos , pasirinkite norimas charakteristikas ir pritvirtinkite jas prie mentelių.

Toliau norėsite padėkite ir pasukite fotoaparatą kad jis teisingai įrėmintų sceną. Pasirinkus fotoaparatą, apatiniame dešiniajame kampe galite pamatyti nedidelę fotoaparato vaizdo peržiūrą.

Prieš baigdami, turime sukurti du papildomus kubelius, kurie būtų buferiai, kad kamuolys neatšoktų iš žaidimo zonos. Mes galime padaryti juos nematomus, panaikindami žymėjimą tinklelis viduje konors inspektoriaus skirtukas .

Jei paspausite žaisti, dabar pamatysite pagrindinius mūsų žaidimo elementus. Jie dar nieko nepadarys, bet mes tai padarysime!

Dabar, kai jau turime tokią sąranką, pakalbėsime apie tai, kas susiję su šių elementų scenarijaus sudarymu žaidimui sukurti.

6. Scenarijaus kūrimas vienybėje

Kai prie objekto pridedamas scenarijus, galite jį pataisyti dukart spustelėdami jį inspektorius . Tai atsidaro MonoDevelop , numatytoji „Unity“ kūrimo aplinka. Iš esmės „Monodevelop“ yra teksto redaktorius, kurio funkcijos yra specialiai optimizuotos programavimui.

Raktiniai žodžiai ir komentarai yra paryškinti mėlyna ir žalias , o skaitinės reikšmės ir eilutės rodomos tinklas . Jei naudojote Užtemimas ar kiti IDE, „MonoDevelop“ yra labai panašus. Tu gali statyti savo scenarijus iš redaktoriaus, kad patikrintumėte, ar nėra sintaksės klaidų, pavyzdžiui:

Apskritai, norint, kad jūsų scenarijus sąveikautų su „Unity“, turėsite nurodyti elementus, kuriuos turi scenarijų turintis objektas (šių elementų sąrašą galite pamatyti skiltyje inspektorius skirtuką, kai pasirinktas atitinkamas objektas). Tada galite iškviesti metodus arba nustatyti kintamuosius kiekvienam iš šių elementų, kad įsigaliotumėte norimus pakeitimus.

Jei norite, kad objekto scenarijus paveiktų kito objekto savybes, galite sukurti tuščią „GameObject“ kintamąjį savo scenarijuje ir naudokite inspektorius priskirti jį kitam scenos objektui.

Sąrašas elementų, kuriuos gali turėti objektas, yra toks (paimtas iš vieno iš mūsų irklenčių inspektoriaus rodinio aukščiau pateiktame pavyzdyje):

  1. Transformuoti
  2. Kubas (tinklelio filtras)
  3. Dėžutės greitintuvas
  4. Tinklelio atvaizdavimas

Kiekvienas iš šių objekto aspektų gali būti paveiktas iš scenarijaus. Toliau pažiūrėsime, kaip tiksliai.

6.1 Transformuoti

„Unity“ „GameObject“ transformavimo funkcijos valdo fizinius to objekto parametrus: jo skalė , jo poziciją , ir tai orientacija . Galite juos pasiekti naudodami tokį scenarijų:

transform.position = newPositionVector3;
transform.rotation = newRotationQuaternion;
transform.localScale = newScaleVector3;

Anksčiau pateiktuose pavyzdžiuose įvardyti kintamieji yra varduose nurodytų tipų. Čia yra keletas pagrindinių detalių: padėtis ir skalė, kaip ir tikėjotės, išsaugomi kaip Vector3s . Galite pasiekti X , IR , ir SU kiekvieno komponento (pvz. transformuoti.pozicija.y nurodo objekto atstumą virš nulinės plokštumos).

Tačiau norint išvengti kardaninis užraktas , apsisukimai tvarkomi kaip Kvarteriai (keturių komponentų vektoriai). Kadangi rankomis manipuliuoti kvaternionai yra neintuityvūs, sukimus galite valdyti naudodami Eulerio kampus, naudodami Kvaternionas.Euleris toks metodas:

transform.rotation = Quaternion.Euler(pitch, yaw, roll);

Jei norite sklandžiai perkelti objektus iš vienos vietos į kitą, rasite Slerpas naudingas kvaternionams ir vektoriams 3 metodas. Slerpas atsižvelgia į tris argumentus - dabartinę būseną, galutinę būseną ir pokyčių greitį ir sklandžiai interpoliuoja tarp jų tam tikru greičiu. Sintaksė atrodo taip:

transform.position = Vector3.Slerp(startPositionVector3, newDestinationVector3, 1);

6.2 Pateikėjas

„Unity“ atvaizdavimo funkcijos leidžia valdyti rekvizitų paviršių atvaizdavimą ekrane. Galite iš naujo priskirti tekstūrą, pakeisti spalvą ir pakeisti šešėlį bei objekto matomumą. Sintaksė atrodo taip:

renderer.enabled = false;
renderer.material.color = new Color(0, 255, 0);
renderer.material.mainTexture = myTexture;
renderer.material.shader = newShader;

Dauguma jų turi gana aiškias funkcijas. Pirmasis pavyzdys daro aptariamą objektą nematomą: naudingas triukas daugelyje situacijų. Antrasis pavyzdys priskiria naują RGB spalva (būtent žalia) į aptariamą objektą. Trečiasis priskiria pagrindinę išsklaidytą tekstūrą naujam tekstūros kintamajam. Paskutinis pavyzdys pakeičia objekto medžiagos šešėlį į naujai apibrėžtą šešėlio kintamąjį.

6.3 Fizika

„Unity“ komplektuojamas su integruotu fizikos varikliu - tuo naudojasi visi fizikos smėlio dėžės žaidimai. Tai leidžia jums priskirti fizines objektų savybes ir leisti, kad jūsų simuliacijos detalės būtų tvarkomos už jus. Apskritai, užuot bandžius įgyvendinti savo fiziką naudojant vadovėlį ir transformacijos sistemą, paprasčiau ir patikimiau naudotis „Unity“ fizikos varikliu.

Reikia visų fizikos rekvizitų susidūrėjai . Tačiau patį faktinį modeliavimą tvarko a tvirtas kūnas , kurį galima pridėti prie inspektorius vaizdas. Tvirti kūnai gali būti kinematinis arba ne kinematinis .

Kinematinės fizikos rekvizitai susiduria su aplink juos esančiais ne kinematiniais fizikos rekvizitais (ir veikia), tačiau patys susidūrimai jų neveikia. Statiniai kinematiniai rekvizitai yra patarlės nepajudinami objektai, o judantys kinematiniai objektai yra patarlės nesustabdoma jėga (žinoma, kai jie susiduria, jie tiesiog praeina vienas per kitą).

Be to, galite reguliuoti objekto kampinį pasipriešinimą (kiek energijos reikia jo sukimui), pakeisti jo masę, diktuoti, ar jį veikia gravitacija, ir ne.

Pavyzdžiai:

rigidbody.angularDrag = 0.1f;
rigidbody.mass = 100;
rigidbody.isKinematic = false;
rigidbody.useGravity = true;
rigidbody.AddForce(transform.forward * 100);

Visa tai yra gana savaime suprantama. Vienintelis dalykas, į kurį reikia atkreipti dėmesį, yra naudojimas transformuoti.į priekį . „Vector3“ turi tris komponentus ( .Persiųsti , .aukštyn , ir .gerai ), kurie gali būti prieinami ir sukasi su jais ( Persiųsti yra mėlynos rodyklės kryptis redaktoriuje). The transformuoti.į priekį raktinis žodis yra tiesiog dabartinio objekto priekinis vektorius, kurio dydis 1. Jis gali būti padaugintas iš plūdės, kad sukurtų objektui daugiau jėgos. Taip pat galite nurodyti transform.up ir transformuoti.teisingai , ir paneigti juos, kad gautųsi atvirkštiniai.

6.4 Susidūrimas

Dažnai kurdami žaidimą norėtumėte, kad susidūrimas pakeistų jūsų kodo būseną, o ne tik fizinį modeliavimą. Tam jums reikės a susidūrimo aptikimo metodas .

Norint nustatyti „Unity“ susidūrimus, reikia atlikti tam tikrą parengiamąjį darbą. Pirma, bent vienam iš susidūrimo objektų reikia ne kinematinis standus kūnas prie jo pritvirtintas. Abu objektai turi turėti teisingus greitintuvus, nustatytus kaip neveikiančius. Bendras abiejų objektų greitis turi būti pakankamai mažas, kad jie iš tikrųjų susidurtų, o ne tiesiog praleistų vienas kitą.

Jei pasirūpinote viskuo, galite patikrinti susidūrimą, įdėdami specialų susidūrimo aptikimo metodą į scenarijų, pridėtą prie objekto, su kuriuo norite patikrinti susidūrimą. Metodas atrodys taip:

void OnCollisionEnter(Collision other) {
//do things here
}

Šis metodas bus automatiškai paleistas per pirmąjį kadrą, kai kitas objektas paliečia jūsų objektą. Susidūrimo subjektas kitas yra nuoroda į pataikytą objektą. Galite, pavyzdžiui, nurodyti žaidimo objektas , tvirtas kūnas , ir transformuoti charakteristikas įvairiais būdais manipuliuoti. Nors OnCollisionEnter tikriausiai yra labiausiai paplitusi jūsų naudojama funkcija, taip pat galite ją naudoti OnCollisionExit ir „OnCollisionStay“ (su kitaip identiška sintaksė ir naudojimas), kurios suaktyvinamos pirmojo kadro metu, kai nustojate susidurti su objektu, ir kiekvieno kadro metu, kai atitinkamai susiduriate su objektu.

Kartais taip pat gali būti naudinga daryti tai, kas vadinama reitingavimas . Reikastavimo metu be galo plona linija (a spindulys ) yra išmestas per pasaulį iš tam tikros kilmės, išilgai kokio nors vektoriaus, ir, kai jis atsitrenkia į kažką, grąžinama pirmojo susidūrimo padėtis ir kitos detalės. Reikastų kodas atrodo taip:

RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit)) {
float distanceToGround = hit.distance;
}

Tai nukreipia spindulį iš dabartinio objekto padėties išilgai -Vector3.up (tiesiai žemyn) ir susieja kintamąjį pataikyti iki pirmojo objekto, su kuriuo susiduria. Kai jūsų spindulys ką nors atsitrenks, galėsite pasiekti pataikyti.atstumas nustatyti, kaip toli jis yra, arba hit.GameObject manipuliuoti pataikytu objektu.

Tokios spinduliuotės gali būti naudojamos šauliams nustatyti, į ką nukreiptas ginklas, arba pasirinkti objektus, kai fotoaparatas į juos žiūri, arba tam tikrų judesių mechanikų stiliams.

6.5 Laiko korekcija

Vienas svarbus veiksnys, kurį reikia atsiminti, kai tokiu būdu manipuliuojate objektais, yra susijęs kadrų dažnis . Kad ir kaip kruopščiai optimizuotumėte, kadrų dažnis visada skirsis ir jūs nenorite, kad jūsų žaidimo greitis atitinkamai skirtųsi. Jei kas nors kitas žaidimą paleidžia greitesniu kompiuteriu nei jūs jį sukūrėte, nenorite, kad žaidimas vyktų dvigubu greičiu.

Tai galite ištaisyti daugindami naudojamas vertes iš laiko, kurio prireikė paskutiniam kadrui pateikti. Tai daroma naudojant Time.deltaTime . Tai veiksmingai keičia bet kurio kintamojo, iš kurio didinate kiekvieną kadrą, greitį keitimas pagal kadrą į keistis per sekundę , ir jūs tikriausiai turėtumėte pakeisti bet kurią vertę, kurią didinate ar mažinate kiekvieną kadrą.

6.6 Garso šaltiniai ir klausytojai

Dabar, kai jau aptarėme, kaip kurti, atvaizduoti ir valdyti objektus, pakalbėkime apie kitą prasmę, kuria gali pasitarnauti kompiuteriniai žaidimai: būtent garsas . „Unity“ palaiko dviejų tipų garsus: 2D ir 3D garsai. 3D garsai keičia savo garsumą pagal atstumą ir iškraipo judėdami kameros atžvilgiu; 2D garsai to nedaro.

2D garsai tinka balsui ir foninei muzikai, o 3D garsai-garsams, kuriuos sukuria pasaulio įvykiai. Norėdami pakeisti, ar garsas yra 3D, pasirinkite jį skiltyje projektas rodinį, perjunkite į inspektorius peržiūrėkite ir išskleidžiamajame meniu pasirinkite atitinkamą parinktį, tada paspauskite reimportuoti mygtuką.

Norėdami iš tikrųjų paleisti garsą, turite pridėti garso šaltinis į butaforiją (atramą, iš kurios norite, kad garsas skleistųsi, jei tai 3D garsas). Tada turėsite atidaryti garso įrašas lauke ir pasirinkite garso failą.

kaip rūšiuoti „Amazon“ pagal atsiliepimų skaičių

Tu gali naudoti myAudioSource.Pause () ir myAudioSource.Play () valdyti tuos garso failus. Galite reguliuoti garsų kritimą, garsumą ir doplerio poslinkį inspektorius skirtuką garso šaltiniui.

6.7 Įvestis

Žaidimas, kuris nereikalauja jokio vartotojo indėlio, nėra didelis žaidimas. Yra daug įvairių įvesties tipų, kuriuos galite perskaityti, ir beveik visi jie yra prieinami per Įvestis ir „KeyCode“ objektai. Žemiau pateikiami kai kurie įvesties teiginių pavyzdžiai (kurių reikšmės įvertinamos kiekviename kadre).

Vector3 mousePos = Input.mousePosition;
bool isLeftClicking = Input.GetMouseButton(0);
bool isPressingSpace = Input.GetKey(KeyCode.Space);

Šių eilučių funkcijos dažniausiai yra savaime suprantamos. Naudodami šias trijų tipų įvesties nuorodas, galite atkurti daugelio šiuolaikinių 3D kompiuterinių žaidimų valdymo schemas.

6.8 Scenarijaus derinimas

Tarkime, scenarijus neveikia. Kaip sako geras gydytojas, jums gali atsitikti sprogimai ir pakilimai. Jei su jūsų C#yra tiesioginių sintaksės klaidų, žaidimas paprastai atsisako paleisti, kai paspausite „play“, ir pateikiami kai kurie gana naudingi klaidų pranešimai, jei statyti scenarijus iš redaktoriaus. Žiūrėkite žemiau:

Šios klaidos paprastai nėra sunkiausiai ištaisomos. Problemiškesnės gali būti subtilios semantinės klaidos, kuriose sėkmingai parašėte failą, pilną galiojančio C# - tik ne tą, kuris daro tai, ką manėte. Jei turite vieną iš šių klaidų ir jums kyla sunkumų ją susekti, yra keletas dalykų, kuriuos galite pabandyti pagerinti.

Pirmasis yra pristabdyti žaidimo vykdymą ir patikrinti konsolę. Galite pristabdyti žaidimą spustelėdami Pauzė piktogramą viršutinėje vidurinėje redaktoriaus dalyje, tada pasirinkite konsolė iš apačios langas meniu (arba paspausdami Ctrl > Pamaina > C ). Net jei nėra klaidų, įspėjimai vis tiek gali padėti suprasti, kas gali būti ne taip.

Jei tai nepadeda, taip pat galite pabandyti įsivaizduoti savo scenarijaus būseną spausdindami vidinių kintamųjų būseną, kad patvirtintumėte, jog programa daro tai, ką, jūsų manymu, daro. Tu gali naudoti Derinimas. Žurnalas (eilutė) spausdinti eilutės turinį į konsolę, kai programos vykdymas pasiekia tą eilutę. Apskritai, jei dirbsite atgal nuo to, kas, jūsų manymu, turėtų vykti per dalykus, kurie turėtų tai padaryti, galų gale pasieksite tašką, kuriame jūsų derinimo spaudiniai nepadarys to, ko tikitės. Štai kur tavo klaida.

7. Pavyzdys: Scenarijaus tenisas

Norėdami sukurti „Pong“, suskaidykime žaidimą į jo pagrindinius elementus: mums reikia kamuolio, kuris didėjantį greitį rikiuojasi pirmyn ir atgal, mums reikia rezultatų suvestinės, kuri žinotų, kada kamuoliai praėjo irklas, ir mums reikia mechanizmo iš naujo paleiskite kamuolį, kai tai atsitiks. Geras pirmas žingsnis būtų prie rutulio pridėti ne kinematinį standųjį kūną, du kinematinius standžius kėbulus, išjungti visų jų gravitaciją ir iš standartinių išteklių priskirti atitinkamą fizinę medžiagą ( atšokti su atšokti kombainas nustatytas į daugintis ).

Žemiau galite peržiūrėti rutulio scenarijų su paaiškinančiais komentarais. Kamuolys turi pasiekti kai kuriuos pagrindinius tikslus: jis turėtų šoktelėti sudėtingu būdu, visada išlaikydamas judėjimą abiem ašimis, ir jis turėtų pagreitėti nelengvu, bet neįmanomu tempu horizontalia kryptimi.

BallHandler.cs

Toliau turime parašyti savo irklo scenarijų, kurį galite peržiūrėti žemiau. Irklas turi judėti aukštyn ir žemyn, reaguojant į klavišų paspaudimus (bet ne už tam tikrų ribų). Ji taip pat turi suaktyvinti dalelių sistemą, kai ji su kažkuo susiduria.

PaddleHandler.cs

Be to, mums reikia priešo dirbtinio intelekto: kažkas, dėl ko priešo irklentė fiksuotu greičiu eis link kamuolio. Norėdami tai padaryti, mes naudosime „Vector3.Slerp“. Mes taip pat norėtume to paties dalelių elgesio, kurį matome savo irklentėje.

EnemyAI.cs

Galiausiai mums reikia scenarijaus, skirto atnaujinti rezultatų suvestinę ir iš naujo nustatyti kamuolį, kai jis išeina iš ribų.

ScoreboardUpdater.cs

Kai pridedame tuos scenarijus ir užpildome nuorodas, kai žaidžiame „Pong“ žaidimą, mes patiriame žaidimą!

Tu gali Atsisiųskite mano „Pong“ demonstracinę versiją , jei norite pamatyti viską, ką aprašiau, veikiant. Jis veikia „Windows“, „Mac“ ir „Linux“ sistemose.

8. Dokumentų tyrimas / daugiau sužinoti

„Unity“ yra sudėtingas variklis, turintis daug daugiau funkcijų, nei būtų galima aptarti šio stiliaus vadove, ir prieš tai, kai įtraukiate platų (nemokamų ir komercinių) „Unity“ plėtinių spektrą internete. Šis vadovas suteiks jums tvirtą pradžią kuriant žaidimą, tačiau saviugda yra svarbus įgūdis bet kokioje veikloje, ir čia dvigubai.

Svarbus šaltinis čia yra „Unity ScriptReference“ . „ScriptReference“ yra ieškoma duomenų bazė, prieinama tiek „C#“, tiek „Javascript“, kurioje yra visų „Unity“ komandų ir funkcijų sąrašas su jų funkcijų aprašymais ir trumpais sintaksės pavyzdžiais.

Jei kyla problemų dėl „Unity“ redaktoriaus ir sąsajos arba kaip vaizdo pamokos, kaip pirmenybė, yra ilgas aukštos kokybės sąrašas „Unity“ vaizdo įrašų pamokos galima. Platesnė (bet ne tokia plati) teksto vadovėliai „Unity“ taip pat galima rasti „CatLikeCoding“.

Galiausiai, jei turite klausimų, neapsiribojančių dokumentais ar vadovėliais, galite užduoti konkrečius klausimus adresu atsakymai.Unity3d.com . Atminkite, kad atsakymus teikia savanoriai, todėl gerbkite jų laiką ir pirmiausia ieškokite duomenų bazėje, kad įsitikintumėte, jog į jūsų klausimą dar nebuvo atsakyta.

9. Žaidimo kūrimas / kompiliavimas į atskirą programą

Kai sukūrėte tai, kuo didžiuojatės (arba baigėte klonuoti mūsų šiek tiek gudrų „Pong“ pavyzdį praktikai), laikas perkelti žaidimą iš redaktoriaus ir paversti jį kažkuo, ką galite paskelbti internete ir priversti žaisti savo draugus ir šeimos narius. Norėdami tai padaryti, turėsite sukurti atskirą programą. Geros naujienos yra tai, kad „Unity“ tai padaryti labai lengva. Tačiau yra keletas galimų žaizdų, dėl kurių norėsite būti atsargiems.

Pradedantiesiems žinokite, kad galite sukurti tik projektą be klaidų. Šiuo tikslu įsitikinkite, kad kurdami konsolę turite būti atidaryti: yra keletas klaidų sąlygų, kurių žaidimas nepaisys redaktoriuje, tačiau vis tiek nutraukia bandymą kurti. Tai tik išleidžia klaidų pranešimus į konsolę, o ekrane nematyti jokių rezultatų, o tai gali būti varginanti, jei pamiršite patikrinti. Vis dėlto, kai žaidimą sudarysite be klaidų, galėsite pasirinkti Sukurkite nustatymus po Failas meniu arba paspauskite Ctrl > Pamaina

> B . Tai parodys paprastą dialogą, leidžiantį sukurti žaidimą kelioms platformoms.

Procesas yra savaime suprantamas: pasirinkite savo parinktis ir paspauskite statyti ; žaidimas paprašys jūsų katalogo, kurį reikia įdiegti, ir ten įdės vykdomąjį ir duomenų katalogą. Šiuos du failus galima suglaudinti ir išplatinti (tik įsitikinkite, kad nesate apmokestinami už žaidimą, sukurtą „Unity“ demonstracinėje versijoje, nes tai pažeidžia paslaugų teikimo sąlygas).

10. Uždarymo pastabos

Kaip ir bet kuris žaidimų kūrimo įrankis, „Unity“ sėkmės raktas yra kartotinis kūrimas. Turite didinti valdomus žingsnius - būkite ambicingi, bet kokiu būdu, bet būkite ambicingi mažomis dalimis ir sutvarkykite tuos gabalus taip, kad net jei nepasiektumėte savo galutinių ambicijų, bent jau pasiektumėte nuoseklų rezultatą produktas.

Pirmiausia gaukite svarbiausius elementus: turėkite mintyje savo idėją minimalus gyvybingas produktas , paprasčiausias, labiausiai plikas kaulų dalykas, kurį galėtum sukurti, ir vis tiek jauti, kad esi pasiekęs ko nors vertingo. Prieš pereidami prie didesnių ambicijų, pasiekite tą minimalų perspektyvų projektą.

Ši pamoka suteikia tvirtą pradinę vietą, tačiau geriausias būdas išmokti „Unity“ yra sukurti žaidimą. Pradėkite kurti žaidimą, užpildykite savo žinių spragas, kai jos atsiranda, ir palaipsniui įgytas žinių srautas stebėtinai greitai sunaikins dalykus, kurių nežinote.

Jei perskaitėte visa tai ir esate šiek tiek priblokštas kodavimo, kurio reikalaujama naudojant „Unity“, būtinai patikrinkite, kaip išmokti kurti žaidimus naudojant „Unity Learn“ taip pat perskaitykite mūsų vadovą, kaip sukurti vaizdo žaidimus be jokio programavimo.

„Unity“ yra galingas įrankis, kurį šiek tiek ištyrę galite sukurti įspūdingus projektus su juo greičiau, nei galite tikėtis. Praneškite mums, ką sukūrėte toliau pateiktose pastabose - mes norėtume pamatyti!

Dalintis Dalintis „Tweet“ Paštu 3 būdai, kaip patikrinti, ar el

Jei gavote el. Laišką, kuris atrodo šiek tiek abejotinas, visada geriausia patikrinti jo autentiškumą. Štai trys būdai, kaip sužinoti, ar el.

Skaityti toliau
Susijusios temos
  • Programavimas
  • Programavimas
  • Ilga forma
  • „Longform“ vadovas
Apie autorių Andre Infante(Paskelbti 131 straipsniai)

Rašytojas ir žurnalistas, įsikūręs pietvakariuose, Andre garantuoja, kad veiks iki 50 laipsnių Celsijaus ir yra atsparus vandeniui iki dvylikos pėdų gylio.

Daugiau iš Andre Infante

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Norėdami užsiprenumeruoti, spustelėkite čia