Anta at du lager et rollespill, og du trenger en enklere måte å tildele statistikk, egenskaper og mye mer til ulike elementer. Mens Du kan bruke Unity prefabs til å gjøre dette og deretter endre verdiene for hver enkelt kopi av prefab, er dette en ubeleilig måte å gå om oppgaven. For det første bruker denne metoden mer av minnet ditt, noe du kanskje trenger å spare hvis du planlegger å lage et stort spill. I tillegg, hvis du må gjøre noen endringer i objekter i spillet, er det rett og slett ikke så effektiv å gjøre det når det er flere kopier av prefabs liggende rundt. Dette blir spesielt et problem hvis du har et større team å jobbe med, så du vil gjøre ting enklere å endre for andre gruppemedlemmer. Selv om du ikke er i et lag, vil denne metoden bare være vanskeligere på deg mens du jobber.
for å gjøre ting enklere i en situasjon som dette, har Du Scriptable Objekter til din disposisjon. Hva Er Scriptable Objects? Enkelt sagt, de er databeholdere. Unity-utvikleren lager en grunnleggende mal for disse beholderne, og definerer hvilken informasjon hvert objekt skal inneholde. Deretter Opprettes De Skriptbare Objektene fra den malen, som deretter brukes Av Unity game objects. I eksemplet ovenfor kan et Enkelt Scriptable Objekt brukes til å definere hva de forskjellige egenskapene til et element er. Da Er Det Scriptable Objektet referert til av alle kopier av elementet. Før hvis du ønsket å endre en vares statistikk, må du endre verdiene for hver enkelt kopi av elementet. Nå Med Prosedyre Objekter, trenger du bare å endre ett objekt (Prosedyre Objekt) og alle objekter får data fra Det Prosedyre Objekt endring samtidig.
det er alltid nyttig å se disse tingene i aksjon, opprett et nytt prosjekt. Dette prosjektet viser Av Scriptable Objekter og hvordan de kan hjelpe deg. Prosjektet består av tre spillobjekter ment å representere tre tegn. Hvert tegn arver noen verdier fra Et Scriptable Objekt. Disse verdiene er maksimal helse, angrep, forsvar, hastighet, og et navn og farge for karakteren. Et enkelt brukergrensesnitt viser disse verdiene slik at du enkelt kan se resultatene av Å bruke Prosedyre Objekter. Nå som du har et sluttmål, er det på tide å skape.
Prosjektoppsett
Forutsatt at du skal implementere disse ideene i et nytt prosjekt, åpner Du Unity Hub-programmet og oppretter et nytt prosjekt som vist I Figur 1.
Figur 1: Opprette et nytt prosjekt
i neste vindu gir du prosjektet et hvilket som helst navn du velger og bestemmer deg for filbanen. Mens du kan utføre dette prosjektet i en mal, bruker dette eksemplet 3d-prosjektmalen som vist I Figur 2. Det anbefales at du bruker denne malen hvis du ønsker å følge med.
Figur 2: Angi prosjektnavn, type og plassering
når prosjektet er opprettet, vil du bli organisert. I Aktiva-vinduet må du opprette tre mapper ved å høyreklikke på vinduet Og navigere For Å Opprette -> Mappe som vist I Figur 3 Navn mappene Materialer, Skriptbare Objekter Og Skript.
Figur 3: Opprette en ny mappe
Mens du er her, er det en god ide å gå videre og få tre materialer laget. Disse materialene brukes til å endre fargene på forskjellige objekter etter hva materialet Scriptable Objektet angir. For å lage disse materialene, naviger Til Materialmappen og høyreklikk igjen, denne gangen velger Du Create – > Material. Når du navngir materialet, anbefales det å gi det et navn som korrelerer med fargen. For eksempel kan Dette første materialet bli kalt Rødt. For å angi denne fargen må du velge det nyopprettede materialet og navigere Til Inspektørvinduet. I Albedo-feltet er det en fargevelger vist i Figur 4 du kan klikke på for å åpne, vel, fargevelgeren.
Figur 4: Åpne fargevelgeren
fargen endres enten ved å flytte den lille sirkelen i fargevelgeren eller ved å legge inn RGB-verdiene direkte i den nedre halvdelen av fargevelgeren. I eksemplet ovenfor vil RGB-verdiene være 255, 0, 0. Etter dette bør du lage to materialer og tildele farger. Dette eksemplet bruker grønn og blå, men de kan være hvilken som helst farge du velger.
nå kommer tiden til å skape den faktiske scenen dette hvor dette spillet finner sted. Den består av to hoveddeler – det er brukergrensesnittet som viser statistikken gitt til ulike scriptable objekter og de tre kapslene som representerer tegn. «Tegnene» er den enkleste delen, så du kan starte der. Alt du trenger å gjøre er å gå Til Hierarki-vinduet, klikk På Opprett-knappen, og velg 3D-Objekt – > Kapsel vist I Figur 5. Gjør dette tre ganger eller kopier det første objektet, og du kan også gi dem navn hvis du ønsker det. Dette eksemplet gir kapslene navnene Char1, Char2, Char3.
Figur 5: Opprette et kapselobjekt
Du må endre posisjonene, slik at de ikke overlapper hverandre. Hvis du vil endre objektets posisjon, velger du En I Hierarkiet og går til Transformeringskomponenten I Inspektøren. Endre posisjonsfeltene x, y og z for å flytte objektene der du vil ha dem.
Figur 6: Redigere objektets posisjon
Tabell 1 viser de nøyaktige posisjonene til alle tre kapslene i dette eksemplet.
Tabell 1: Alle objekter og deres posisjoner i verden
Objekt |
X Posisjon |
Y Posisjon |
Z Posisjon |
Char1 |
|||
Char2 |
|||
Char3 |
Selvfølgelig, gjerne justere noen av disse tallene hvis du ønsker. Neste opp er brukergrensesnittet, som viser verdiene gitt Til Scriptable Objekter. For å starte, må du klikke På Hierarkiets Opprett-knapp, men denne gangen velger DU UI- > Lerret. Deretter, med det nye Canvas-objektet valgt, klikker Du På Opprett-knappen igjen, og denne gangen velger Du Opprett Tomt Barn. Til slutt klikker du Igjen På Opprett-knappen, og denne gangen velger DU UI – > Tekst. Dra Det nyopprettede Tekstobjektet til det tomme spillobjektet og dupliser Tekst fire ganger Med Ctrl + D, slik at det er totalt fem Tekstobjekter under GameObject. Når Du er ferdig, Bør Hierarkiet ditt se ut som Det I Figur 7.
Figur 7: Det nåværende Hierarkiet
hvert Tekstobjekt korrelerer med navnet og statistikken som er gitt Via Scriptable Object, disse statistikkene er maksimal helse, angrep, forsvar og hastighet. Det er nyttig å endre Tekstobjektnavnene til verdien den representerer. Så det første Tekstobjektet kan kalles name_text, og det andre kan kalles attack_text, og så videre. I tillegg må du endre standardteksten for å gi en visuell for hvordan brukergrensesnittet ser ut. Dette gjøres ved å navigere Til Tekstkomponenten I Inspektøren og endre Tekstverdien. Og til slutt, justere sine posisjoner slik at de ikke er alle stablet oppå hverandre. For å holde Dette enkelt, Viser Tabell 2 alle de forskjellige objektnavnene og hva deres respektive verdier skal være.
Tabell 2: Alle Tekstobjekter og deres standard tekst-og posisjonsverdier
Gi Nytt Navn Til GameObject (Under Canvas) til noe litt mer beskrivende, for Eksempel Char1Description, og dupliser deretter det overordnede objektet. Gi nytt navn Til De to duplikatene Til Char2Description og Char3Description og plasser de tre objektene, slik at de er over kapselobjektene. Dette eksemplet plasserer Char1Description På En x-posisjon på -300, Char2Descrption på 0 Og Char3Position på 250. Alle y-og Z-posisjonsverdier er igjen ved 0.
det var litt av en lang vei, men prosjektoppsettet er fullført! Nå kommer tiden til å kode og se hvor Scriptable Objekter er opprettet så langt som programmering går. I Aktiva-vinduet navigerer du Til Scripts-mappen og oppretter to nye skript ved å høyreklikke Og navigere Til Create -> C# Script. Disse skriptene skal kalles CharStats og LoadStats. Når de er opprettet, starter du I CharStats-skriptet, så dobbeltklikk dette skriptet for å åpne Visual Studio og komme i gang med kodingsprosessen.
CharStats Script
for å opprette En Prosedyre Objekt, må du først legge til Create
menyen du har brukt til å lage materialer og skript. For å gjøre dette, bruker du attributtet CreateAssetMenu
og angir standard filnavn og plassering i menyen. Du må også endre hvilken klasse CharStats
arver fra. Som standard arver Hver C # – klasse i Et Unity-prosjekt fra MonoBehaviour
, men dette skriptet må arve fra ScriptableObject
i stedet.
Legg Merke til når du angir menuName
at et skråstrek brukes, som angir bruk av undermenyer. Hvis du ville, kan du fjerne skråstrek og bare ha Spilleren Enheter alternativet til stede uten å måtte navigere videre Gjennom Opprett-menyen. I dette tilfellet ble undermenyen først og fremst lagt til for å vise at du kan organisere Dine Scriptable Objekter etter hva du ønsker. I dette tilfellet er menyen Create – > Character Creation – > Spiller Enheter. Hvis du vil, kan du i et Annet Skriptbart Objekt få objektet opprettet fra samme bane, men med et annet opprettingsalternativ, for Eksempel Element.
Å Være Et Skriptbart Objekt er det ikke behov for standard Start
Og Oppdateringsmetoder, slik at du kan slette dem. Dette objektets primære formål er å holde data som er gitt til et annet objekt, men to egendefinerte metoder er også opprettet for å demonstrere Hvordan Scriptable Objekter kan gjøre mer enn bare å holde data. Når det gjelder data, går koden for å definere hvilke data dette objektet har, slik:
1
2
3
4
5
6
|
offentlig streng charName;
offentlig int angrep;
offentlig int forsvar;
offentlig int hastighet;
offentlig int maxHealth;
offentlig Materiale newColor;
|
som nevnt tidligere, inneholder hvert scriptable objekt et navn og noen verdier for fire forskjellige statistikker. Den inneholder også informasjon om hva karakterens nye farge når Scriptable Objektet er brukt. Verdiene for hver er definert I Unity editor, og selvfølgelig vil de være forskjellige for hvert objekt som er opprettet.
de to metodene holdes enkle. Man skriver bare ut en melding til feilsøkingskonsollen som sier at tegnet ble lastet inn. Denne meldingen skrives ut i Start
– metoden i LoadStats
– skriptet.
1
2
3
4
|
offentlig void PrintMessage()
{
Feilsøke.Logg («tegnet» + charName + » er lastet inn.»);
}
|
RandomizeStats
, den andre metoden, gjør akkurat som navnet antyder. Det endrer verdiene Av Scriptable Objekt til et tilfeldig tall mellom 1 og 20. Senere programmerer du prosjektet for å oppdatere brukergrensesnittet med de nye verdiene automatisk. Men det er ikke engang den mest interessante delen! Data i Et Scriptable Objekt er vedvarende, noe som betyr at de forblir de samme for økten frem til spillet er stengt. Dette er spesielt nyttig hvis du lager et spill som består av flere scener siden vanligvis gamle objekter slettes, og nye lastes på nytt når en ny scene åpnes. Scriptable Objektdata er imidlertid urørt i overgangen mellom scener. I tillegg forblir dataene de samme mens du arbeider I Unity editor til redaktøren selv er stengt. Dette betyr at endringer i dataene i Scriptable Objekter mens du kjører spillet fra redaktøren, er til stede når du spiller spillet fra redaktøren igjen, forutsatt at det ikke gjøres endringer i selve dataene.
Dette er alt Som Er Til CharStats-skriptet. Det kan virke ganske enkelt, men prosjektet er ikke fullført. Du har programmert muligheten til å Lage Scriptable Objekter med egne metoder og data, men kapselkarakterene dine vet ingenting om disse objektene. Så vidt de er bekymret, Eksisterer Ikke De Skriptbare Objektene. For å fikse dette må du åpne LoadStats-skriptet og kode det slik at objektene kan bruke Et Skriptbart Objekts data for å oppdatere brukergrensesnittet og endre fargen. Koden skal se ut Som figur 8.
Figur 8: Komplett CharStats script
LoadStats Script
ikke bekymre deg for å endre hvor klassen dette skriptet arver. Standard MonoBehaviour
er akkurat det som trengs. I stedet, inkludere en ny bruker setningen øverst.
1
|
bruke UnityEngine.UI;
|
Inkludert dette lar deg få teksten fra brukergrensesnittet og oppdatere dem for å vise verdiene som finnes i De Skriptbare Objektene. Nå, på klassen selv, starter 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 nevnt i kommentaren er charStat
variabelen Det Skriptbare Objektet som brukes. Du kan se her at å få Disse Scriptable Objekter er ikke forskjellig fra å erklære noen annen variabel. Senere i skriptet får du variablene og metodene i objektet og bruker dem i dette skriptet. Faktisk er PrintMessage
– metoden funnet i CharStats
brukt i LoadStats
Start
– metoden akkurat nå.
1
2
3
4
5
|
void Start()
{
DisplayStats ();
charStat.PrintMessage();
}
|
Som med alle andre eksterne skript, er alt du trenger å gjøre, ring charStat
etterfulgt av PrintMessage
for å få metoden funnet i Det Skriptbare Objektet. Dette kan være spesielt nyttig hvis du har objekter som alle har lignende eller identiske atferd. I dette tilfellet kan det også være nyttig for utvikleren å, som i dette eksemplet, skrive ut meldinger til feilsøkingskonsollen. Hvis noe skulle gå galt, og du mistenkte At Det Skriptbare Objektet var feil, kan du bruke feilsøkingskonsollmeldingene for å finne problemet.
Akkurat nå er det en feil som sier DisplayStats
eksisterer ikke. For å fikse dette, naviger under metoden Update
og legg til denne koden.
her er hvor verdiene som er lagret i Det Skriptbare Objektet, kommer ut for å spille. Alle de tekstvariablene deklarert tidligere? De vil bli gitt data for å vise, så de spørsmålstegn du angir i editoren viser nå noen verdi. Også, mens det egentlig ikke er en stat, endres fargen på tegnet her ved å ringe currentColor.material
og sette den til materialet som er satt i Det Skriptbare Objektet.
den andre charStats
– metoden, RandomizeStats
, har ennå ikke sett bruk, så du bør finne et sted for det. I metoden Update
kontrollerer programmet om mellomromstasten er trykket. Hvis den har, kaller den RandomizeStats
og gir Det Skriptbare Objektet noen nye verdier. Deretter kalles DisplayStat
igjen, og de nye verdiene vises.
1
2
3
4
5
6
7
8
|
ugyldig Oppdatering()
{
hvis (Input.GetKeyDown (KeyCode.Plass))
{
charStat.RandomizeStats ();
DisplayStats();
}
}
|
dette avslutter skriptet LoadStats
, og avslutter dermed kodingsdelen av dette prosjektet. Koden skal se ut Som Figur 9. Alt som er igjen å gjøre nå, er å lage Noen Få Skriptbare Objekter, bruke dem på kapselobjektet ved hjelp av LoadStats
, og prøv denne nye funksjonaliteten. Selvfølgelig, vær sikker på å lagre arbeidet ditt før du går tilbake til Unity-redaktøren.
Figur 9: Fullfør LoadStats script
Fullføre Prosjektet
for å bruke Skriptbare Objekter må du først opprette Dem. Høyreklikk Og naviger Til Create-> Character Creation- > Player Units som vist I Figur 10 i Vinduet Eiendeler, Under Mappen Scriptable Objects.
Figur 10: Opprette en ny Spiller Enhet, En Prosedyre Objekt
du kan navngi objektet hva du ønsker. Eksemplet baserer disse objektene på tradisjonelle rollespillklasser, så det vil ha en kriger, jeger og mage. Marker det nye objektet, naviger deretter Til Inspektørvinduet og gi verdier til de forskjellige feltene. For å fylle Ut Det Nye Fargefeltet, bare naviger Til Materialmappen din og klikk og dra ønsket materiale til feltet som vist i Figur 11.
Figur 11: Angi objektets Nye fargemateriale
Opprett to Mer Skriptbare Objekter og gjør det samme som før, og gi dem forskjellige verdier for de forskjellige feltene. Når det er gjort, flytter du Til Hierarki-vinduet og velger ett av char-objektene. Gi dem LoadStats-skriptet som en komponent ved å navigere til Scripts-mappen i Assets-vinduet, finne LoadStats, og dra det inn I Inspektørvinduet som vist i Figur 12.
Figur 12: Feste LoadStats script til et objekt
Neste, må du fylle LoadStats felt. For å begynne, finn Et Scriptable Objekt du vil bruke på ditt første «tegn» og bruk det på Char Stat-feltet som vist i Figur 13. Husk At Du Finner Skriptbare Objekter i Aktiva-vinduet under Skriptbare Objekter.
Figur 13: Angi hvor Det Skriptbare Objektet Char1 er å få data
nå fyll ut tekstfeltene. I Hierarkiet utvider Du Lerret etterfulgt av å utvide tegnbeskrivelsesobjektet som korrelerer med det du redigerer for øyeblikket. For eksempel betyr redigering Av Char1 at du vil utvide Char1Description. Ta deretter tekstobjektene som finnes under det overordnede objektet, og bruk dem på de tilsvarende feltene som vist i Figur 14.
Figur 14: Angi alle tekstfelt
Når tekstfeltene er fylt, trenger du bare å få objektets Maskerenderer, slik at du har tilgang til materialet, og dermed tillater fargeendringen. Alt du trenger å gjøre er å klikke og dra Mesh Renderer-komponenten i Inspektørvinduet og dra den inn I Gjeldende Fargefelt som vist Hvis Figur 15.
Figur 15: Angi Gjeldende Fargefelt
Gjenta de foregående trinnene for de to andre tegnobjektene, og du er ferdig med prosjektet. Når du er klar, klikker du på play-knappen øverst i editoren og observerer at tre nesten identiske objekter har svært forskjellige verdier knyttet til dem. Hvis en eller annen grunn noe ikke ser riktig, det første stedet å sjekke ville Være Dine Scriptable Objekter og forsikre deg selv om at verdiene og fargene som vises er de du ønsket. Husk å dobbeltsjekke Det Nye Fargefeltet også.
Alle disse tallene og deres farger kommer fra Scriptable Objekter, som selv kommer fra en enkelt mal. Du kan også lage enda Mer Scriptable Objekter og koble dem til Char Stat-feltet i et objekts Laststatistikkomponent og ha en helt annen karakter. Mens du kjører spillet (Figur 16), bør du se en melding i feilsøkingskonsollen nederst til venstre om at et tegn er lastet inn. Det er to andre meldinger, men du kan bare se den ene meldingen uten å åpne hele feilsøkingskonsollen, funnet på Window – > General – > Console. Du kan også trykke på mellomromstasten for å få noen helt ny statistikk for figurene dine. Hvis du stopper spillet og kjører det på nytt, vil du legge merke til verdiene du tilfeldig genererte vedvarer, noe som viser utholdenhet av Scriptable Objekter. De vil gå tilbake til sine opprinnelige verdier enten ved å manuelt skrive inn verdiene i objektene selv eller ved å lukke og gjenåpne redaktøren.
Figur 16: Skriptbare Objekter i aksjon
Konklusjon
Du Kan Naturligvis opprette flere Typer Skriptbare Objekter for mange typer objekter. Dette eksemplet viste deres bruk via karakterklasser, men det er også nevnte elementer eksempel. Den kan også brukes for mye mindre objekter, for eksempel power-ups minner om de som finnes i arkadespill. Ved Å Bruke Scriptable Objects oppretter du et rent, enkelt system der du kan endre og laste inn data med noen få tastetrykk og se resultatene nesten umiddelbart. Bruk Av Skriptbare Objekter betyr også færre skript å lage, da du kan bruke en mal for flere objekter. Uansett om prosjektet ditt er stort eller lite, eller om teamet ditt har mange medlemmer eller bare deg selv, Kan Scriptable Objekter gjøre alles utvikling litt enklere.