Redgate Hub

tegyük fel, hogy csinálsz egy szerepjáték videojáték, és szüksége van egy egyszerűbb módja annak, hogy rendelni statisztikák, tulajdonságok, és még sok más a különböző elemeket. Bár ehhez használhatja a Unity előregyártókat, majd megváltoztathatja az előregyártott minden egyes példányának értékeit, ez kényelmetlen módszer a feladat elvégzésére. Kezdőknek, ez a módszer több memóriát használ fel, amit meg kell őriznie, ha nagy játékot tervez. Ezen túlmenően, ha bármilyen változtatást kell végrehajtania a játékon belüli objektumokon, egyszerűen nem olyan hatékony ezt megtenni, ha az előregyártottak több példánya fekszik. Ez különösen akkor válik problémává, ha nagyobb csapattal dolgozik együtt, ezért szeretné megkönnyíteni a dolgok megváltoztatását a többi csapattag számára. Még akkor is, ha nem vagy csapatban, ez a módszer csak nehezebb lenne neked, amikor dolgozol.

ahhoz, hogy a dolgok könnyebb egy ilyen helyzetben, akkor Scriptable tárgyak az Ön rendelkezésére. Mik azok a leírható tárgyak? Egyszerűen fogalmazva, ezek adattárolók. A Unity fejlesztő létrehoz egy alapsablont ezekhez a tárolókhoz, meghatározva, hogy az egyes objektumoknak milyen információkat kell tartalmazniuk. Ezután a Szkriptálható objektumok abból a sablonból jönnek létre, amelyeket az Unity játékobjektumok használnak. A fenti példában egyetlen Szkriptelhető objektum használható annak meghatározására, hogy mi az elem különböző tulajdonságai. Ezután a Szkriptálható objektumra az elem összes példánya hivatkozik. Mielőtt meg akarta változtatni egy elem statisztikáját, meg kell változtatnia az elem minden egyes példányának értékeit. Most Scriptable objektumok, csak meg kell változtatni egy objektum (a Scriptable objektum), és az összes objektum kap adatokat, hogy Scriptable objektum változik ugyanabban az időben.

mindig hasznos látni ezeket a dolgokat működés közben, új projektet létrehozni. Ez a projekt bemutatja a Szkriptálható objektumokat, és hogyan segíthetnek Önnek. A projekt három játékobjektumból áll, amelyek három karaktert képviselnek. Minden karakter örököl néhány értéket egy Szkriptálható objektumtól. Ezek az értékek a maximális egészség, támadás, védelem, sebesség, valamint a karakter neve és színe. Egy egyszerű felhasználói felület megjeleníti ezeket az értékeket, így könnyen látni az eredményeket alkalmazása Scriptable tárgyakat. Most, hogy van egy végső célod, itt az ideje, hogy létrehozz.

projektbeállítás

feltételezve, hogy ezeket az ötleteket egy új projektben fogja megvalósítani, nyissa meg a Unity Hub alkalmazást, és hozzon létre egy új projektet az 1.ábrán látható módon.

1. ábra: új projekt létrehozása

a következő ablakban adja meg a projektnek a választott nevet, és döntse el a fájl elérési útját. Bár ezt a projektet bármilyen sablonban végrehajthatja, ez a példa a 3D projektsablont használja a 2.ábrán látható módon. Javasoljuk, hogy használja ezt a sablont,ha követni szeretné.

2. ábra: a projekt nevének, típusának és helyének beállítása

a projekt létrehozása után meg kell szervezni. A Kellékek ablakban három mappát kell létrehoznia úgy, hogy jobb egérgombbal kattint az ablakra, és navigál a Create-> mappához, amint az a 3.ábrán látható.

3. ábra: Új mappa létrehozása

