Mängu programmeerimine ühtsusega: juhend algajatele

Mängu programmeerimine ühtsusega: juhend algajatele
Selle juhendi saab alla laadida tasuta PDF -failina. Laadige see fail kohe alla . Kopeerige ja jagage seda oma sõprade ja perega.

Interneti -majanduse üllatav omadus on indie -videomängude tõus. Kunagi tuhandete inimeste eksklusiivseks domeeniks olnud mitme miljoni dollari suurused kolmik-A stuudiod on välja töötatud mitmeid tööriistakomplekte, mis toovad kaasaegsed mänguarendusressursid üksikisikute kätte või väikesed, ajutised programmeerijate ja disainerite kollektsioonid. Oleme varem arutanud parimaid indie -mänge, seega kontrollige kindlasti neid, et saada inspiratsiooni selle kohta, mida on võimalik saavutada selliste tööriistadega nagu Unity.





Need indie-mängude arendusmeeskonnad on näidanud üles paindlikkust ja riskitaluvust, mis paljudel juhtudel võimaldab neil mängude uuendamist kiiremini kui nende suured eelarvelised kolleegid. Viimastel aastatel on esilinastunud mitmeid šokeerivalt edukaid indie -tiitleid, sealhulgas Minecraft , Limbo ja Super lihapoiss , ja isegi kui teil pole selliste mängude tegemiseks vajalikke oskusi, saate Buildboxi abil mängu teha.





Indie -mängude kiiresti areneval maastikul Ühtsus on kujunenud de facto standardiks: selle odavus, kasutusmugavus ja lai funktsioonide komplekt muudavad selle ideaalseks mängu kiireks arendamiseks. Unity on nii paindlik, et saate isegi tehke oma kohandatud mängukontrollerid natuke isetegemist oskate!





Isegi suured stuudiod nagu CCP (Developers of Eve Online ) kasutada seda mängukontseptsioonide kiireks prototüüpimiseks. Unity pakub „mängumootorit karbis” - füüsika- ja renderdusmootorit koos konksudega mitmele skriptikeelele, mida saab kohandada praktiliselt iga videomängužanriga.

Kuigi Unity pakub mängukeskkonnaga manipuleerimiseks visuaalset redigeerijat, ei ole Unity mängude looja tööriist „nullprogrammeerimine”. See nõuab tulemuste saamiseks programmeerimist, kuid annab teile ka palju paindlikuma ja võimsama tööriista kui ükski mängutegija programm.



Unity ei tee teie eest tööd, kuid vähendab oluliselt sisenemistõket. Alustades täiesti nullist C ++ ja OpenGL -i abil, võib kuluda päevi, et jõuda punkti, kus ekraanil on tegelikult midagi renderdatud. Unity abil kulub umbes kümme sekundit. Unity annab mängu loomise põhielemendid algajatele programmeerijatele kiiresti ja intuitiivselt kätte.

Täna juhendan teid läbi kõik, mida peate teadma, et teha mäng Unity'is, mis on jaotatud kümneks peamiseks peatükiks:





§1 - Ühtsuse versioonid

§2 - Unity installimine





§3-Lühike sissejuhatus objektorienteeritud paradigmasse

§4 - Ühtsuse põhitõed

§5 - näide: mängu põhielemendid

§6 - Skriptimine ühtsuses

§7 - Näide: Scripting Pong

§8 - Dokumentatsiooni uurimine / lisateave

§9 - mängu loomine / iseseisva rakenduse koostamine

§10-Lõppmärkmed

1. Unity versioonid

Unity on saadaval kahes põhimaitses: profiversioon ja tasuta versioon. Seal on a erinevuste arv , kuid laias laastus toetab profiversioon mitmeid visuaalseid täiustusi (nt reaalajas pehmed varjud ja järeltöötlus) ning suurt hulka suhteliselt väiksemaid funktsioone, mis on keerukamate mängude puhul äärmiselt kasulikud.

See tähendab, et enamiku suhteliselt lihtsate mängude jaoks, mida võiksite ehitada, on Unity tasuta versioon täiesti piisav. Huvilistel jagame allpool peamised erinevused üksikasjalikumalt.

1.1 Hinnakujundus

Unity tasuta versioon on muidugi tasuta. Siiski on mõned piirangud: Unity tasuta versiooni ei saa litsentsida ühelegi ettevõttele, kelle aastane sissetulek on üle 100 000 dollarit . Kuigi sellised organisatsioonid ei kuulu käesoleva juhendi reguleerimisalasse, on teil kahtlus, et võite saada selliseks organisatsiooniks, kuid arvatavasti Pro versiooni poole pöörduda.

Unity Pro versioon on 75 dollarit kuu või 1500 dollarit alalise litsentsi saamiseks ja sellel pole piiranguid, mida saate sellega loodud mängudega teha. Saadaval on ka 30-päevane tasuta prooviperiood, mida me selle juhendi jaoks kasutame, et anda teile võimalikult täielik ülevaade saadaolevatest funktsioonidest. Üheaastase õpilase litsents on saadaval ka kaudu Uuring eest 129 dollarit .

1.2 Omadused

