Játék programozása Unityvel: Kezdő útmutató

Játék programozása Unityvel: Kezdő útmutató
Ez az útmutató ingyenesen letölthető PDF -ként. Töltse le most ezt a fájlt . Nyugodtan másolja és ossza meg barátaival és családjával.

Az internetgazdaság meglepő jellemzője az indie videojátékok térnyerése. Az ezer fős, több millió dolláros tripla-A stúdiók kizárólagos domainjeként számos eszközkészletet fejlesztettek ki, amelyek a modern játékfejlesztési erőforrásokat magánszemélyek kezébe adják, vagy a programozók és tervezők kis, eseti gyűjteményei. Korábban már tárgyaltunk a legjobb indie játékokról, ezért feltétlenül nézd meg őket, hogy inspirációt kapjanak arról, hogy mit lehet elérni olyan eszközökkel, mint a Unity.





Ezek az indie játékfejlesztő csapatok olyan mozgékonyságot és kockázattűrést mutattak be, amely sok esetben lehetővé teszi számukra, hogy gyorsabban mozdítsák el a játékmenet innovációit, mint nagy költségvetésű társaik. Az elmúlt években számos megdöbbentően sikeres indie címet mutattak be, többek között Minecraft , Börtön , és szuper hús fiú , és még ha nem is kell hozzá készségek ahhoz, hogy ilyen játékokat készítsen, készíthet játékot a Buildbox használatával.





Az indie játékfejlesztés gyorsan fejlődő tájaiban Egység de facto szabványnak bizonyult: alacsony költsége, könnyű kezelhetősége és széles funkciókészlete ideális a gyors játékfejlesztéshez. Az Unity olyan rugalmas, hogy akár meg is teheti készítse el saját egyéni játékvezérlőit egy kis barkácsolással tudd!





Még olyan nagy stúdiók is, mint a CCP (Developers of Éva Online ) használja a játékkoncepciók gyors prototípus -készítéséhez. A Unity egy „játékmotort a dobozban” biztosít - egy fizika- és renderelőmotort horgokkal több szkriptnyelvhez, amely gyakorlatilag bármilyen videojáték -műfajhoz alkalmazkodik.

Míg a Unity vizuális szerkesztőt biztosít a játékkörnyezet manipulálásához, a Unity nem „nulla programozási” játékkészítő eszköz. Az eredmény eléréséhez programoznia kell, de sokkal rugalmasabb és hatékonyabb eszközt is kínál, mint bármely „játékkészítő” program.



A Unity nem fogja elvégezni a munkát helyetted, de jelentősen csökkenti a belépés korlátait. A C ++ és az OpenGL teljesen a nulláról indul, napokba telhet, amíg eljut arra a pontra, ahol valóban megjelenik valami a képernyőn. A Unity használatával körülbelül tíz másodpercig tart. A Unity gyors, intuitív módon a kezdő programozók kezébe adja a játékkészítés alapelemeit.

Ma végigvezetlek mindenen, amit tudnia kell egy játék létrehozásához a Unity -ben, amely tíz fő fejezetre oszlik:





1. § - Az egység változatai

2. § - Az Unity telepítése





3. §-Rövid bevezetés az objektum-orientált paradigmába

4. § - Az egység alapjai

§5 - Példa: A játék alapvető elemei

6. § - Forgatókönyv az egységben

§7 - Példa: Scripting Pong

8.§ - A dokumentáció feltárása / További információ

9. § - A játék felépítése / önálló alkalmazás összeállítása

10. §-Záró megjegyzések

1. Az Unity változatai

A Unity két alapvető ízben kapható: a pro verzióban és az ingyenes verzióban. Vannak a különbségek száma , de nagy vonalakban a pro verzió számos vizuális fejlesztést támogat (például a valós idejű lágy árnyékokat és az utófeldolgozást), valamint nagyszámú, viszonylag kisebb funkciót, amelyek rendkívül hasznosak a bonyolultabb játékokhoz.

Ez azt jelenti, hogy a legtöbb viszonylag egyszerű játékhoz, amelyeket érdemes építeni, az Unity ingyenes verziója tökéletesen megfelelő. Az alábbiakban részletesebben lebontjuk a legfontosabb különbségeket az érdeklődők számára.

1.1 Árak

A Unity ingyenes verziója természetesen ingyenes. Van azonban néhány korlátozás: az Unity ingyenes verzióját nem lehet licencbe adni olyan vállalatoknak, amelyek éves bevétele meghaladja a 100 000 dollár . Bár az ilyen szervezetek túlmutatnak ezen útmutató keretein, ha gyanítja, hogy ilyen szervezet lehet, valószínűleg bölcs dolog a Pro verzióra való áttérés.

A Unity Pro verziója az 75 dollár egy hónap, vagy 1500 dollár állandó licenchez, és nincsenek korlátai arra vonatkozóan, hogy mit tehet a vele létrehozott játékokkal. Rendelkezésre áll egy 30 napos ingyenes próbaverzió is, amelyet ebben az útmutatóban fogunk használni annak érdekében, hogy a lehető legteljesebb áttekintést nyújtsuk az elérhető funkciókról. Egyéves hallgatói engedély is kapható ezen keresztül Tanulmány számára 129 USD .

1.2 Jellemzők

A Unity ingyenes verziójában sok funkció hiányzik. A legfontosabb különbségek azonban a következők: az Unity ingyenes verziójából hiányzik számos olyan megjelenítési lehetőség, amelyek lehetővé teszik a jobb megjelenésű, gyorsabban futó játékokat (LOD támogatás, képernyő-utólagos feldolgozás, fejlett árnyékolók, valós idejű soft) árnyékok és halasztott renderelés). Hiányzik belőle a teljes is mechanim animációs rendszer és néhány AI eszköz.