amíg itt vagy, jó ötlet, hogy három anyagot készítsen. Ezeket az anyagokat arra használják, hogy megváltoztassák a különböző objektumok színét, bármilyen anyagot követve, amelyet a Szkriptelhető objektum meghatároz. Ezen anyagok létrehozásához keresse meg az anyagok mappát, majd kattintson ismét a jobb gombbal, ezúttal a Create-> Material lehetőséget választva. Az anyag elnevezésekor ajánlott olyan nevet adni, amely korrelál a színével. Például ez az első anyag vörösnek nevezhető. A szín beállításához ki kell választania az újonnan létrehozott anyagot, és navigálnia kell az Inspector ablakhoz. Az Albedo mezőben, van egy színválasztó az ábrán látható 4 rákattinthat a, jól, színválasztó.

4. ábra: a színválasztó megnyitása

a szín megváltozik a színválasztóban lévő kis kör mozgatásával vagy az RGB értékek közvetlen bevitelével a színválasztó ablak alsó felében. A fenti példában az RGB értékek 255, 0, 0. Ezt követően még két anyagot kell létrehoznia, és hozzá kell rendelnie a színeket. Ez a példa zöldet és kéket használ,de bármilyen szín lehet.

most jön az idő, hogy megteremtse a tényleges jelenet ez, ahol ez a játék zajlik. Két fő részből áll – van egy felhasználói felület, amely megjeleníti a különböző szkriptálható objektumok statisztikáit, valamint a karaktereket ábrázoló három kapszulát. A” karakterek ” a legegyszerűbb rész, így ott kezdheti. Mindössze annyit kell tennie, hogy menjen a hierarchia ablakba, kattintson a Létrehozás gombra, és válassza a 3D objektum -> kapszula az 5.ábrán látható. Tegye ezt háromszor, vagy másolja az első objektumot, és ha akarja, neveket is adhat nekik. Ez a példa a kapszulák nevét adja Char1, Char2, Char3.

5. ábra: kapszula objektum létrehozása

meg kell változtatnia a helyzetüket, hogy ne fedjék egymást. Az objektum pozíciójának módosításához válasszon egyet a hierarchiában, majd keresse meg az átalakítási összetevőt az Ellenőrben. Ezután módosítsa az x, y és z pozicionálási mezőket Az objektumok áthelyezéséhez a kívánt helyre.

6. ábra: Az objektum pozíciójának szerkesztése

az 1. táblázat mindhárom kapszula pontos helyzetét mutatja ebben a példában.

1. táblázat: Minden tárgy és pozíciójuk a világban

tárgy

X pozíció

y pozíció

Z pozíció

Char1

Char2

Char3

természetesen nyugodtan állítsa be ezeket a számokat, ha akarja. Következik a felhasználói felület, amely megjeleníti a Szkriptálható objektumoknak adott értékeket. A kezdéshez kattintson a hierarchia létrehozása gombra, de ezúttal válassza az UI -> Canvas lehetőséget. Ezután az új vászon objektum kijelölésével kattintson ismét a Létrehozás gombra, és ezúttal válassza az üres gyermek létrehozása lehetőséget. Végül még egyszer kattintson a Létrehozás gombra, és ezúttal válassza az UI -> Text lehetőséget. Húzza az újonnan létrehozott szövegobjektumot az üres játékobjektumra, és másolja a szöveget négyszer a Ctrl + D billentyűkombinációval úgy, hogy összesen öt szövegobjektum legyen a GameObject alatt. Miután elkészült, a hierarchiának úgy kell kinéznie, mint a 7.ábrán.

7. ábra: az aktuális hierarchia

minden szövegobjektum korrelál a Szkriptálható objektumon keresztül megadott névvel és statisztikákkal, ezek a statisztikák a maximális egészség, támadás, védelem és sebesség. Hasznos, ha a szöveges objektumneveket az általa képviselt értékre változtatja. Tehát az első szöveges objektumot nevezhetjük name_text-nek, a második pedig attack_text-nek stb. Ezenkívül módosítania kell az alapértelmezett szöveget, hogy megjelenítse a felhasználói felület megjelenését. Ez úgy történik, hogy az Inspector Szövegösszetevőjéhez navigál, és megváltoztatja a szöveg értékét. Végül állítsa be a helyzetüket úgy, hogy ne legyenek egymásra rakva. Ennek megkönnyítése érdekében a 2. táblázat bemutatja az összes különböző objektumnevet, és hogy milyen értékeknek kell lenniük.