Unity tasuta versioonis pole palju funktsioone. Kõige olulisemad erinevused on aga järgmised: Unity tasuta versioonil puuduvad mitmed renderdusvalikud, mis võimaldavad parema väljanägemisega ja kiiremini töötavaid mänge (LOD-tugi, ekraaniruumi järeltöötlus, täiustatud varjundid, reaalajas pehme varjud ja edasilükatud renderdamine). Samuti puudub sellest täielik mehhanismi animatsioonisüsteem ja mõned AI tööriistad.

Üldiselt tasub keerukate ja suuremahuliste projektide puhul või projektide puhul, kus graafiline jõudlus on oluline, proversioon. Kasutan profiversiooni, kuna arendan Oculus Rifti jaoks virtuaalreaalsusmänge ning peakomplektiga õigeks suhtlemiseks on vajalik ekraaniruumi järeltöötluse tugi.

2. Unity installimine

Unity installimine on lihtne. Te saate käivitatava faili alla laadida saidilt unity3d.com/get-unity/download .

Pärast allalaadimist käivitage see ja järgige installija juhiseid. Kui installimine on lõpule jõudnud, ilmub aken pealkirjaga „aktiveeri oma Unity litsents”. Märkige ruut „aktiveeri Unity Pro tasuta 30-päevane prooviversioon” ja seejärel „OK”.

Palju õnne! Nüüd on teil Unity Pro 30-päevane prooviperiood. Kui prooviperioodi lõppedes ei soovi te pro -versiooni osta, võite minna üle tasuta versioonile ja säilitada olemasolev sisu.

Kuidas teha portreerežiimi iPhone 7 -s

3. Lühike sissejuhatus objektorienteeritud paradigmasse

Enne Unityga alustamist on oluline, et läheksime põhitõdedest veidi üle. Unity toetab mõlemat C # ja JavaScript eest mängu programmeerimine ; töötame selle õpetuse jaoks C# -ga.

Esiteks, kui te pole kunagi varem programmeerinud, jätke see õpetus kõrvale ja veetke paar päeva Microsofti kaudu C # Keele aabits kuni tunnete end mugavalt, kasutades keelt lihtsate ülesannete jaoks.

Kui soovite midagi muud kui C# (kuid mitte tingimata keelt, mida saate Unity'is kasutada), siis vaadake meie algajate kuue lihtsama programmeerimiskeele juhendit.

Kui olete varem programmeerinud imperatiivis või objektorienteeritud keeles, näiteks C või Java, lugege aabitsat ja tutvuge sellega, kuidas C# erineb teistest varem kasutatud keeltest. Mõlemal juhul ärge jätkake õpetusega enne, kui tunnete end mugavalt C# lihtsate ülesannete lahendamisel (näiteks kui ma paluksin teil kirjutada programmi, mis prindib sada esimest algarvu, peaksite saama selle programmi kirjutada ilma Google'iga konsulteerimine).

Kõige olulisem mõiste siin mõistmiseks on objektorienteeritud paradigma (lühendatult AVATUD ). Objektorienteeritud keeltes jagatakse programmid funktsionaalseteks üksusteks Objektid . Igal objektil on oma privaatsed muutujad ja funktsioonid. Nimetatakse objektspetsiifilisi funktsioone meetodeid .

Idee on siin modulaarsus: kui eraldate iga objekti ja sundite teisi objekte oma meetodite abil sellega suhtlema, saate vähendada võimalike tahtmatute interaktsioonide - ja laiemalt - vigade arvu. Samuti saate luua objekte, mida saate hiljem uuesti kasutada ilma muudatusteta. Unity'is ehitate need objektid ja kinnitate need mänguüksused (kelle käitumist nad juhivad).

Objektid pärinevad klassid : klass on lihtsalt fail, mis esitab teie objekti määratluse. Niisiis, kui soovite a mook objekti, mis tegeleb teie mängu vaenlase tehisintellektiga, kirjutaksite klassi 'Mook' ja seejärel lisaksite selle faili igale vaenlase üksusele. Mängu käivitades varustatakse iga vaenlane Mooki objekti koopiaga.

Uue skripti lisamine objektile näeb välja selline:

Esiteks, vali objekt ja minge Inspektor . Klõpsake Lisa komponent nuppu.

Minema uus skript , sisestage soovitud nimi ja klõpsake nuppu luua ja lisada .

Nüüd on teil uus skript, mida saate muuta, topeltklõpsates sellel!

Klassi fail näeb välja umbes selline:

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 */
}
}
}

Jaotame selle lahti:

  • UnityEngine'i kasutamine: See rida ütleb C# -le, et tahame kasutada Unity raamatukogusid, mis võimaldavad meil ühenduse luua Unity mängumootoriga.
  • Avalik klass Mook: Mono Käitumine: See rida deklareerib klassi ja selle nime - mook .
  • Privaatne ujuki tervis: See deklareerib privaatklassi muutuja (mida saab muuta ainult klassi seest). Muutujale antakse väärtus in Alusta .
  • Tühine algus (): See deklareerib meetodit nimega Alusta . Start on spetsiaalne meetod, mida käivitatakse ainult üks kord, kui mäng algselt käivitub.
  • Tühine värskendus (): Värskendamine on veel üks erimeetod, mis töötab igal kaadril. Enamik teie mänguloogikast läheb siia.
  • // kui kohtute mängijaga teel, tapke ta: See rida on kommentaar (mis tahes topeltkriipsuga algavat rida ignoreerib C#). Kommentaare kasutatakse selleks, et meelde tuletada, mida konkreetsed koodibitid teevad. Sel juhul kasutatakse seda kommentaari keerukama koodiploki jaoks, mis tegelikult teeb seda, mida kommentaar kirjeldab.