Általánosságban elmondható, hogy összetett, nagyszabású projekteknél, vagy olyan projekteknél, ahol fontos a grafikus teljesítmény, érdemes a pro verzió. A pro verziót használom, mert virtuális valóságos játékokat fejlesztek az Oculus Rift számára, és a képernyő-tér utólagos feldolgozás támogatása szükséges a headset helyes használatához.

2. A Unity telepítése

A Unity telepítése egyszerű. A végrehajtható fájlt innen töltheti le unity3d.com/get-unity/download .

A letöltés után futtassa, majd kövesse a telepítő utasításait. Amikor a telepítés befejeződött, megjelenik egy ablak, amely aktiválja a Unity licencet. Jelölje be az „Unity Pro ingyenes 30 napos próbaverziójának aktiválása” jelölőnégyzetet, majd kattintson az „OK” gombra.

Gratulálunk! Most 30 napos próbaverziója van a Unity Pro-val. Ha a próbaidőszak lejár, ha nem szeretné megvásárolni a pro verziót, válthat az ingyenes verzióra, és megtarthatja meglévő tartalmát.

morph két arc együtt online ingyen

3. Rövid bevezetés az objektum-orientált paradigmába

Mielőtt elkezdené a Unity használatát, fontos, hogy egy kicsit átnézzük az alapokat. A Unity mindkettőt támogatja C # és JavaScript számára játék programozás ; ebben az oktatóanyagban a C# -val fogunk dolgozni.

Először is, ha még soha nem programozott, tegye félre ezt az oktatóanyagot, és töltsön néhány napot a Microsofton C # Nyelv alapozó amíg nem érzi jól magát a nyelv használatával egyszerű feladatokhoz.

Ha valami másat szeretne a C# -tól (de nem feltétlenül olyan nyelvet, amelyet a Unity -ben használhat), akkor nézze meg a hat legegyszerűbb programozási nyelv útmutatóját kezdőknek.

Ha korábban kényszerítő vagy objektumorientált nyelven programozott, mint például a C vagy a Java, akkor olvassa el az alapozót, és ismerkedjen meg azzal, hogy a C# miben különbözik más, korábban használt nyelvektől. Akárhogy is, addig ne folytassa az oktatóanyagot, amíg nem érzi jól magát a C# egyszerű problémáinak megoldásában (például ha azt szeretném kérni, hogy írjon egy programot, amely kinyomtatja az első száz prímszámot, akkor képesnek kell lennie arra, hogy ezt a programot anélkül írja konzultáció a Google -lal).

A legfontosabb megértendő fogalom itt az objektum-orientált paradigma (rövidítve: NYISD KI ). Az objektumorientált nyelvekben a programok funkcionális egységekre vannak osztva Tárgyak . Minden objektumnak saját privát változója és funkciója van. Az objektumspecifikus függvényeket hívjuk mód .

Az ötlet itt a modularitás: azáltal, hogy minden objektumot elkülönítünk, és más objektumokat arra kényszerítünk, hogy a módszerekkel interakcióba lépjenek vele, csökkentheti a lehetséges nem szándékos interakciók számát - és ezáltal a hibákat. Létrehozhat olyan objektumokat is, amelyeket később, módosítás nélkül újra felhasználhat. A Unity -ben ezeket az objektumokat építi és csatolja játék entitások (kinek a viselkedését fogják irányítani).

Az objektumok példányosítva vannak osztályok : az osztály csak egy fájl, amely meghatározza az objektum definícióját. Tehát, ha azt szeretné, hogy a mook objektum, amely a mesterséges intelligenciát kezeli a játékban lévő ellenség számára, írjon egy „Mook” osztályt, majd csatolja azt a fájlt minden ellenséges entitáshoz. Amikor futtatod a játékot, minden ellenséget fel kell szerelni a 'Mook' objektum másolatával.

Egy új szkript csatolása egy objektumhoz így néz ki:

Első, válassza ki az objektumot és menj a Ellenőr . Kattintson a Komponens hozzáadása gomb.

Menj új forgatókönyv , írja be a kívánt nevet, majd kattintson a gombra létrehozni és hozzáadni .

Most van egy új szkriptje, amelyet dupla kattintással szerkeszthet!

Egy osztályfájl így néz ki:

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

Bontsuk le ezt:

  • A UnityEngine használata: Ez a sor azt mondja a C# -nak, hogy a Unity könyvtárait szeretnénk használni, amelyek lehetővé teszik számunkra, hogy kapcsolódjunk az Unity játékmotorjához.
  • Nyilvános osztály Mook: Mono Viselkedés: Ez a sor deklarálja az osztályt és annak nevét - mook .
  • Privát úszó egészség: Ez egy privát osztályváltozót deklarál (amelyet csak az osztályon belül lehet megváltoztatni). A változó értéket kap Rajt .
  • Üres kezdés (): Ez deklarálja az ún Rajt . A Start egy speciális módszer, amely csak egyszer fut, amikor a játék először elindul.
  • Érvénytelen frissítés (): A frissítés egy másik speciális módszer, amely minden keretben fut. A játék logikájának nagy része itt fog megjelenni.
  • // ha az úton találkozik a játékossal, öld meg: Ez a sor egy megjegyzés (minden kettős perjelgel kezdődő sort a C#figyelmen kívül hagy). A megjegyzéseket arra használják, hogy emlékeztessék magukat arra, hogy a kód egyes bitjei mit tesznek. Ebben az esetben ezt a megjegyzést használják egy bonyolultabb kódblokk helyett, amely valójában azt teszi, amit a megjegyzés leír.