2.táblázat: az összes szövegobjektum és azok alapértelmezett szöveg-és helymeghatározási értéke

nevezze át a GameObject-et (vászon alatt) valami leíróbbra, például Char1Description-re, majd másolja a szülőobjektumot. Nevezze át a két másolatot Char2Description és Char3Description névre, és helyezze el a három objektumot úgy, hogy azok a kapszula objektumok felett legyenek. Ez a példa a Char1Description -300 X pozícióba helyezi, a Char2Descrption-t 0-ra, a Char3Position-t pedig 250-re. Minden Y és Z pozíció értéke 0 marad.

ez egy kicsit hosszú út volt, de a Projekt beállítása befejeződött! Most jön az idő, hogy kódolni, és látni, hogy Scriptable objektumok jönnek létre, amennyire programozás megy. A Kellékek ablakban keresse meg a szkriptek mappát, és hozzon létre két új szkriptet a jobb egérgombbal kattintva, majd a Create-> C# Script elemre navigálva. Ezeket a szkripteket CharStats-nak és LoadStats-nak kell nevezni. Miután ezeket létrehozták, a CharStats szkriptben indul, ezért kattintson duplán erre a szkriptre a Visual Studio megnyitásához és a kódolási folyamat megkezdéséhez.

CharStats Script

Scriptable objektum létrehozásához először hozzá kell adnia a Create menühöz, amelyet anyagok és szkriptek létrehozásához használt. Ehhez használja a CreateAssetMenu attribútumot, és adja meg az alapértelmezett fájlnevet és helyet a menüben. Ezenkívül meg kell változtatnia, hogy a CharStats osztály melyik osztályból örököl. Alapértelmezés szerint a Unity projekt minden C# osztálya MonoBehaviour – től örököl, de ennek a szkriptnek inkább ScriptableObject – től kell örökölnie.

a menuName beállításnál vegye figyelembe, hogy perjelet használ, ami az almenük használatát jelzi. Ha szeretné, eltávolíthatja a perjelet, és csak a játékos egységek opciót jelenítheti meg anélkül, hogy tovább kellene Navigálnia a Létrehozás menüben. Ebben az esetben az almenüt elsősorban annak bemutatására adták hozzá, hogy a Szkriptálható objektumokat tetszés szerint rendezheti. Ebben az esetben a menü létrehozása -> karakter létrehozása -> játékos egységek. Ha akarta, egy másik Szkriptelhető objektumban létrehozhatja az objektumot ugyanarról az útvonalról, de egy másik létrehozási opcióval, például elem.

Scriptable objektumként nincs szükség az alapértelmezett Start és frissítési módszerekre, így törölheti azokat. Ennek az objektumnak az elsődleges célja egy másik objektumnak adott adatok tárolása, de két egyéni módszer is létrejön annak bemutatására, hogy a Szkriptelhető objektumok hogyan képesek többre, mint pusztán az adatok tárolására. Apropó adatok, az objektum által tárolt adatok meghatározására szolgáló kód így megy:

1
2
3
4
5
6

nyilvános karakterlánc charName;
nyilvános Int támadás;
nyilvános Int védelem;
nyilvános Int sebesség;
nyilvános int maxHealth;
nyilvános anyag newColor;

mint korábban említettük, minden scriptable objektum tartalmaz egy nevet és néhány értéket négy különböző statisztikához. Információkat tartalmaz arról is, hogy mi a karakter új színe, miután a Szkriptálható objektumot alkalmazták. Az egyes értékek a Unity szerkesztőben vannak meghatározva, és természetesen minden létrehozott objektum esetében eltérőek lesznek.