Koos Alusta ja Värskenda , saate oma meetodeid esile tuua peaaegu iga nimega. Kuid teie loodud meetodid ei tööta, kui neid ei kutsuta. Kuulutame välja meetodi hüpoteetilise klassi jaoks nimega addTwoNumbers mis liidab kaks numbrit kokku:

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

See deklareerib avaliku (teistele objektidele juurdepääsetava) meetodi, mis tagastab ujuki, nn addTwoNumbers , mis võtab sisendiks kaks ujukit (nn et ja b ). Seejärel tagastab see väljundina kahe väärtuse summa.

Selle meetodi nimetamine sama klassi seest (näiteks seestpoolt) Värskenda ) näeb välja selline:

float result = addTwoNumbers(1, 2);

Meetodi kutsumine teisest klassist on sarnane:

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

Jällegi loob see lihtsalt meie klassi eksemplari, pääseb juurde sobivale meetodile ja edastab sellele numbrid, mida tahame lisada, ning salvestab tulemuse tulemus . Lihtne.

Kui teie skript on lisatud objektile, millel on eriomadused (nt osakeste kiirgaja), millele ei pääse juurde GameObjecti parameetrite tavalise komplekti all, saate seda käsitleda erineva mänguüksusena, kasutades GetComponent meetod.

Selle süntaks näeb välja selline:

GetComponent().Play();

Kui mõni neist on teile võõras, minge tagasi ja vaadake läbi C# praimer. See säästab teid palju pettumust, kui jätkame.

4. Ühtsuse põhitõed

