I denne veiledningen vil jeg vise deg hvordan du lager en enkel tegntilpasningsmeny, og hvordan du lagrer nødvendige data for bruk i et spill. Vi lager en spilleravatasjon (et fly i dette eksempelet), tilpasser det ved å legge til valgfrie vedlegg eller endre farge, lagre dataene, laste inn et annet nivå og gjenskape det fra de lagrede dataene. Dette lar deg effektivt tilpasse det utenfor spillverdenen; i et menysystem, så det er tilgjengelig hvor som helst du vil, selv etter at du har avsluttet og startet spillet på nytt.
Relaterte innleggDu trenger en grunnleggende forståelse av enhet for dette. Hvis du vil modellere dine egne objekter, kan du også gjøre det, men 3d-modellen som brukes i denne opplæringen er også tilgjengelig for nedlasting her. Hele prosjektet, hvis du vil se noe opp, kan også lastes ned her.
Opprett et nytt Unity-prosjekt. Vi trenger 2 nivåer der inne, så vi kan bytte mellom dem. Lagre den aktuelle scenen og navnet den "levelMenu". Åpne deretter byggeinnstillingene (fil - bygningsinnstillinger) og trykk "legg til nåværende scene". Dette er nødvendig for at vi senere kan få tilgang til det og laste det direkte.
Deretter oppretter du en ny scene og heter den "levelGame", og legger den til i bygginnstillingene også. Nå skal de grunnleggende scenene være til stede, slik at vi kan fylle dem med ting.
Vi bruker et fly som "tegn" for nå (dette er mye enklere å håndtere enn et fullstendig menneske :). Få 3d-eiendelene (her er de igjen) og kopier dem til din eiendomsmappe. Opprett en terning, og bytt ut masken for planetmassen. Lag et nytt materiale og legg det til flyet. Til slutt, dra flyet inn i prosjektmappen for å lage en prefab ut av det.
For å tilpasse flyet trenger vi en slags grensesnitt.
Opprett nye skript og navngi det planet.js. Sett inn følgende kode i den
funksjon OnGUI () if (Application.loadedLevel == 0) if (GUI.Button (Rect (10, 10, 100, 50), "Red")) renderer.material.color = Color.red; hvis (GUI.Button (Rect (10, 70, 100, 50), "Blue")) renderer.material.color = Color.blue; hvis (GUI.Button (Rect (10, 130, 100, 50), "Green")) renderer.material.color = Color.green;
Legg skriptet til flyets prefab, og legg et fly i scenen. Flytt kameraet slik at det ser på flyet, slik at vi kan se endringene vi skal gjøre med det. Når du kjører det, bør det se slik ut:
Hvis du trykker på en knapp, skal fargen på flyet endres. Du kan prøve det ut i denne byggingen: LAST NED KILDE PROJEKT 1.
Hvis (Application.loadedLevel == 0) -braketten deaktiverer knappen hvis et annet nivå unntatt menyen (nivå 0) er lastet inn. Dette er nyttig for styring av gui-systemer.
I ditt "levelGame" legger du et nytt fly, og får kameraet til å se på det. Hvis du prøver det, bør ingenting skje enda, siden vi ikke har lagt til tilpasningen til de lagrede dataene ennå. Mens du er der, gjør scenen forskjellig fra "levelMenu" -scenen, slik at det å fortelle både fra hverandre er enklere. Å gi den en annen bakgrunnsfarge i hovedkameraet, skal være tilstrekkelig.
Nå går du tilbake til "levelMenu" -nivået, alt blir gjort derfra. Åpne flyskriptet og legg til følgende linjer til det, rett under koden for knappene:
funksjon OnGUI () hvis (GUI.Button (Rect (120, 10, 100, 50), "Load Level")) Application.LoadLevel (1);
Prøv det! En ny knapp skal vises, og hvis du trykker på den, vil den laste det nye nivået. Flyet i det andre nivået vil ha det "grunnleggende" utseendet skjønt. Det neste trinnet vil være å tilpasse det når nivået er lastet.
Enhet kommer med "PlayerPrefs" -funksjoner. Disse tillater å lagre og laste data på hvilken som helst enhet den brukes til. Først lagrer vi fargen på flyet, og så ser vi om å skape det på det andre lastede nivået.
Tilpass lastnivå-knappen for å se slik ut:
hvis (GUI.Button (Rect (120, 10, 100, 50), "Load Level")) PlayerPrefs.SetFloat ("planetColorR", renderer.material.color.r); PlayerPrefs.SetFloat ("planetColorG", renderer.material.color.g); PlayerPrefs.SetFloat ("planetColorB", renderer.material.color.b); Application.LoadLevel (1);
Når du klikker på "lastnivå" -knappen, lagrer spillet nå de røde, grønne og blå komponentene i fargene som tre separate verdier. Rød vil bli lagret som "planetColorR", grønn vil bli lagret som "planetColorG", og blå lagres som "planetColorB". Disse verdiene lagres utenfor spillet på datamaskinen (eller en hvilken som helst enhet dette vil kjøre på, som en iOS-enhet, Android eller Ouya), og kan hentes når som helst når som helst.
Ikke legg til denne koden i skriptet:
funksjon Start () renderer.material.color.r = PlayerPrefs.GetFloat ("planeColorR"); renderer.material.color.g = PlayerPrefs.GetFloat ("planeColorG"); renderer.material.color.b = PlayerPrefs.GetFloat ("planetColorB");
Når nivået blir startet, vil flyet få de lagrede fargedataene, og bruke den til flyet. Hvis du prøver det nå, og det virker svart, er det fordi ingen data har blitt lagret ennå! For å forhindre dette, kan du sette den til å bare tilpasse seg på andre nivå:
hvis (Application.loadedLevel == 1) PlayerPrefs.SetFloat ("planeColorR", renderer.material.color.r); PlayerPrefs.SetFloat ("planetColorG", renderer.material.color.g); PlayerPrefs.SetFloat ("planetColorB", renderer.material.color.b);
La oss gjøre noen andre ting for å tilpasse flyet! I 3d-filene finner du også noen bomber. Vi gjør det slik at de kan settes under flyet og lagres også.
Start med å lage en bombeobjekt. Lag en terning og bytt ut masken for bomullsmassen. Legg til en grå farge, og foreldre deretter missilet til flyet og senter det under det. Det skal se slik ut:
Hvis du trykker på "søk" mens flyet er i inspektøren, vil de nye bomber bli lagt til prefab, og flyet i "levelgame" -nivået vil automatisk bli oppdatert også.
Legg nå disse linjene til skriptet:
var bomber: GameObject; funksjon Start () bombs.SetActive (false); hvis (PlayerPrefs.GetInt ("bombs") == 1) bombs.SetActive (true); funksjon OnGUI () hvis (GUI.Button (Rect (10, 190, 100, 50), "Bombs")) bombs.SetActive (! bombs.activeSelf); funksjon LoadLevel () if (bombs.ActiveSelf ()) PlayerPrefs.SetInt ("planeBombs", 1); Ellers PlayerPrefs.SetInt ("planetBombs", 0);
Før du prøver det, husk å dra "bomb" -objektet i scenen inn i "bomber" -slottet i flyet, ellers vil det ikke fungere.
Hele skriptet skal se slik ut:
#pragma strenge var bomber: GameObject; funksjon Start () if (Application.loadedLevel == 1) renderer.material.color.r = PlayerPrefs.GetFloat ("planeColorR"); renderer.material.color.g = PlayerPrefs.GetFloat ("planeColorG"); renderer.material.color.b = PlayerPrefs.GetFloat ("planetColorB"); Bombs.SetActive (false); hvis (PlayerPrefs.GetInt ("planetBombs") == 1) bombs.SetActive (true); funksjon OnGUI () if (Application.loadedLevel == 0) hvis (GUI.Button (Rect (10, 10, 100, 50), "Red")) renderer.material.color = Color.red; Hvis (GUI.Button (Rect (10, 70, 100, 50), "Blue")) renderer.material.color = Color.blue; Hvis (GUI.Button (Rect (10, 130, 100, 50), "Green")) renderer.material.color = Color.green; Hvis (GUI.Button (Rect (10, 190, 100, 50), "Bombs")) bombs.SetActive (! Bombs.activeSelf); Hvis (GUI.Button (Rect (120, 10, 100, 50), "Load Level")) PlayerPrefs.SetFloat ("planeColorR", renderer.material.color.r); PlayerPrefs.SetFloat ("planetColorG", renderer.material.color.g); PlayerPrefs.SetFloat ("planetColorB", renderer.material.color.b); hvis (bombs.activeSelf) PlayerPrefs.SetInt ("planetBombs", 1); Ellers PlayerPrefs.SetInt ("planetBombs", 0); Application.LoadLevel (1); Annet hvis (GUI.Button (Rect (10, 10, 100, 50), "Load Menu")) Application.LoadLevel (0);
Når du trykker på "load level" -knappen nå, blir bombenes tilstand lagret. Når du starter det nye nivået, blir bomber enten deaktivert eller aktivert, avhengig av lagret tilstand. Du kan prøve det ut i denne bygningen: LAST NED KILDE PROJEKT 2.
Vi er ferdige! Nå vet du hvordan du skal
Denne tilpassede spilleren "karakter" vil da være tilgjengelig når som helst under spillet.
Vi har bare brukt et enkelt fly som vårt eksempel "tegn", men det kan være noe. Båter, biler, mennesker, dyr, selv enkle ting, som kuber eller sfærer, kan brukes til å representere spillerne i spillene dine. Dette kan også brukes til å tilpasse andre gjenstander, som våpen, kjøretøy, customes, frisyrer eller til og med dekarasjoner i et stort vedvarende hjem. Bli gal!