a két módszer egyszerű. Az egyik egyszerűen kinyomtat egy üzenetet a hibakereső konzolra, mondván, hogy a karakter betöltődött. Ez az üzenet a Start módszer a LoadStats script.

1
2
3
4

nyilvános void PrintMessage()
{
hibakeresés.Log(“a” + charName + ” karakter betöltve.”);
}

RandomizeStats, a második módszer pontosan úgy működik, ahogy a neve is sugallja. Ez megváltoztatja az értékeket a Scriptable objektum egy véletlen szám 1 és 20 között. Később beprogramozza a projektet, hogy automatikusan frissítse a felhasználói felületet az új értékekkel. De ez nem is a legérdekesebb rész! A Szkriptálható objektum adatai állandóak, ami azt jelenti, hogy a játék bezárásáig ugyanazok maradnak a munkamenetben. Ez különösen akkor hasznos, ha olyan játékot készít, amely több jelenetből áll, mivel általában a régi tárgyakat törlik, az újakat pedig új jelenet megnyitásakor töltik be újra. A Szkriptálható Objektumadatok azonban érintetlenek a jelenetek közötti átmenet során. Ezenkívül az adatok változatlanok maradnak, miközben a Unity szerkesztőben dolgoznak, amíg maga a szerkesztő bezáródik. Ez azt jelenti, hogy a Scriptable Objects adataiban a játék szerkesztőből történő futtatása közben végrehajtott módosítások akkor jelennek meg, ha a játékot újra a szerkesztőből játssza le, feltéve, hogy magában az adatban nem történik változás.

ez minden van, hogy a CharStats script. Lehet, hogy meglehetősen egyszerűnek tűnik, de a projekt nem teljes. Beprogramozta azt a képességet, hogy Szkriptálható objektumokat készítsen saját módszereivel és adataival, de a kapszula karakterei semmit sem tudnak ezekről az objektumokról. Ami őket illeti, a leírható tárgyak nem léteznek. Ennek kijavításához meg kell nyitnia a LoadStats parancsfájlt, és kódolnia kell, hogy az objektumok egy Szkriptálható objektum adatait használhassák a felhasználói felület frissítéséhez és színük megváltoztatásához. A kódnak hasonlónak kell lennie a 8.ábrához.

8. ábra: teljes CharStats script

LoadStats Script

ne aggódj változó, ahol az osztály ez a script örökli. Az alapértelmezett MonoBehaviour pontosan az, amire szükség van. Ehelyett tegyen egy új using utasítást a tetejére.

1
az UnityEngine használata.UI;

beleértve ezt lehetővé teszi, hogy a szöveget a felhasználói felület, és frissítse őket, hogy megjelenjen az értékek találhatók a Scriptable tárgyak. Most, magára az osztályra, kezdve a változókkal.

1
2
3
4
5
6
7
8

// scriptable object
public CharStats charStat;
public Text nameText;
public Text attackText;
public Text defenseText;
public Text speedText;
public Text maxHealthText;
public MeshRenderer currentColor;

amint azt a megjegyzés megjegyzi, a charStat változó a használt Szkriptálható objektum. Itt láthatja, hogy ezeknek a Szkriptálható objektumoknak a megszerzése nem különbözik bármely más változó deklarálásától. Később a szkriptben megkapja a változókat és metódusokat az objektumon belül, és használja őket ebben a szkriptben. Valójában a PrintMessage módszer található CharStats használják LoadStats Start módszer most.

1
2
3
4
5

void Start()
{
DisplayStats ();
charStat.PrintMessage();
}

