Redgate Hub

Antag att du gör ett rollspel och du behöver ett enklare sätt att tilldela statistik, egenskaper och mycket mer till olika objekt. Medan du kan använda Unity prefabs för att göra detta och sedan ändra värdena för varje enskild kopia av prefab, är detta ett obekvämt sätt att gå om uppgiften. Till att börja med använder den här metoden mer av ditt minne, något du kan behöva spara om du planerar att göra ett stort spel. Dessutom, om du måste göra några ändringar i spelobjekten, är det helt enkelt inte lika effektivt att göra det när det finns flera kopior av prefabs som ligger runt. Detta blir särskilt ett problem om du har ett större team att arbeta med, så du vill göra det lättare att ändra för andra teammedlemmar. Även om du inte är i ett lag, skulle den här metoden bara vara svårare för dig när du arbetar.

för att göra det lättare i en sådan situation har du Skripterbara objekt till ditt förfogande. Vad är Scriptable Objects? Enkelt uttryckt är de databehållare. Unity-utvecklaren skapar en grundläggande mall för dessa behållare och definierar vilken information varje objekt ska innehålla. Sedan skapas de skriptbara objekten från den mallen, som sedan används av Unity game objects. I exemplet ovan kan ett enda Skripterbart objekt användas för att definiera vad de olika egenskaperna för ett objekt är. Sedan refereras det skriptbara objektet av alla kopior av objektet. Innan om du ville ändra ett objekts statistik måste du ändra värdena för varje enskild kopia av objektet. Nu med skriptbara objekt behöver du bara ändra ett objekt (det skriptbara objektet) och alla objekt som får data från det skriptbara objektet ändras samtidigt.

det är alltid bra att se dessa saker i aktion, skapa ett nytt projekt. Detta projekt visar skriptbara objekt och hur de kan hjälpa dig. Projektet består av tre spelobjekt som är avsedda att representera tre tecken. Varje tecken ärver vissa värden från ett Skriptbart objekt. Dessa värden är maximal hälsa, attack, försvar, hastighet och ett namn och färg för karaktären. Ett enkelt användargränssnitt visar dessa värden så att du enkelt kan se resultaten av att tillämpa skriptbara objekt. Nu när du har ett slutmål är det dags att skapa.

Projektinställning

förutsatt att du kommer att implementera dessa ideer i ett nytt projekt, öppna Unity Hub-applikationen och skapa ett nytt projekt som visas i Figur 1.

Figur 1: Skapa ett nytt projekt

i nästa fönster, ge projektet valfritt namn och bestäm filvägen. Medan du kan utföra det här projektet i valfri mall, använder det här exemplet 3D-projektmallen som visas i Figur 2. Det rekommenderas att du använder den här mallen om du vill följa med.

Figur 2: Ställa in projektnamn, typ och plats

när projektet har skapats vill du bli organiserad. I ditt Resursfönster måste du skapa tre mappar genom att högerklicka på fönstret och navigera till Skapa-> mapp som visas i Figur 3 namnge mapparna Material, skriptbara objekt och skript.

Figur 3: Skapa en ny mapp

medan du är här är det bra att gå vidare och få tre material gjorda. Dessa material används för att ändra färgerna på olika objekt efter vilket material det Skripterbara objektet anger. För att skapa dessa material, navigera till mappen material och högerklicka igen, den här gången väljer du skapa-> Material. När du namnger materialet rekommenderas det att ge det ett namn som korrelerar med dess färg. Till exempel kan detta första material kallas rött. För att ställa in den här färgen måste du välja det nyskapade materialet och navigera till Inspektörsfönstret. I Albedo-fältet finns det en färgväljare som visas i Figur 4 som du kan klicka på för att öppna, ja, färgväljaren.

Figur 4: Öppna färgväljaren

färgen ändras antingen genom att flytta den lilla cirkeln i färgväljaren eller genom att direkt mata in RGB-värdena i den nedre halvan av färgväljarfönstret. I ovanstående exempel skulle RGB-värdena vara 255, 0, 0. Därefter ska du skapa ytterligare två material och tilldela sina färger. Detta exempel använder grönt och blått, men de kan vara vilken färg du väljer.

nu är det dags att skapa den faktiska scenen här där detta spel äger rum. Den består av två huvuddelar – det finns användargränssnittet som visar statistiken som ges till olika skriptbara objekt och de tre kapslarna som representerar tecken. ”Tecknen” är den enklaste delen, så du kan börja där. Allt du behöver göra är att gå till Hierarkifönstret, klicka på knappen Skapa och välj 3D-objekt – > kapsel som visas i Figur 5. Gör det tre gånger eller kopiera det första objektet, och du kan också ge dem namn om du vill. Detta exempel ger kapslarna namnen Char1, Char2, Char3.