Együtt Rajt és Frissítés , szinte bármilyen névvel példányosíthatja saját módszereit. A létrehozott módszerek azonban csak akkor futnak, ha meghívják őket. Nyilvánítsunk egy módszert egy ún. Hipotetikus osztályhoz addTwoNumbers ami két számot összead:

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

Ez nyilvános (más objektumok számára hozzáférhető) metódust deklarál, amely úszót ad vissza, ún addTwoNumbers , amely két úszót vesz bemenetként (ún nak nek és b ). Ezután a két érték összegét adja eredményül.

A módszer meghívása ugyanazon osztályon belülről (mondjuk belülről) Frissítés ) így néz ki:

float result = addTwoNumbers(1, 2);

A módszer meghívása egy másik osztályból hasonló:

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

Ez megint csak létrehozza az osztály egy példányát, hozzáfér a megfelelő metódushoz és betáplálja a hozzáadni kívánt számokkal, majd tárolja az eredményt a eredmény . Egyszerű.

Ha a parancsfájl olyan objektumhoz van csatolva, amely különleges tulajdonságokkal rendelkezik (például részecske -kibocsátó), amely nem érhető el a GameObject normál paraméterei alatt, akkor a GetComponent módszer.

A szintaxis így néz ki:

GetComponent().Play();

Ha ezek közül bármelyik ismeretlen számodra, menj vissza, és nézd át a C# primert. Sok frusztrációtól megmenekül, ha folytatjuk.

4. Az egység alapjai