Selles jaotises tutvume Unity mootori põhimehaanikaga. Unity töövoog näeb välja umbes selline:

  1. Looge olem, et mängus mingit rolli täita (tühi GameObjects saab kasutada abstraktsete loogiliste ülesannete jaoks).
  2. Kirjutage või leidke klassi fail ja lisage see skriptina olemisse (kasutades Lisa komponent nuppu inspektor vaade.
  3. Jookse > test > silumine > korrata kuni see töötab ja liikuge mängu järgmise elemendi juurde.

Unity pakub mitmeid põhivaatekaarte, mida saab kasutaja maitse järgi erineval viisil paigutada. Suur viis on:

  1. Mäng: kuvab mängu jooksva eksemplari, millega saate suhelda ja katsetada.
  2. Stseen: pakub staatilist, redigeeritavat versiooni mängumaailm .
  3. Inspektor: võimaldab teil muuta mängumaailma üksikuid üksusi, valides need jaotises toimetaja vahekaart.
  4. Projekt: võimaldab teil sirvida projekti faile ja lohistada mudeleid, materjale ja muid ressursse toimetaja vahekaardil, et need mängumaailma paigutada.
  5. Hierarhia: sellel vahekaardil kuvatakse kõik maailma objektid, mis võimaldab teil stseenist leida kaugeid objekte ja üksusi üksteisele klõpsates ja lohistades.

Kõigi nende asjade asukohti vaadake allolevalt diagrammilt:

4.1 Ühtsed üksused

4.1.1 Silmad

Võrgud on tee 3D geomeetria on esindatud Ühtsuses. Võite kasutada Unity sisseehitatud seadet primitiivne objekte (kuubikud, kerad, silindrid jne) või importida oma 3D -mudeleid modelleerimispaketist, näiteks Blender või Maya . Unity toetab mitmesuguseid 3D -vorminguid, sealhulgas .fbx ja .3ds .

Silmade manipuleerimise põhivahendid on liidese vasakus ülanurgas asuvad skaleerimise, pööramise ja tõlkimise nupud. Need nupud lisavad redaktorivaates olevatele mudelitele juhtimisikoonid, mida saab seejärel kasutada nendega ruumis manipuleerimiseks. Objekti tekstuuri või füüsikaliste omaduste muutmiseks valige need ja kasutage inspektor vaadata, et analüüsida materjali ja jäik keha elemente.

4.1.2 GUI elemendid

Traditsioonilisi graafilisi kasutajaliideseid ja teksti saab kuvada GUI tekst ja GUI tekstuur GameObjects redaktoris. Tugevam ja realistlikum viis kasutajaliidese elementide käsitlemiseks on aga 3D tekst ja Quad GameObjects (läbipaistvate tekstuuride ja valgustamata läbipaistva varjutajaga) HUD -elementide paigutamiseks mängumaailma üksustena.

Aastal hierarhia vaates saab need mänguelemendid lohistada põhikaamerale, et neist saaks lapsed, tagades, et nad liiguvad ja pöörlevad koos kaameraga.

GUI -elementide (tekst ja tekstuurid) suurust ja skaalat saab reguleerida vahekaardi inspektor vastavate väljade abil.

4.1.3 Materjalid

Materjalid on tekstuuride ja varjundite kombinatsioonid ning neid saab projekti vahekaardilt otse mänguobjektidele lohistada. Unity Proga on kaasas suur hulk varjureid ja saate neile lisatud tekstuuri reguleerida vahekaardi inspektor abil objekti jaoks, millele need on rakendatud.

Tekstuuri importimiseks teisendage see a -ks .jpg , .png või .bmp ja lohistage see kausta vara kausta Unity projekti kataloogi all (mis kuvatakse Minu dokumendid vaikimisi). Mõne sekundi pärast ilmub redaktorisse laadimisriba. Kui see on lõppenud, leiate pildi tekstuurina alt projekti vahekaart.

4.1.5 Tuled

Tuled on GameObjects mis projitseerib maailmale sära. Kui teie stseenis pole tulesid, joonistatakse kõik hulknurgad sama heledustasemega, andes maailmale tasase ja pestud ilme.

Tulesid saab paigutada, pöörata ja neil on mitu sisemist omadust, mida saate kohandada. The intensiivsus liugur reguleerib valguse heledust ja vahemik kontrollib, kui kiiresti see kustub.

Juhised jaotises stseenivaade näitab teile maksimaalset valgustusulatust. Soovitud efekti saavutamiseks mängige mõlema seadistusega. Samuti saate reguleerida valguse värvi, mustrit ( küpsis kui pinnale kuvatakse, suunatakse valgus ja millist sära ilmub ekraanile otse valgust vaadates. Küpsist saab kasutada realistlikumate valgusmustrite võltsimiseks, dramaatiliste valevarjude loomiseks ja projektorite simuleerimiseks.

Valguse kolm peamist tüüpi on kohapeal , punkt ja suunav .

Kohtvalgustid omada asukohta 3D -ruumis ja projitseerida valgust ainult ühes suunas muutuva nurga all koonuses. Need on head taskulampide, prožektorite jaoks ja üldiselt annavad teile valgustuse täpsema juhtimise. Kohtvalgustid võivad varju heita.

Punkttuled asukoht 3D -ruumis ja heitke ühtlaselt valgust igas suunas. Punkttuled ei heida varje.

Suunatuled Lõpuks kasutatakse neid päikesevalguse simuleerimiseks: nad projitseerivad valgust suunas, mis oleks otsekui lõpmatult kaugel. Suunatuled mõjutavad stseeni kõiki objekte ja võivad tekitada varje.

4.1.6 Osakeste süsteemid

TO Osakeste süsteem on GameObject mis genereerib ja kontrollib sadu või tuhandeid osakesi samaaegselt. Osakesed on väikesed optimeeritud 2D -objektid, mis kuvatakse 3D -ruumis. Osakeste süsteemid kasutavad lihtsustatud renderdamist ja füüsikat, kuid võivad kuvada tuhandeid üksusi reaalajas ilma kogelemata, muutes need ideaalseks suitsu, tule, vihma, sädemete, maagiliste efektide ja muu jaoks.

Nende efektide saavutamiseks on palju parameetreid, mida saate muuta, ja pääsete neile juurde, kudedes osakeste süsteemi komponendi toimetaja > osakeste süsteemi valimine > avades vahekaardi inspektor . Saate muuta iga osakese suurust, kiirust, suunda, pöörlemist, värvi ja tekstuuri ning seada enamiku neist parameetritest ka aja jooksul muutuma.

All kokkupõrge atribuut, kui lubate selle ja seadistate simulatsiooniruumi väärtuseks maailma saate osakesi, mis põrkuvad kokku maailma objektidega, mida saab kasutada mitmete realistlike osakestefektide, sealhulgas vihma, liikuva vee ja sädemete jaoks.

5. Näide: mängu põhielemendid

Selle õpetuse jaoks teeme lihtsa mängu Pong - midagi, mida oleme varem DIY-s mitu korda käsitlenud:

  • Arduino Classic Pong
  • Arduino OLED Pong

Selles osas käsitleme põhielementide korraldamist - skriptimise õpetus tuleb hiljem.

Esiteks jaotame Pongi mängu selle põhikomponentideks. Esiteks vajame kahte labad ja palli. Pall lendab ekraanilt välja, nii et me tahame mehhanismi selle lähtestamiseks. Samuti tahame, et tekstis kuvataks praegune skoor, ja kõigi Unity põhielementide näitamise huvides soovime pallile löömisel uhket osakeste efekti. Kogu mäng peab olema dramaatiliselt valgustatud.

See laguneb a -ks palli objekt (kera), a kudema , kaks mõla rekvisiiti koos osakeste kiirgajad lisatud, a 3D-teksti olem ja a kohtvalgus . Selle õpetuse jaoks kasutame füüsilist vaikematerjali põrgatama , koos põrgatama kombain seatud korrutada . Seade näeb välja kümne ekraanipildi kujul:

Esiteks looge a kuubi rekvisiit mõla jaoks.

Skaleerige seda sobivalt, paljundage see ja pange a sfäär labade labade vahel.

Seejärel looge a 3D -teksti objekt ja kaal ja positsiooni õigesti, muutes fondi suurus atribuudi, et saada vähem pikslitega kujutist.

Seejärel looge kaks osakeste süsteemid , valige soovitud omadused ja kinnitage need mõlade külge.

Järgmisena tahate asendisse ja pöörake kaamerat nii et see raamib stseeni õigesti. Kui kaamera on valitud, näete paremas alanurgas väikest kaamera eelvaadet.

Enne lõpetamist peame looma kaks lisakuubikut, mis on kaitserauad, et takistada palli mänguväljalt välja hüppamist. Me saame need nähtamatuks muuta, tühistades märke võrgusilma render aastal vahekaart inspektor .

Kui valite mängu, näete nüüd meie mängu põhielemente. Nad ei tee veel midagi, kuid jõuame selleni!

Nüüd, kui oleme selle seadistuse saanud, räägime sellest, mis on seotud nende elementide skriptimisega mängu tegemiseks.

6. Skriptimine Unity'is

Kui olete objektile skripti lisanud, saate seda muuta, topeltklõpsates sellel kaustas inspektor . See avaneb MonoDevelop , Unity vaikimisi arenduskeskkond. Sisuliselt on Monodevelop tekstiredaktor, mille funktsioonid on spetsiaalselt programmeerimiseks optimeeritud.

Märksõnad ja kommentaarid on esile tõstetud sinine ja roheline ning numbrilised väärtused ja stringid kuvatakse võrk . Kui olete kasutanud Eclipse või muud IDE -d, on MonoDevelop väga sarnane. Sa saad ehitada oma skripte redaktori seest, et kontrollida süntaksivigu, näiteks:

Üldiselt peate skripti Unityga suhtlemiseks viitama elementidele, mida skripti sisaldav objekt omab (nende elementide loendit näete jaotises inspektor vahekaart, kui valitud objekt on valitud). Seejärel saate soovitud muudatuste rakendamiseks helistada meetoditele või määrata igale neist elementidest muutujad.

Kui soovite, et objektil olev skript mõjutaks teise objekti omadusi, saate luua tühja GameObject skripti muutuja ja kasutage inspektor määrata see stseeni mõnele teisele objektile.

Objekti võimalike elementide loend on järgmine (ülaltoodud näites ühe meie labade inspektori vaates):

  1. Teisenda
  2. Kuubik (võrgusilma filter)
  3. Kasti põrutaja
  4. Võrgusilma renderdaja

Kõiki neid objekti aspekte saab skripti seest mõjutada. Järgmisena vaatame täpselt, kuidas.

6.1 Teisendamine

Unity GameObjecti teisendusfunktsioonid juhivad selle objekti füüsilisi parameetreid: selle kaal , tema positsiooni , ja selle orientatsioon . Neile pääsete juurde järgmise skripti abil:

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

Ülaltoodud näidetes on nimetatud muutujad nimes määratud tüüpi. Siin on mõned olulised üksikasjad: asukoht ja skaala salvestatakse ootuspäraselt Vector3s . Saate juurde pääseda X , JA ja KOOS iga komponendi (näiteks teisendada.asend.y annab teile objekti kauguse nulltasapinnast kõrgemal).

Siiski, et vältida kardaanilukk , pöördeid käsitletakse kui Kvarterid (neljakomponentsed vektorid). Kuna kvaternioonide käsitsi manipuleerimine ei ole intuitiivne, saate pöörlemist manipuleerida Euleriani nurkade abil, kasutades Kvaternion. Euler meetod selline:

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

Kui soovite objekte sujuvalt ühest kohast teise teisaldada, leiate selle Slerp abiks kvaternionide ja vektorite meetod. Slerp võtab arvesse kolm argumenti - hetkeseis, lõppseis ja muutuste kiirus ning interpoleerib nende vahel sujuvalt antud kiirusega. Süntaks näeb välja selline:

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

6.2 Renderdaja

Unity renderdusfunktsioonid võimaldavad teil kontrollida rekvisiitide pindade ekraanil kuvamise viisi. Saate tekstuuri ümber määrata, värvi muuta ning muuta objekti varjutajat ja nähtavust. Süntaks näeb välja selline:

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

Enamikul neist on üsna selged funktsioonid. Esimene näide muudab kõnealuse objekti nähtamatuks: kasulik trikk mitmes olukorras. Teine näide määrab uue RGB värv (nimelt roheline) kõnealusele objektile. Kolmas määrab peamise hajusa tekstuuri uuele tekstuuri muutujale. Viimane näide muudab objekti materjali varjundi äsja määratletud varjutaja muutujaks.

6.3 Füüsika

Unity on varustatud integreeritud füüsikamootoriga - seda kasutavad kõik füüsika liivakastimängud. See võimaldab teil määrata objektide füüsikalised omadused ja lasta nende simulatsiooni üksikasjad teie eest käsitseda. Üldiselt on selle asemel, et proovida oma füüsikat õpiku ja teisendussüsteemi abil rakendada, lihtsam ja kindlam kasutada Unity füüsikamootorit võimalikult suures ulatuses.

Kõik füüsika rekvisiidid nõuavad põrkurid . Tegeliku simulatsiooni endaga tegeleb aga a jäik keha , mida saab lisada kausta inspektor vaade. Jäigad kehad võivad olla kinemaatiline või mittekineemiline .

Kinemaatilise füüsika rekvisiidid põrkuvad (ja mõjutavad) mittekineemilise füüsika rekvisiitidega nende ümber, kuid kokkupõrge ise neid ei mõjuta. Staatilised kinemaatilised rekvisiidid on vanasõnalised liikumatud objektid ja liikuvad kinemaatilised objektid on vanasõnaline peatamatu jõud (teadmiseks, kui nad kokku põrkavad, lähevad nad lihtsalt üksteisest läbi).

Lisaks saate reguleerida objekti nurgatõmmet (kui palju energiat kulub selle keerutamiseks), muuta selle massi, dikteerida, kas seda mõjutab gravitatsioon või mitte, ning rakendada sellele jõudu.

Näited:

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

Need kõik on üsna iseenesestmõistetavad. Ainuke asi, mida siin tähele panna, on selle kasutamine muundada.ees . Vector3 -l on kolm komponenti ( . edasi , .üles ja .õiguslik ), millele pääseb juurde ja mida saab nendega koos pöörata ( edasi on sinise noole suund redaktoris). The muundada.ees märksõna on lihtsalt praeguse objekti edasisuunaline vektor suurusega 1. Seda saab korrutada ujukiga, et tekitada objektile rohkem jõudu. Võite ka viidata muundada üles ja muundada.õigus , ja eitada neid, et saada oma tagasikäik.

6.4 Kokkupõrge

Sageli tahate mängu ehitamisel, et kokkupõrge tooks teie koodis kaasa mõningase oleku muutuse, peale füüsika simulatsiooni. Selleks vajate a kokkupõrke avastamise meetod .

Unity'i kokkupõrgete tuvastamiseks on vaja teatavat ettevalmistustööd. Esiteks vajab vähemalt üks kokkupõrke objektidest a mitte-kinemaatiline jäik keha selle külge kinnitatud. Mõlemal objektil peavad olema õiged põrkurid, mis peavad olema mitte-päästikud. Mõlema objekti kogukiirus peab olema piisavalt madal, et need tegelikult kokku põrkaksid, selle asemel et lihtsalt üksteisest läbi hüpata.

Kui olete selle eest hoolitsenud, saate kokkupõrget kontrollida, paigutades spetsiaalse kokkupõrke tuvastamise meetodi skripti, mis on lisatud objektile, millega soovite kokkupõrget kontrollida. Meetod näeb välja selline:

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

See meetod käivitub automaatselt esimese kaadri ajal, kui teine ​​objekt teie objekti puudutab. Kokkupõrke üksus muud on viide tabatud objektile. Võite näiteks sellele viidata mänguobjekt , jäik keha ja muundada omadusi, et sellega mitmel viisil manipuleerida. Kuigi OnCollisionEnter on ilmselt kõige tavalisem funktsioon, mida kasutate, saate seda ka kasutada OnCollisionExit ja OnCollisionStay (muidu identse süntaksi ja kasutusega), mis aktiveeruvad vastavalt esimese kaadri ajal, kui lõpetate objektiga kokkupõrke, ja iga kaadri ajal, mil te objektiga kokku põrkate.

Mõnikord võib olla kasulik teha ka seda, mida nimetatakse raastamine . Räikastamisel oli lõpmata õhuke joon (a kiir ) visatakse läbi maailma mõnest päritolust, mööda mõnda vektorit ja kui see midagi tabab, tagastatakse esimese kokkupõrke asukoht ja muud üksikasjad. Räikastamise kood näeb välja selline:

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

See heidab kiire praeguse objekti asukohast mööda -Vector3.up (otse alla) ja seob muutuja tabas esimesele objektile, millega see kokku põrkab. Kui teie kiir on midagi tabanud, pääsete juurde tabas.kaugus et teha kindlaks, kui kaugel see on, või tabas.GameObject löödud objektiga manipuleerimiseks.

Selliseid kiirsaateid saab kasutada laskurite jaoks, et teha kindlaks, millele relv osutas, või valida objekte, kui kaamera neid vaatab, või teatud liikumismehaanikute stiilide jaoks.

6.5 Aja korrigeerimine

Üks oluline tegur, mida objektidega sel viisil manipuleerides silmas pidada, on seotud kaadrisagedus . Olenemata sellest, kui hoolikalt te optimeerite, on kaadrisagedus alati erinev ja te ei soovi, et teie mängukiirus vastavalt muutuks. Kui keegi teine ​​juhib teie mängu kiiremas arvutis, kui see välja töötati, ei soovi te, et mäng toimiks topeltkiirusel.

Selle parandamiseks korrutage kasutatavad väärtused ajaga, mis kulus viimase kaadri renderdamiseks. Seda tehakse kasutades Time.deltaTime . See muudab tõhusalt kõigi muutujate kiirust, millelt iga kaadrit suurendate muutus kaadri kohta et muutus sekundis , ja tõenäoliselt peaksite selle muudatuse tegema igale kaadrile suurendataval või vähendaval väärtusel.

6.6 Heliallikad ja kuulajad

Nüüd, kui oleme käsitlenud objektide loomist, renderdamist ja juhtimist, räägime teisest mõttes, mida arvutimängud võivad teenida: nimelt heli . Unity toetab kahte tüüpi helisid: 2D ja 3D helid. 3D -helide helitugevus varieerub sõltuvalt kaugusest ja moonutatakse kaamera suhtes liikudes; 2D helid seda ei tee.

2D-helid sobivad kõnede ja taustamuusika jaoks ning 3D-helid kehtivad maailma sündmuste tekitatud helidele. Kui soovite muuta, kas heli on 3D või mitte, valige see kaustast projekti vaadake, lülitage inspektor vaadake ja valige rippmenüüst sobiv valik, seejärel vajutage uuesti importida nuppu.

Heli tegelikuks esitamiseks peate lisama audioallikas rekvisiidile (rekvisiit, millest soovite heli saada, 3D -heli korral). Siis peate avama heliklipp väljale ja valige oma helifail.

kuidas salvestada vestlust iPhone 6 -s

Sa võid kasutada myAudioSource.Pause () ja myAudioSource.Play () nende helifailide juhtimiseks. Saate reguleerida helide langemist, käitumist, helitugevust ja doppleri nihutamist inspektor audioallika vahekaart.

6.7 Sisend

Mäng, mis ei võta kasutajalt mingit sisendit, pole eriti mäng. Lugemiseks on palju erinevaid sisendeid ja peaaegu kõigile neist on juurdepääs Sisend ja KeyCode objektid. Allpool on toodud mõned näidissisendiavaldused (mille väärtusi hinnatakse igal kaadril).

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

Nende ridade funktsioonid on enamasti iseenesestmõistetavad. Kasutades neid kolme tüüpi sisendviiteid, saate rekonstrueerida enamiku kaasaegsete 3D -arvutimängude juhtimisskeeme.

6.8 Skripti silumine

Oletame, et skript ei tööta. Nagu hea arst ütleb, võivad teiega juhtuda paugutamised ja katkestused. Kui teie C#-ga on otseselt süntaksivigu, keeldub mäng tavaliselt esitamisel käivitamisest ja kui esitate mõned üsna kasulikud veateated ehitada skripte toimetaja seest. Vaata allpool:

Neid vigu pole tavaliselt kõige raskem parandada. Probleemsemad võivad olla peened semantilised vead, millesse olete edukalt kirjutanud faili, mis on täis kehtivat C# - lihtsalt mitte sellist, mis teeks seda, mida arvasite. Kui teil on üks neist vigadest ja teil on probleeme selle leidmisega, saate olukorda parandada mõne asja abil.

Esimene on mängu täitmise peatamine ja konsooli kontrollimine. Mängu saate peatada, klõpsates nuppu paus ikooni redaktori ülemises keskosas ja seejärel valides konsool alt aken menüü (või vajutage Ctrl > Vahetus > C ). Isegi kui vigu pole, võivad hoiatused siiski anda vihjeid selle kohta, mis võib valesti minna.

Kui see ei tööta, võite proovida ka oma skripti olekust aimu saada, printides sisemuutujate oleku, et kinnitada, et programm teeb seda, mida arvate. Sa võid kasutada Silumine. Logi (string) stringi sisu konsoolile printimiseks, kui programmi täitmine tabab seda rida. Üldiselt, kui töötate tagurpidi sellest, mis teie arvates peaks toimuma, läbi asjade, mis peaksid seda juhtuma, jõuate lõpuks punkti, kus teie silumisprindid ei tee seda, mida te eeldate. Seal on teie viga.

7. Näide: Scripting Pong

Pongi ehitamiseks jagame mängu selle põhielementideks: vajame palli, mis lööb mõlade vahel järjest kiiremini edasi -tagasi, vajame tulemustabelit, mis teab, millal pallid on mõladest möödunud, ja vajame mehhanismi. palli taaskäivitamine, kui see juhtub. Hea esimene samm oleks pallile lisada mitte-kinemaatiline jäik keha, labadele kaks kinemaatilist jäikkeha, keelata nende kõigi raskusjõud ja määrata standardvaradest sobiv füüsiline materjal ( põrgatama koos põrgatama kombain seatud korrutada ).

Allpool saate vaadata palli stsenaariumi koos selgitavate kommentaaridega. Pall peab täitma mõningaid põhieesmärke: see peaks põrkuma keerulises mustris, säilitades alati mõlema telje liikumise, ja see peaks horisontaalsuunas kiirendama väljakutsuva, kuid mitte võimatu tempoga.

BallHandler.cs

Järgmisena peame skriptima oma mõla, mida saate vaadata allpool. Mõla peab klahvivajutustele reageerides üles ja alla liikuma (kuid mitte väljaspool teatud piire). Samuti peab see käivitama osakeste süsteemi, kui see millegagi kokku põrkab.

PaddleHandler.cs

Järgmisena vajame vaenlase tehisintellekti: midagi, mis paneb vaenlase mõla fikseeritud kiirusega palli poole liikuma. Selleks kasutame maksimaalse lihtsuse tagamiseks Vector3.Slerpi. Meile meeldiks ka sama osakeste käitumine, mida näeme oma mõla peal.

EnemyAI.cs

Lõpuks vajame tulemustabeli värskendamiseks ja palli lähtestamiseks skripti, kui see väljub.

TulemustabelUpdater.cs

Kui need skriptid on lisatud ja viited täidetud, kogeme oma Pongi mängu käivitamisel mängu!

Sa saad laadige alla minu Pongi demo , kui soovite näha kõike, mida ma kirjeldasin, tegevuses. See töötab Windowsi, Maci ja Linuxi süsteemides.

8. Dokumentatsiooni uurimine / lisateave

Unity on keeruline mootor, millel on palju rohkem funktsioone, kui selle stiili juhendis oleks võimalik katta, ja see on enne, kui lisate Internetis saadaval olevate (tasuta ja kaubanduslike) Unity -laienduste laia valiku. See juhend annab teile tugeva lähtekoha mängu arendamiseks, kuid eneseharimine on oluline oskus igasugustes ettevõtmistes ja siin kahekordselt.

Oluline ressurss on siin Unity ScriptReference . ScriptReference on otsitav andmebaas, mis on saadaval nii C# kui ka Javascripti jaoks ning sisaldab kõigi Unity käskude ja funktsioonide loendit koos nende funktsioonide kirjelduste ja süntaksi lühinäidetega.

Kui teil on probleeme Unity'i redigeerija ja liidesega või nagu eelistatud videoõpetused, on kõrge kvaliteediga nimekiri pikk Unity videoõpetused saadaval. Laiem (kuid vähem lai) tekstiõpetused Unity jaoks on saadaval ka saidilt CatLikeCoding.

Lõpuks, kui teil on küsimusi, mis ei kuulu dokumentatsiooni või õpetuste hulka, võite esitada konkreetseid küsimusi aadressil vastused.Unity3d.com . Pidage meeles, et vastuseid pakuvad vabatahtlikud, seega austage nende aega ja otsige kõigepealt andmebaasist, veendumaks, et teie küsimusele pole juba vastatud.

9. Mängu loomine / iseseisvaks rakenduseks koostamine

Kui olete ehitanud midagi, mille üle olete uhke (või olete lõpetanud meie kergelt varjatud Pongi näite harjutamiseks), on aeg oma mäng redaktorist teisaldada ja muuta see millekski, mille saate Internetti postitada ja sundida oma sõprade ja perega mängima. Selleks peate looma iseseisva rakenduse. Hea uudis on see, et Unity'is on see väga -väga lihtne. Siiski on mõned potentsiaalsed luksumised, millega peaksite ettevaatlik olema.

Alustuseks teadke, et saate luua ainult veavaba projekti. Selleks veenduge, et konsool oleks ehitamisel avatud: on mõningaid tõrketingimusi, mida mäng redaktoris ignoreerib, kuid katkestab siiski ehitamiskatse. See heidab konsoolile ainult veateateid ja ekraanil pole nähtavaid tulemusi, mis võib olla masendav, kui unustate kontrollida. Kui olete oma mängu vigadeta kompileerinud, saate siiski valida Koosta seaded all Fail või vajutage Ctrl > Vahetus

> B . See avab lihtsa dialoogi, mis võimaldab teil oma mängu mitme platvormi jaoks üles ehitada.

Sealt saadav protsess on iseenesestmõistetav: valige oma valikud ja vajutage ehitada ; mäng palub teil kataloogi installida ja paigutab sinna nii käivitatava kui ka andmekataloogi. Neid kahte faili saab kokku pakkida ja levitada (veenduge, et te ei võta Unity demosse ehitatud mängu eest tasu, kuna see rikub teenusetingimusi).

10. Lõppmärkmed

Nagu iga mängu arendamise tööriista puhul, on Unity edu võti korduv arendamine. Peate üles ehitama juhitavaid samme - olge igal juhul ambitsioonikad, kuid olge ambitsioonikad väikesteks tükkideks ja korraldage need tükid nii, et isegi kui te oma lõppeesmärgist alla jääte, saate vähemalt sidusa toode.

Hankige kõigepealt kõige olulisemad elemendid: pidage oma ideed silmas minimaalne elujõuline toode kõige lihtsam ja paljaste luudega asi, mida võiksite luua, ja tunnete endiselt, nagu oleksite saavutanud midagi väärt. Enne suuremate ambitsioonide juurde asumist minge selle minimaalse elujõulise projekti juurde.

See õpetus annab teile tugeva lähtekoha, kuid parim viis Unity õppimiseks on mängu loomine. Alustage mängu ehitamist, täitke lüngad oma teadmistes, kui need ilmuvad, ja järkjärguline teadmiste voog hävitab üllatavalt kiiresti asjad, mida te ei tea.

Kui olete seda kõike lugenud ja olete Unityga nõutava kodeerimise tõttu pisut ülekoormatud, siis vaadake kindlasti, kuidas õppige mängu arendamist programmiga Unity Learn ja lugege ka meie juhendit videomängude tegemiseks ilma programmeerimiseta.

Unity on võimas tööriist ja pisut uurides saate sellega muljetavaldavaid projekte ehitada kiiremini, kui arvate. Andke meile oma kommentaarides allpool teada, mida ehitasite - tahaksime näha!

Jaga Jaga Piiksuma E -post 3 võimalust kontrollida, kas e -kiri on tõeline või võlts

Kui olete saanud e -kirja, mis tundub pisut kahtlane, on alati parem kontrollida selle ehtsust. Siin on kolm viisi, kuidas teada saada, kas e -kiri on tõeline.

Loe edasi
Seotud teemad
  • Programmeerimine
  • Programmeerimine
  • Pikakujuline
  • Pika kujuga juhend
Autori kohta Andre Infante(131 artiklit avaldatud)

Edelaosas asuva kirjaniku ja ajakirjaniku Andre töökindlus on tagatud kuni 50 kraadi ja on veekindel kuni 12 jalga.

Veel Andre Infantelt

Telli meie uudiskiri

Liituge meie uudiskirjaga, et saada tehnilisi näpunäiteid, ülevaateid, tasuta e -raamatuid ja eksklusiivseid pakkumisi!

Tellimiseks klõpsake siin