Figur 5: skapa ett kapselobjekt

du måste ändra sina positioner så att de inte överlappar varandra. Om du vill ändra objektets position väljer du en i hierarkin och navigerar till komponenten transformera i Granskaren. Ändra sedan positioneringsfälten x, y och z för att flytta objekten dit du vill ha dem.

Figur 6: Redigera objektets position

Tabell 1 visar de exakta positionerna för alla tre kapslarna i det här exemplet.

Tabell 1: Alla objekt och deras positioner i världen

objekt

X Position

Y Position

Z Position

Char1

Char2

Char3

naturligtvis kan du justera något av dessa nummer om du vill. Nästa upp är användargränssnittet, som visar de värden som ges till Scriptable objekt. För att starta måste du klicka på hierarkins skapa-knapp men den här gången väljer du UI – > Canvas. Sedan, med det nya Canvas-objektet valt, klicka på knappen Skapa igen och välj den här gången skapa tomt barn. Slutligen klickar du en gång till på knappen Skapa och den här gången väljer du UI -> Text. Dra det nyskapade textobjektet till det tomma spelobjektet och duplicera Text fyra gånger med Ctrl + D så att det finns totalt fem textobjekt under GameObject. När du är klar ska din hierarki se ut som den i Figur 7.

Figur 7: den nuvarande hierarkin

varje textobjekt korrelerar med namnet och statistiken som ges via Scriptable Object, dessa statistik är maximal hälsa, attack, försvar och hastighet. Det är bra att ändra Textobjektnamnen till det värde det representerar. Så det första textobjektet kan kallas name_text, och det andra kan kallas attack_text, och så vidare. Dessutom måste du ändra standardtexten för att ge en visuell för hur användargränssnittet ser ut. Detta görs genom att navigera till textkomponenten i Granskaren och ändra Textvärdet. Och slutligen justera sina positioner så att de inte alla staplas ovanpå varandra. För att hålla det enkelt visar tabell 2 alla olika objektnamn och vad deras respektive värden ska vara.

Tabell 2: alla textobjekt och deras standardtext och positioneringsvärden

Byt namn på GameObject (Under Canvas) till något lite mer beskrivande, till exempel Char1Description, duplicera sedan det överordnade objektet. Byt namn på de två dubbletterna till Char2Description och Char3Description och placera de tre objekten, så att de ligger ovanför kapselobjekten. Detta exempel placerar Char1Description vid en X-position på -300, Char2Descrption vid 0 och Char3Position vid 250. Alla Y-och Z-positionsvärden lämnas vid 0.

det var lite av en lång väg, men projektet installationen är klar! Nu är det dags att koda och se hur Scriptable objekt skapas så långt programmering går. I fönstret tillgångar navigerar du till mappen Scripts och skapar två nya scripts genom att högerklicka och navigera till Create-> C# Script. Dessa skript ska kallas CharStats och LoadStats. När de har skapats börjar du i CharStats-skriptet, så dubbelklicka på det här skriptet för att öppna Visual Studio och komma igång med kodningsprocessen.

CharStats Script

för att skapa ett Skriptbart objekt måste du först lägga till menyn Create som du har använt för att skapa material och skript. För att göra detta använder du attributet CreateAssetMenu och anger standardfilnamn och plats i menyn. Du måste också ändra vilken klass CharStats ärver från. Som standard ärver varje C # – klass i ett Unity-projekt från MonoBehaviour, men det här skriptet måste ärva från ScriptableObject istället.

Lägg märke till när du ställer in menuName att ett snedstreck används, vilket indikerar användningen av undermenyer. Om du ville kan du ta bort snedstrecket och bara ha alternativet Spelarenheter närvarande utan att behöva navigera vidare genom menyn Skapa. I det här fallet lades undermenyn främst till för att visa att du kan organisera dina skriptbara objekt efter vad du vill. I det här fallet är menyn Skapa – > karaktärsskapande – > Spelarenheter. Om du vill kan du i ett annat Scriptable-objekt låta objektet skapas från samma sökväg men med ett annat skapa-alternativ, till exempel objekt.

att vara ett Scriptable objekt finns det inget behov av standard Start och Uppdateringsmetoder, så att du kan ta bort dem. Det här objektets primära syfte är att hålla data som ges till ett annat objekt, men två anpassade metoder skapas också för att visa hur skriptbara objekt kan göra mer än bara hålla data. På tal om data går koden för att definiera vilka data det här objektet innehåller så här:

1
2
3
4
5
6

offentligt sträng charName;
offentligt int-attack;
offentligt int-försvar;
offentligt int-hastighet;
allmän int maxHealth;
offentligt Material newColor;