Ebben a részben a Unity motor alapvető mechanikáján dolgozunk. A Unity munkafolyamata valahogy így néz ki:

  1. Hozzon létre egy entitást a játék szerepének kiszolgálására (üres GameObjects elvont logikai feladatokhoz használható).
  2. Írjon vagy keressen osztályfájlt, és adja hozzá az entitáshoz szkriptként (a Komponens hozzáadása gombot a ellenőr Kilátás.
  3. Fuss > teszt > hibakeresés > ismétlés amíg működik, és lépjen tovább a játék következő elemére.

A Unity számos alapvető nézetlapot tartalmaz, amelyek a felhasználó ízlése szerint különböző módon helyezhetők el. A nagy öt:

  1. Játszma, meccs: megjeleníti a játék futó példányát, amellyel kölcsönhatásba léphet és tesztelheti.
  2. Színhely: statikus, szerkeszthető változatát biztosítja játékvilág .
  3. Ellenőr: lehetővé teszi a játék világában lévő egyes entitások módosítását a szerkesztő fülre.
  4. Projekt: lehetővé teszi a projekt fájljainak böngészését és a modellek, anyagok és egyéb erőforrások áthúzását a szerkesztő lapon helyezze el őket a játék világába.
  5. Hierarchia: Ez a lap a világ összes objektumát mutatja, lehetővé téve, hogy a jelenetben távoli objektumokat találjon, és a szülő entitásokat egymáshoz kattintva és húzva.

Mindezek helyét lásd az alábbi diagramon:

4.1 Egység entitások

4.1.1 Hálók

A háló a módszer 3D geometria képviselteti magát az Unityben. Használhatja a Unity beépített rendszerét primitív objektumok (kockák, gömbök, hengerek stb.), vagy importálja saját 3D modelljeit egy modellező csomagból, mint pl. Turmixgép vagy Maya . A Unity számos 3D formátumot támogat, beleértve .fbx , és .3ds .

A szemek kezelésének alapvető eszközei a felület bal felső sarkában található méretezési, forgatási és fordítási gombok. Ezek a gombok vezérlőikonokat adnak hozzá a szerkesztő nézetben lévő modellekhez, amelyekkel aztán manipulálni lehet őket a térben. Egy objektum textúrájának vagy fizikai tulajdonságainak megváltoztatásához jelölje ki őket, és használja a ellenőr elemzéséhez anyag és merev test elemeket.

4.1.2 GUI elemek

A hagyományos GUI -írások és szövegek a GUI szöveg és a GUI textúra GameObjects a szerkesztőben. A felhasználói felület elemeinek kezelésének azonban robusztusabb és reálisabb módja a 3D szöveg és Quad GameObjects (átlátszó textúrákkal és kivilágítatlan átlátszó árnyékolóval) HUD elemek entitásként való elhelyezéséhez a játék világában.

Ban,-ben hierarchia nézetben ezeket a játék elemeit rá lehet húzni a főkamerára, hogy gyermekek legyenek, biztosítva, hogy mozogjanak és forogjanak a kamerával.

A GUI elemek (szöveg és textúrák) méretét és léptékét az Ellenőrző lap megfelelő mezőivel lehet módosítani.

4.1.3 Anyagok

Az anyagok textúrák és árnyékolók kombinációi, és közvetlenül a játék objektumokra húzhatók a projekt lapról. Az Unity Pro számos árnyékolót tartalmaz, és a hozzájuk tartozó textúrát a felügyelő fül segítségével állíthatja be egy objektumhoz, amelyre alkalmazzák.

Egy textúra importálásához alakítsa át a -ra .jpg , .png , vagy .bmp , és húzza a eszközök mappát a Unity projekt könyvtárában (amely Saját dokumentumok alapértelmezés szerint). Néhány másodperc múlva egy betöltősáv jelenik meg a szerkesztőben. Amikor befejeződött, a kép textúrájaként megtalálható a projekt fülre.

4.1.5 Fények

A fények azok GameObjects amelyek sugárzást vetítenek a világra. Ha nincs fény a jelenetben, minden sokszög azonos fényerővel rajzolódik ki, így a világ lapos, kimosott megjelenést kölcsönöz.

A lámpák elhelyezhetők, elforgathatók, és számos belső tulajdonsággal rendelkeznek, amelyeket testre szabhat. Az intenzitás csúszka szabályozza a fényerősséget, és a hatótávolság szabályozza, hogy milyen gyorsan elhalványuljon.

Az irányelvek a jelenet nézet megmutatja a megvilágítás maximális tartományát. Játsszon mindkét beállítással a kívánt hatás eléréséhez. Beállíthatja a fény színét, a mintát ( aprósütemény a felszínen a fény irányul, és milyen villogás jelenik meg a képernyőn, ha közvetlenül a fényt nézi. A cookie -val valósághűbb fénymintákat lehet hamisítani, drámai hamis árnyékokat létrehozni és kivetítőket szimulálni.

A fény három fő típusa folt , pont , és irány- .

Spotlámpák elhelyezkedjenek a 3D térben, és csak egy irányban vetítsenek fényt változó szögű kúpban. Ezek jóak zseblámpákhoz, keresőlámpákhoz, és általában pontosabb vezérlést biztosítanak a világításhoz. A spotlámpák árnyékot vethetnek.

Pontlámpák 3D térben kell elhelyezkedniük, és egyenletesen kell világítaniuk minden irányba. A pontlámpák nem vetnek árnyékot.

Irányított fények végül a napfény szimulálására használják: olyan irányba vetítik a fényt, mintha végtelen messziről érkeznének. Az irányított fények befolyásolják a jelenet minden tárgyát, és árnyékokat okozhatnak.

4.1.6 Részecskerendszerek

NAK NEK Részecskerendszer egy GameObject amely több száz vagy ezer részecskét generál és irányít egyszerre. A részecskék kicsi, optimalizált 2D objektumok, amelyek 3D térben jelennek meg. A részecskerendszerek egyszerűsített renderelést és fizikát használnak, de entitások ezreit jeleníthetik meg valós időben dadogás nélkül, így ideálisak füst, tűz, eső, szikrák, varázshatások stb.

Ezen paraméterek elérése érdekében sok paramétert módosíthat, és elérheti őket úgy, hogy részecskerendszert hoz létre a komponens szerkesztő > a részecskerendszer kiválasztása > az ellenőr fül megnyitása . Megváltoztathatja az egyes részecskék méretét, sebességét, irányát, forgását, színét és textúráját, és beállíthatja, hogy a paraméterek többsége idővel megváltozzon.

Alatt ütközés attribútum, ha engedélyezi, és a szimulációs teret erre állítja világ részecskéket kap, amelyek ütközni fognak a világ tárgyaival, amelyek számos reális részecskehatáshoz használhatók, beleértve az esőt, a mozgó vizet és a szikrákat.

5. Példa: A játék alapvető elemei

Ehhez az oktatóanyaghoz egy egyszerű játékot készítünk Pong - valami, amiről korábban már többször beszámoltunk a barkácsolás során:

  • Arduino Classic Pong
  • Arduino OLED Pong

Ebben a részben áttekintjük az alapvető elemek elrendezését - a szkript bemutatója később jön.

Először bontsuk fel a Pong játékát az alapvető összetevőire. Először két lapátra és egy labdára van szükségünk. A labda a képernyőn kívülre repül, ezért szeretnénk egy mechanizmust, amely visszaállítja azt. Azt is szeretnénk, ha a szöveg megjelenítené az aktuális pontszámot, és annak érdekében, hogy megmutassuk az Unity összes alapelemét, szeretnénk egy fantasztikus részecskehatást, amikor elütjük a labdát. Az egész játékot drámaian meg kell világítani.

Ez bomlik a golyós tárgy (gömb), a ívó , két lapát kellékkel részecske -kibocsátók mellékelve, a 3D-szöveg entitás és a spot fény . Ebben az oktatóanyagban az alapértelmezett fizikai anyagot fogjuk használni ugrál , val vel ugráló kombájn állítva szaporodni . Így néz ki a beállítás tíz képernyőképen:

Először hozzon létre egy kocka kellék az evező számára.

Méretezze megfelelően, lemásolni , és tegyen egy szféra a lapátok között a labdáért.

Ezután hozzon létre egy 3DText objektum és skála és pozíció helyesen, megváltoztatva a betűméret attribútumot, hogy kevésbé pixeles képet kapjon.

Ezután hozzon létre kettőt részecskerendszerek , válassza ki a kívánt jellemzőket, és rögzítse azokat a lapátokhoz.

Ezután szeretné helyezze el és forgassa el a kamerát hogy helyesen keretezze a jelenetet. Amíg a kamera ki van választva, a jobb alsó sarokban látható egy kis előnézeti kép a kamera nézetéről.

Mielőtt befejezzük, létre kell hoznunk két további kockát ütközőként, hogy megakadályozzuk a labda kipattanását a játékterületről. Láthatatlanná tehetjük őket, ha töröljük a jelölést háló renderelő ban,-ben ellenőr fül .

Ha megnyomja a játékot, most megtekintheti játékunk alapelemeit. Még nem csinálnak semmit, de majd ráérünk!

Most, hogy megvan ez a beállítás, beszélni fogunk arról, hogy mi jár ezen elemek szkriptelésével a játék elkészítéséhez.

6. Forgatókönyvírás egységben

Miután egy szkriptet csatolt egy objektumhoz, módosíthatja azt dupla kattintással a ellenőr . Ez megnyílik MonoDevelop , a Unity alapértelmezett fejlesztői környezete. Lényegében a Monodevelop egy szövegszerkesztő, amely kifejezetten programozásra optimalizált funkciókkal rendelkezik.

A kulcsszavak és megjegyzések kiemelve vannak kék és zöld , és numerikus értékek és karakterláncok jelennek meg háló . Ha használtad Fogyatkozás vagy más IDE -k, a MonoDevelop nagyon hasonló. tudsz épít a szkripteket a szerkesztőből, hogy ellenőrizze a szintaktikai hibákat, például:

Általában ahhoz, hogy a szkript kölcsönhatásba lépjen a Unityvel, hivatkoznia kell a szkriptet tartalmazó objektum elemeire (ezen elemek listáját a ellenőr fülre, amikor a megfelelő objektum van kiválasztva). Ezután meghívhat metódusokat vagy beállíthat változókat ezen elemek mindegyikéhez, hogy végrehajtsa a kívánt módosításokat.

Ha azt szeretné, hogy egy objektum szkriptje befolyásolja egy másik objektum tulajdonságait, akkor üreset hozhat létre GameObject változót a szkriptben, és használja a ellenőr hogy hozzárendelje a jelenet egy másik tárgyához.

Az objektum elemeinek listája a következő (a fenti példában az egyik lapátunk ellenőrző nézetéből vettük):

  1. Átalakítás
  2. Kocka (hálószűrő)
  3. Dobozütköző
  4. Mesh Renderer

Az objektum ezen aspektusainak mindegyike befolyásolható egy szkripten belül. Ezután pontosan megnézzük, hogyan.

6.1 Átalakítás

A Unity GameObject átalakítási funkciói vezérlik az objektum fizikai paramétereit: az skála , annak pozíció , és annak orientáció . Az alábbi szkriptből érheti el őket:

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

A fenti példákban a megnevezett változók a nevekben megadott típusúak. Itt van néhány kulcsfontosságú részlet: a pozíció és a skála a várt módon tárolva Vector3s . Hozzáférhet a x , ÉS , és VAL VEL mindegyik összetevője (pl. átalakítani.pozíció.y megadja a tárgy távolságát a nulla sík felett).

Azonban elkerülni kardánzár , a forgásokat úgy kezeljük Kvaterniók (négykomponensű vektorok). Mivel a kvaterniók kézi manipulálása nem intuitív, az elfordításokat Euler-szögek segítségével módosíthatja a Quaternion.Euler módszer így:

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

Ha zökkenőmentesen szeretné áthelyezni az objektumokat egyik helyről a másikra, megtalálja a Slerp módszer kvaterniók és vektorok esetén hasznos. Slerp három érvet vesz fel - a jelenlegi állapotot, a végső állapotot és a változás sebességét, és simán interpolál közöttük a megadott sebességgel. A szintaxis így néz ki:

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

6.2 Renderelő

A Unity renderelő funkciói lehetővé teszik a kellékek felületeinek képernyőn történő megjelenítésének szabályozását. Újra hozzárendelheti a textúrát, megváltoztathatja a színét, és megváltoztathatja az objektum árnyékolóját és láthatóságát. A szintaxis így néz ki:

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

Ezek többsége elég egyértelmű funkciókkal rendelkezik. Az első példa láthatatlanná teszi a kérdéses tárgyat: hasznos trükk számos helyzetben. A második példa újat rendel RGB színű (nevezetesen zöld) a szóban forgó objektumhoz. A harmadik hozzárendeli a fő diffúz textúrát egy új Texture változóhoz. Az utolsó példa megváltoztatja az objektum anyagának shaderjét egy újonnan meghatározott shader változóra.

6.3 Fizika

A Unity integrált fizikamotorral érkezik, amit a fizika homokozó játékok is használnak. Ez lehetővé teszi az objektumok fizikai tulajdonságainak hozzárendelését és a szimuláció részleteinek kezelését. Általánosságban elmondható, hogy ahelyett, hogy saját fizikáját próbálnánk megvalósítani egy tankönyv és az átalakítási rendszer segítségével, egyszerűbb és robusztusabb a Unity fizikai motorjának használata a lehető legnagyobb mértékben.

Minden fizikai kellék megköveteli ütközők . Magát a tényleges szimulációt azonban a merev test , amely hozzáadható a ellenőr Kilátás. Merev testek lehetnek kinematikai vagy nem kinematikus .

A kinematikai fizika kellékei ütköznek a körülöttük lévő (és hatásos) nem kinematikai fizika kellékekkel, de az ütközés nem befolyásolja őket. A statikus kinematikai kellékek a közmondásos mozdíthatatlan tárgyak, a mozgó kinematikai tárgyak pedig a közmondásos megállíthatatlan erő (a megjegyzés szerint, amikor ütköznek, egyszerűen áthaladnak egymáson).

Ezen túlmenően beállíthatja az objektum szögbeli ellenállását (mennyi energiát igényel a forgatása), megváltoztathatja tömegét, diktálhatja, hogy a gravitáció befolyásolja -e vagy sem, és erőket gyakorolhat rá.

Példák:

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

Ezek mind elég magától értetődőek. Itt csak a használatát kell megjegyezni átalakítani.előre . A Vector3 három összetevőből áll ( .előre , .fel , és .jobb ), amely hozzájuk férhet és foroghat velük ( előre a kék nyíl iránya a szerkesztőben). Az átalakítani.előre A kulcsszó egyszerűen az aktuális objektum 1 -es nagyságú előremenő vektora. Szorozható úszóval, hogy nagyobb erőt érjen el az objektumon. Ön is hivatkozhat átalakítani.fel és átalakítani.igaz , és tagadja őket, hogy megfordítsák.

6.4 Ütközés

Gyakran egy játék építésekor azt szeretné, ha az ütközés bizonyos állapotváltozást eredményezne a kódjában, nemcsak a fizika szimulációján. Ehhez szüksége lesz egy ütközés észlelési módszer .

Bizonyos előkészítő munkára van szükség az Unity ütközéseinek észleléséhez. Először is, az ütközés tárgyai közül legalább az egyiknek szüksége van a nem kinematikus merev test csatolt hozzá. Mindkét objektumnak megfelelő ütközőkkel kell rendelkeznie, amelyek nem triggerek. Mindkét objektum teljes sebességének elég alacsonynak kell lennie ahhoz, hogy ténylegesen összeütközzenek, ahelyett, hogy egyszerűen átugranák egymást.

Ha minden gondja megvan, ellenőrizheti az ütközést azáltal, hogy egy speciális ütközésérzékelési módszert helyez el egy olyan szkriptben, amely az objektumhoz tartozik, amellyel ellenőrizni szeretné az ütközést. A módszer így fog kinézni:

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

Ez a módszer automatikusan fut az első képkockán, amikor egy másik objektum megérinti az objektumot. Az ütközési entitás Egyéb hivatkozás az eltalált objektumra. Erre hivatkozhat például játékobjektum , merev test , és átalakítani tulajdonságait, hogy különböző módon manipulálja. Míg OnCollisionEnter valószínűleg a leggyakoribb funkció, amelyet használhat OnCollisionExit és OnCollisionStay (egyébként azonos szintaxissal és használattal), amelyek az első képkocka során aktiválódnak, amikor abbahagyja az objektummal való ütközést, illetve minden olyan képkocka során, amikor egy objektummal ütközik.

Néha hasznos lehet az úgynevezett művelet végrehajtása is raycasting . Az újrahasznosítás során egy végtelenül vékony vonal (a sugár ) valamilyen forrásból, valamilyen vektor mentén átviszik a világon, és amikor elüt valamit, az első ütközés helyzete és egyéb részletei visszatérnek. A raycast kódja így néz ki:

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

Ez egy sugarat vetít az aktuális objektum pozíciójából a -Vector3.up mentén (egyenesen lefelé), és összekapcsolja a változót találat az első tárgynak, amellyel összeütközik. Miután a sugár elérte valamit, hozzáférhet üt.távolság annak megállapítására, hogy milyen messze van, ill hit.GameObject manipulálni az eltalált tárgyat.

Az ilyen sugárzások használhatók a lövöldözők számára annak meghatározására, hogy a fegyver mire mutatott, vagy objektumok kiválasztására, amikor a kamera rájuk néz, vagy bizonyos mozgásmechanikai stílusokra.

6.5 Idő korrekció

Az egyik fontos tényező, amelyet szem előtt kell tartani, amikor ilyen módon manipulálja a tárgyakat filmkocka szám . Függetlenül attól, hogy milyen óvatosan optimalizál, a képkockasebesség mindig változik, és nem szeretné, hogy a játék sebessége ennek megfelelően változzon. Ha valaki más a játékot egy gyorsabb számítógépen futtatja, mint amin kifejlesztette, akkor nem szeretné, ha a játék kétszeres sebességgel futna.

Ezt úgy korrigálja, hogy megszorozza a használt értékeket az utolsó kép megjelenítéséhez szükséges idővel. Ez a használatával történik Time.deltaTime . Ez hatékonyan megváltoztatja minden olyan változó sebességét, amelyről minden képkockát növel változás képkockánként nak nek változás másodpercenként , és ezt a módosítást valószínűleg bármelyik képkockán növekvő vagy csökkenő értéken kell elvégeznie.

6.6 Hangforrások és hallgatók

Most, hogy tárgyaltunk az objektumok létrehozásáról, megjelenítéséről és vezérléséről, beszéljünk a számítógépes játékok másik értelméről: nevezetesen hang . A Unity kétféle hangot támogat: 2D és 3D hangok. A 3D hangok hangereje a távolságtól függően változik, és a fényképezőgéphez képest elmozdulnak; 2D hangok nem.

A 2D hangok megfelelőek a hangátvitelhez és a háttérzenéhez, a 3D hangok pedig a világ eseményei által generált hangokra vonatkoznak. Annak megváltoztatásához, hogy egy hang 3D -e vagy sem, válassza ki azt a projekt nézet, váltson a ellenőr nézetet, és válassza ki a megfelelő lehetőséget a legördülő menüből, majd nyomja meg a gombot újra behozni gomb.

A hang tényleges lejátszásához csatolnia kell egy hangforrás kellékhez (az a kellék, amelyből a hangot ki szeretné hozni, 3D hang esetén). Ezután meg kell nyitnia a audioklip mezőt, és válassza ki a hangfájlt.

mit jelent az, hogy a töltés nem töltődik

Te tudod használni myAudioSource.Pause () és myAudioSource.Play () hogy vezérelje azokat a hangfájlokat. Beállíthatja a zuhanási viselkedést, a hangerőt és a hangok doppler -eltolását a ellenőr fülre az audióforráshoz.

6.7 Bemenet

Az a játék, amely nem vesz igénybe semmilyen hozzájárulást a felhasználótól, nem sok játék. Sokféle bemenet olvasható, és szinte mindegyik elérhető a Bemenet és Kulcskód tárgyakat. Az alábbiakban néhány minta bemeneti utasítás található (amelyek értékei minden keretben vannak).

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

E sorok funkciói többnyire magától értetődőek. E háromféle bemeneti referencia használatával rekonstruálhatja a legtöbb modern 3D számítógépes játék vezérlési sémáját.

6.8 Szkript hibakeresése

Tegyük fel, hogy egy szkript nem működik. Ahogy a jó orvos mondja, bangups és hangups történhet veled. Ha közvetlen szintaktikai hibák vannak a C#kóddal, a játék általában megtagadja a futtatást, amikor megnyomja a play gombot, és néhány meglehetősen hasznos hibaüzenet jelenik meg, ha épít a szkripteket a szerkesztőből. Lásd lejjebb:

Ezeket a hibákat általában nem a legnehezebb kijavítani. Ami problémásabb lehet, azok a finom szemantikai hibák, amelyekben sikeresen megírt egy érvényes C# -val teli fájlt - csak nem azt, amelyik azt teszi, amit gondolt. Ha az egyik ilyen hibát észleli, és nem találja a nyomát, akkor néhány dolgot megpróbálhat javítani a helyzeten.

Az első, hogy szüneteltesse a játék végrehajtását, és ellenőrizze a konzolt. A játékot a gombra kattintva szüneteltetheti szünet ikonra a szerkesztő felső középső részén, majd válassza a lehetőséget konzol aljáról ablak menü (vagy megnyomásával Ctrl > Váltás > C ). Még ha nincsenek is hibák, a figyelmeztetések továbbra is segíthetnek abban, hogy néhány támpontot adjanak arról, hogy mi történhet rosszul.

Ha ez nem működik, akkor megpróbálhat képet kapni a szkript állapotáról a belső változók állapotának kinyomtatásával, hogy ellenőrizze, hogy a program azt teszi, amit gondol. Te tudod használni Hibakeresési napló (karakterlánc) hogy egy karakterlánc tartalmát kinyomtassa a konzolra, amikor a program végrehajtása eléri ezt a sort. Általánosságban elmondható, hogy ha visszafelé dolgozik attól, amiről úgy gondolja, hogy meg kell történnie, azokon a dolgokon keresztül, amelyeknek meg kell valósítaniuk, végül eléri azt a pontot, amikor a hibakeresési nyomatok nem azt teszik, amit elvárnak tőlük. Ott van a hibád.

7. Példa: Scripting Pong

A Pong építéséhez bontsuk le a játékot a legfontosabb elemeire: szükségünk van egy labdára, amely egyre nagyobb sebességgel rikochez ide -oda a lapátok között, szükségünk van egy eredményjelző táblára, amely tudja, hogy mikor haladtak át a labdák a lapátokon, és szükségünk van egy mechanizmusra, újraindítani a labdát, amikor ez megtörténik. Az első jó lépés az lenne, ha egy nem kinematikus merev testet adnánk a golyóhoz, két kinematikai merev testet a lapátokhoz, letiltanánk a gravitációt mindannyiuk számára, és hozzárendelnénk egy megfelelő fizikai anyagot a standard eszközökből ( ugrál val vel ugráló kombájn állítva szaporodni ).

Az alábbiakban megtekintheti a bál forgatókönyvét magyarázó megjegyzésekkel. A labdának el kell érnie néhány alapvető célt: bonyolult mintában kell felpattannia, mindig meg kell tartania mindkét tengely mozgását, és vízszintes irányban kihívást jelentő, de nem lehetetlen ütemben kell gyorsulnia.

BallHandler.cs

Ezután be kell írnunk a lapátunkat, amelyet alább megtekinthet. A lapátnak felfelé és lefelé kell mozognia a gombnyomások hatására (de nem bizonyos határokon kívül). Szintén aktiválnia kell a részecskerendszert, ha ütközik valamivel.

PaddleHandler.cs

Ezután szükségünk van az ellenség AI -jára: valami, ami miatt az ellenség evezője rögzített ütemben követi a labdát. Ehhez a Vector3.Slerp -t fogjuk használni a maximális egyszerűség érdekében. Ugyanazt a részecske viselkedést szeretnénk, amelyet a saját lapátunkon látunk.

EnemyAI.cs

Végül szükségünk van egy forgatókönyvre, amely frissíti az eredményjelzőt, és visszaállítja a labdát, amikor kimegy.

ScoreboardUpdater.cs

A csatolt forgatókönyvekkel és a kitöltött hivatkozásokkal a Pong játék futtatásakor tapasztaljuk a játékmenetet!

tudsz töltsd le a Pong demómat , ha látni akarod mindazt, amit felvázoltam, működés közben. Windows, Mac és Linux rendszereken fut.

8. A dokumentáció feltárása / További információ

A Unity egy összetett motor, amely sokkal több funkcióval rendelkezik, mint amennyi egy ilyen stílusú útmutatóban megvalósítható lenne, és ezt megelőzi az interneten elérhető (ingyenes és kereskedelmi) Unity -bővítmények széles skálája. Ez az útmutató erős kiindulópontot ad a játék fejlesztéséhez, de az önképzés fontos készség minden törekvésben, és itt kétszer is.

Itt kulcsfontosságú erőforrás a Unity ScriptReference . A ScriptReference egy kereshető adatbázis, amely mind a C#, mind a Javascript számára elérhető, és tartalmazza az Unity minden parancsának és funkciójának listáját, a funkcióik leírásával és a szintaxis rövid példáival.

Ha problémái vannak a Unity szerkesztőjével és kezelőfelületével, vagy csak úgy, mint a video-oktatóanyagok, akkor a jó minőségű termékek listája hosszú Unity videó oktatóanyagok elérhető. Kiterjedtebb (de kevésbé széles) szöveges oktatóanyagok az Unity számára a CatLikeCoding webhelyen is elérhetők.

Végül, ha kérdései vannak a dokumentáción vagy oktatóanyagokon kívül, akkor konkrét kérdéseket tehet fel a címen válaszok.Unity3d.com . Ne feledje, hogy a válaszokat önkéntesek adják, ezért tartsa tiszteletben az idejüket, és először keresse meg az adatbázist, hogy megbizonyosodjon arról, hogy kérdése még nem kapott választ.

9. A játék felépítése / önálló alkalmazás összeállítása

Ha olyasmit épített, amire büszke (vagy befejezte a gyakorlatban kissé makacs Pong -példánk klónozását), akkor itt az ideje, hogy eltávolítsa a játékot a szerkesztőből, és olyasmivé alakítsa, amelyet közzétehet az interneten és kényszeríthet barátaival és családjával játszani. Ehhez önálló alkalmazást kell létrehoznia. A jó hír az, hogy a Unity -ben ez nagyon -nagyon egyszerű. Van azonban néhány lehetséges csuklás, amire érdemes vigyázni.

Kezdésként ne feledje, hogy csak hibamentes projektet építhet fel. Ebből a célból győződjön meg arról, hogy a konzol építés közben nyitva van -e: vannak olyan hibafeltételek, amelyeket a játék figyelmen kívül hagy a szerkesztőben, de továbbra is megszakítja a létrehozási kísérletet. Ez csak a hibaüzeneteket dobja a konzolra, és nincs látható eredmény a képernyőn, ami frusztráló lehet, ha elfelejti ellenőrizni. Miután azonban hibátlanul összeállította a játékot, választhat Építési beállítások alatt Fájl menüben, vagy nyomja meg a gombot Ctrl > Váltás

> B . Ez egy egyszerű párbeszédablakot jelenít meg, amely lehetővé teszi a játék több platformra történő felépítését.

A folyamat onnan magától értetődő: válassza ki a lehetőségeket, és nyomja meg épít ; a játék egy könyvtárat fog kérni, ahová telepíteni kell, és a végrehajtható és az adatkönyvtárat is oda helyezi. Ez a két fájl összecsomagolható és szétosztható (csak ügyeljen arra, hogy ne a Unity demójába épített játékért fizessen, mert ez sérti a szolgáltatási feltételeket).

10. Záró megjegyzések

Mint minden játékfejlesztő eszköznél, a Unity sikerének kulcsa az iteratív fejlesztés. Könnyen kezelhető lépésekben kell építkeznie - mindenképpen ambiciózusnak kell lennie, de apró darabokban kell ambiciózusnak lennie, és ezeket a darabokat úgy kell elrendeznie, hogy még akkor is, ha elmarad végső ambíciójától, legalább koherens lesz termék.

Először szerezze be a legfontosabb elemeket: gondoljon egy elképzelésre minimális életképes termék , a legegyszerűbb, legcsupaszabb dolog, amit létre tudsz hozni, és mégis úgy érzed, mintha valami értékeset értél volna el. Érje el ezt a minimális életképes projektet, mielőtt nagyobb ambíciókra térne.

Ez az oktatóanyag erős kiindulópontot nyújt Önnek, de a Unity tanulásának legjobb módja egy játék felépítése. Kezdje el építeni a játékot, töltse ki hiányosságait tudásában, amint azok felbukkannak, és a tudás fokozatos áramlása meglepően gyorsan elpusztítja azokat a dolgokat, amelyeket nem tud.

Ha mindezt elolvasta, és kissé túlterhelt a Unity által megkövetelt kódolás, feltétlenül nézze meg, hogyan tanulja meg a játékfejlesztést a Unity Learn segítségével és olvassa el útmutatónkat arról is, hogyan lehet videojátékokat készíteni programozás nélkül.

A Unity erőteljes eszköz, és egy kis felfedezéssel lenyűgöző projekteket építhet vele, mint amire számíthat. Ossza meg velünk, mit épített az alábbi megjegyzésekben - szívesen látjuk!

Részvény Részvény Csipog Email 3 módszer annak ellenőrzésére, hogy az e -mail valódi vagy hamis

Ha olyan e -mailt kapott, amely kissé kétesnek tűnik, mindig a legjobb ellenőrizni annak hitelességét. Íme három módszer annak megállapítására, hogy egy e -mail valódi -e.

Olvassa tovább
Kapcsolódó témák
  • Programozás
  • Programozás
  • Hosszú alak
  • Longform útmutató
A szerzőről Andre Infante(131 megjelent cikk)

A délnyugati székhelyű író és újságíró Andre garantáltan 50 Celsius fokig is működőképes marad, és tizenkét láb mélységig vízálló.

Továbbiak Andre Infante -tól

Iratkozzon fel hírlevelünkre

Csatlakozz hírlevelünkhöz, ahol technikai tippeket, értékeléseket, ingyenes e -könyveket és exkluzív ajánlatokat találsz!

Feliratkozáshoz kattintson ide