mint minden más külső szkriptnél, csak annyit kell tennie, hogy hívja a charStat – t, majd a PrintMessage – et, hogy megkapja az adott Szkriptálható objektumban található módszert. Ez különösen hasznosnak bizonyulhat, ha olyan tárgyai vannak, amelyek mindegyike hasonló vagy azonos viselkedéssel rendelkezik. Ebben az esetben a fejlesztő számára is hasznos lehet, mint ebben a példában, üzeneteket nyomtatni a hibakeresési konzolra. Ha valami elromlik, és gyanítja, hogy a Szkriptálható objektum hibás, akkor a hibakeresési konzol üzenetei segítségével megkeresheti a problémát.

most, van egy hiba mondván DisplayStats nem létezik. A javításhoz navigáljon a Update módszer alatt, és adja hozzá ezt a kódot.

itt jelenik meg a Szkriptálható objektumban tárolt értékek lejátszása. Azok a szövegváltozók, amelyeket korábban deklaráltak? Meg fogják adni az adatokat a megjelenítéshez, így a szerkesztőben beállított kérdőjelek most valamilyen értéket jelenítenek meg. Továbbá, bár ez nem igazán stat, önmagában, a karakter színe itt megváltozik a currentColor.material meghívásával és a Szkriptálható objektum anyagkészletének beállításával.

a második charStats módszer, RandomizeStats, még nem látott használatot, ezért meg kell találnia a helyét. A Update módszerben a program ellenőrzi, hogy megnyomta-e a szóközt. Ha van, akkor meghívja a RandomizeStats – et, és új értékeket ad a Szkriptálható objektumnak. Ezután a DisplayStat ismét meghívásra kerül, és megjelennek az új értékek.

1
2
3
4
5
6
7
8

érvénytelen frissítés()
{
if (bemenet.GetKeyDown (Kulcskód.Tér))
{
charStat.RandomizeStats ();
DisplayStats();
}
}

ezzel befejeződik a LoadStats szkript, ezzel befejezve a projekt kódolási részét. A kódnak hasonlónak kell lennie a 9.ábrához. Most már csak annyit kell tennie, hogy létrehoz néhány Szkriptelhető objektumot, alkalmazza őket a kapszula objektumra a LoadStats használatával, és próbálja ki ezt az új funkciót. Természetesen mindenképpen mentse el munkáját, mielőtt visszatérne az Unity szerkesztőhöz.

9. ábra: töltse ki a LoadStats szkriptet

a projekt befejezése

Szkriptálható objektumok használatához először létre kell hoznia őket. Az eszközök ablakban a Scriptable Objects mappában kattintson a jobb gombbal a Create -> Character Creation -> Player Units elemre a 10.ábrán látható módon.

10. ábra: Létrehozása egy új játékos egység, egy Scriptable Object

akkor nevet az objektum, amit akar. A példa ezeket az objektumokat a hagyományos szerepjáték-osztályokra alapozza, így harcos, vadász és mágus lesz. Jelölje ki az új objektumot, majd keresse meg az Inspector ablakot, és adja meg a különböző mezők értékeit. Az új színmező kitöltéséhez keresse meg az anyagok mappát, majd kattintson a kívánt anyagra, majd húzza a mezőbe a 11.ábrán látható módon.

11. ábra: Az objektum új Színanyagának beállítása

hozzon létre még két Szkriptelhető objektumot, és tegye ugyanazt, mint korábban, különböző értékeket adva nekik a különböző mezőkhöz. Ha ez megtörtént, lépjen a hierarchia ablakba, és válassza ki az egyik char objektumot. Ezután adja meg nekik a LoadStats parancsfájlt komponensként úgy, hogy navigál a szkriptek mappába az eszközök ablakban, megtalálja a LoadStats-ot, majd húzza az Inspector ablakba a 12.ábrán látható módon.

12. ábra: a LoadStats parancsfájl csatolása egy objektumhoz