som tidigare nämnts innehåller varje skriptbart objekt ett namn och några värden för fyra olika statistik. Den innehåller också information om vad karaktärens nya färg när det skriptbara objektet har tillämpats. Värdena för varje definieras i Unity editor, och naturligtvis kommer de att vara olika för varje objekt som skapas.

de två metoderna hålls enkla. Man skriver helt enkelt ett meddelande till felsökningskonsolen som säger att karaktären var laddad. Det här meddelandet skrivs ut i Start – metoden i LoadStats – skriptet.

1
2
3
4

allmänna void PrintMessage()
{
felsöka.Logga (”tecknet” + charName + ” har laddats.”);
}

RandomizeStats, den andra metoden gör exakt som namnet antyder. Det ändrar värdena för det Skripterbara objektet till ett slumptal mellan 1 och 20. Senare programmerar du projektet för att uppdatera användargränssnittet med de nya värdena automatiskt. Men det är inte ens den mest intressanta delen! Data i ett Skriptbart objekt är beständigt, vilket innebär att de kommer att förbli desamma för sessionen tills spelet är stängt. Detta är särskilt användbart om du gör ett spel som består av flera scener eftersom vanligtvis gamla objekt raderas och nya laddas om när en ny scen öppnas. Skripterbara objektdata är dock orörda i övergången mellan scener. Dessutom förblir data desamma när du arbetar i Unity-redigeraren tills redaktören själv är stängd. Detta innebär att ändringar som görs i data inom Skriptable objekt medan du kör spelet från redaktören är närvarande när du spelar spelet från redaktören igen, förutsatt att inga ändringar görs i själva data.

det här är allt som finns i CharStats-skriptet. Det kan tyckas ganska enkelt, men projektet är inte komplett. Du har programmerat möjligheten att skapa skriptbara objekt med egna metoder och data, men dina kapseltecken vet ingenting om dessa objekt. När det gäller dem finns inte de skriptbara objekten. För att åtgärda detta måste du öppna LoadStats-skriptet och koda det så att objekten kan använda ett Skripterbart objekts data för att uppdatera användargränssnittet och ändra färg. Koden ska se ut som Figur 8.

figur 8: komplett CharStats-skript

LoadStats-skript

oroa dig inte för att ändra var klassen detta skript ärver. Standard MonoBehaviour är precis vad som behövs. Inkludera istället ett nytt using-uttalande högst upp.

1
använda UnityEngine.UI;

inklusive detta kan du hämta texten från användargränssnittet och uppdatera dem för att visa värdena som finns i de skriptbara objekten. Nu, på klassen själv, börjar med variabler.

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;

som nämnts i kommentaren är variabeln charStat det Skripterbara objektet som används. Du kan se här att få dessa Scriptable objekt skiljer sig inte från att förklara någon annan variabel. Senare i skriptet får du variablerna och metoderna i objektet och använder dem i det här skriptet. Faktum är att PrintMessage – metoden som finns i CharStats används i LoadStats Start – metoden just nu.

1
2
3
4
5

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

precis som med alla andra externa skript behöver du bara ringa charStat följt av PrintMessage för att få metoden som finns i det skriptbara objektet. Detta kan vara särskilt användbart om du har objekt som alla har liknande eller identiska beteenden. I det här fallet kan det också vara användbart för utvecklaren att, som i det här exemplet, skriva ut meddelanden till felsökningskonsolen. Om något skulle gå fel och du misstänkte att det skriptbara objektet var fel, kan du använda felsökningskonsolmeddelandena för att hitta problemet.

just nu finns det ett fel som säger att DisplayStats inte existerar. För att åtgärda detta, navigera under Update – metoden och Lägg till den här koden.

här är där de värden som lagras i Scriptable objektet kommer ut för att spela. Alla de textvariabler som deklarerats tidigare? De får data att visa, så de frågetecken du ställer in i redigeraren visar nu något värde. Även om det inte är en stat, ändras karaktärens färg här genom att ringa currentColor.material och ställa in det material som anges i det Skripterbara objektet.

den andra charStats metoden, RandomizeStats, har ännu inte sett användning, så du borde hitta en plats för den. I metoden Update kontrollerar programmet om mellanslagstangenten har tryckts in. Om det har, kallar det RandomizeStats och ger det Skripterbara objektet några nya värden. Då kallas DisplayStat igen och de nya värdena visas.

1
2
3
4
5
6
7
8

ogiltig Uppdatering()
{
om (ingång.GetKeyDown (Nyckelkod.Utrymme))
{
charStat.RandomizeStats();
DisplayStats();
}
}

detta avslutar skriptet LoadStats och slutar därmed kodningsdelen av detta projekt. Koden ska se ut som Figur 9. Allt som är kvar att göra nu är att skapa några skriptbara objekt, tillämpa dem på kapselobjektet med LoadStats och prova den här nya funktionaliteten. Naturligtvis, var noga med att spara ditt arbete innan du återvänder till Unity editor.