ezután ki kell töltenie a LoadStats mezőket. Először keressen egy Szkriptálható objektumot, amelyet használni szeretne az első “karakterén”, és alkalmazza azt a Char Stat mezőre a 13.ábrán látható módon. Ne feledje, hogy a Szkriptelhető objektumok az eszközök ablakban találhatók a Szkriptelhető objektumok alatt.

ábra 13: beállítás, ahol a Scriptable objektum Char1, hogy az adatok

most töltse ki a szövegmezőket. A hierarchiában kibontja a vásznat, majd kibővíti a karakterleírás objektumot, amely korrelál az éppen szerkesztett objektummal. Például a Char1 szerkesztése azt jelenti, hogy bővíteni szeretné a Char1Description alkalmazást. Ezután vegye ki a szülőobjektum alatt található szöveges objektumokat, és alkalmazza azokat a megfelelő mezőkre a 14. ábrán látható módon.

14. ábra: az összes Szövegmező beállítása

a szövegmezők kitöltése után csak be kell szereznie az objektum hálós megjelenítőjét, így hozzáférhet az anyaghoz, ezáltal lehetővé téve a színváltozást. Mindössze annyit kell tennie, hogy kattintson és húzza a Mesh Renderer komponenst Az Inspector ablakban, és húzza az aktuális Színmezőbe, amint az a 15.ábrán látható.

15. ábra: Az aktuális színmező beállítása

ismételje meg az előző lépéseket a másik két karakterobjektumnál, és befejezi a projektet. Ha készen áll, kattintson a szerkesztő tetején található Lejátszás gombra, és figyelje meg, hogy három közel azonos objektumhoz nagyon különböző értékek vannak csatolva. Ha valamilyen oknál fogva valami nem néz ki jól, az első hely, hogy ellenőrizze lenne a Scriptable tárgyakat, és biztosítsa magát, hogy az értékek és a színek jelennek meg az is, amit akart. Ne felejtse el még egyszer ellenőrizni az új Színmezőt is.

ezek a számok és színeik írható objektumokból származnak, amelyek maguk is egyetlen sablonból származnak. Lehet, hogy még több Scriptable tárgyak is, és csatlakoztassa őket a Char Stat mező egy objektum Load Stats komponens, és egy nagyon eltérő karaktert. A játék futtatása közben (16. ábra) a bal alsó sarokban lévő hibakeresési konzolban egy üzenetet kell látnia, amely jelzi, hogy egy karakter betöltődött. Két másik üzenet van, de csak egy üzenetet láthat a teljes hibakeresési konzol megnyitása nélkül, amely a Window -> General -> Console oldalon található. Azt is nyomja meg a szóköz, hogy néhány teljesen új statisztika a karakterek. Ha leállítja a játékot, majd futtassa újra, észreveszi, hogy a véletlenszerűen generált értékek továbbra is fennállnak, bemutatva a Szkriptálható objektumok kitartását. Visszatér az eredeti értékekhez úgy, hogy manuálisan beírja az értékeket az objektumokba, vagy bezárja és újra megnyitja a szerkesztőt.

16. ábra: Scriptable objektumok akcióban

következtetés

természetesen többféle Scriptable objektumot hozhat létre sokféle objektumhoz. Ez a példa karakterosztályokon keresztül mutatta be használatukat, de ott van a fent említett elemek példája is. Még sokkal kisebb tárgyakhoz is használható, például az arcade játékokban találhatókra emlékeztető bekapcsolásokhoz. A Scriptable objektumok használatával tiszta, egyszerű rendszert hozhat létre, ahol néhány billentyűleütéssel megváltoztathatja és betöltheti az adatokat, és szinte azonnal láthatja az eredményeket. A Szkriptálható objektumok használata kevesebb szkript létrehozását is jelenti, mivel egy sablont több objektumhoz is használhat. Függetlenül attól, hogy a projekt nagy vagy kicsi, vagy hogy a csapatnak sok tagja van, vagy csak te magad, a Szkriptálható objektumok mindenki fejlődését megkönnyíthetik.

You might also like

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.