Figur 9: Complete LoadStats script

slutföra projektet

för att använda skriptbara objekt måste du först skapa dem. I fönstret resurser, under mappen Scriptable Objects, högerklickar du och navigerar till Skapa-> Teckenskapande- > Spelarenheter som visas i Figur 10.

Figur 10: Skapa en ny spelarenhet, ett Skripterbart objekt

du kan namnge objektet vad du vill. Exemplet baserar dessa objekt från traditionella rollspel, så det kommer att ha en krigare, jägare och mage. Markera det nya objektet, navigera sedan till Inspektörsfönstret och ge värden till de olika fälten. För att fylla i fältet ny färg, navigera bara till mappen material och klicka och dra önskat material till fältet som visas i Figur 11.

Figur 11: Ställa in objektets nya färgmaterial

skapa ytterligare två skriptbara objekt och gör detsamma som tidigare, vilket ger dem olika värden för de olika fälten. När det är klart flyttar du till Hierarkifönstret och väljer ett av char-objekten. Ge dem sedan LoadStats-skriptet som en komponent genom att navigera till scriptmappen i resursfönstret, hitta LoadStats och dra det till Inspektörsfönstret som visas i Figur 12.

Figur 12: bifoga LoadStats-skript till ett objekt

Därefter måste du fylla i LoadStats-fälten. För att börja, hitta ett Skriptbart objekt som du vill använda på ditt första ”tecken” och tillämpa det på fältet Char Stat som visas i figur 13. Kom ihåg att Scriptable-objekt finns i fönstret resurser under Scriptable-objekt.

figur 13: inställning där Scriptable Object Char1 ska hämta data

fyll nu i textfälten. I hierarkin expanderar du Canvas följt av att expandera karaktärsbeskrivningsobjektet som korrelerar med det du för närvarande redigerar. Till exempel innebär redigering av Char1 att du vill expandera Char1Description. Ta sedan textobjekten som finns under det överordnade objektet och tillämpa dem på motsvarande fält som visas i figur 14.

figur 14: ställa in alla textfält

när textfälten har fyllts i behöver du bara få objektets Maskrenderare så att du har tillgång till materialet och därmed tillåter färgförändringen. Allt du behöver göra är att klicka och dra Mesh Renderer-komponenten i Inspektörsfönstret och dra den till det aktuella färgfältet som visas om figur 15.

figur 15: Ställa in det aktuella färgfältet

upprepa de föregående stegen för de andra två teckenobjekten, och du har slutfört projektet. När du är klar klickar du på play-knappen högst upp i redigeraren och observerar eftersom tre nästan identiska objekt har mycket olika värden kopplade till dem. Om något av någon anledning inte ser rätt ut, skulle det första stället att kontrollera vara dina skriptbara objekt och försäkra dig om att värdena och färgerna som visas är de du ville ha. Kom ihåg att dubbelkolla det nya färgfältet också.

alla dessa siffror och deras färger kommer från skript objekt, som själva kommer från en enda mall. Du kan också göra ännu mer Skripterbara objekt och ansluta dem till Char Stat-fältet i ett objekts Laststatistikkomponent och ha en helt annan karaktär. När du kör spelet (figur 16) bör du se ett meddelande i felsökningskonsolen i det nedre vänstra hörnet som anger att ett tecken har laddats. Det finns två andra meddelanden, men du kan bara se ett meddelande utan att öppna hela felsökningskonsolen, som finns i Window -> General -> Console. Du kan också trycka på mellanslagstangenten för att få lite helt ny statistik för dina karaktärer. Om du stoppar spelet och kör det igen, kommer du att märka de värden du slumpmässigt genererade kvarstår, vilket visar persistensen av Skripterbara objekt. De återgår till sina ursprungliga värden antingen genom att manuellt ange värdena i objekten själv eller genom att stänga och öppna redigeraren igen.

figur 16: Scriptable objekt i aktion

slutsats

Naturligtvis kan du skapa flera typer av Scriptable objekt för många typer av objekt. Detta exempel visade deras användning via teckenklasser, men det finns också ovannämnda objekt exempel. Det kan till och med användas för mycket mindre föremål, till exempel power-ups som påminner om de som finns i arkadspel. Genom att använda skriptbara objekt skapar du ett rent, enkelt system där du kan ändra och ladda data med några tangenttryckningar och se resultaten nästan direkt. Att använda skriptbara objekt betyder också färre skript att skapa, eftersom du kan använda en mall för flera objekt. Oavsett om ditt projekt är stort eller litet, eller om ditt team har många medlemmar eller bara dig själv, kan skriptbara objekt göra allas utveckling lite enklare.

You might also like

Lämna ett svar

Din e-postadress kommer inte publiceras.