Unity Growing Pains

Enhet er en fantastisk plattform, og den fortsetter å vokse. Som mange andre spillutviklere har jeg byttet over til Unity som min primære plattform for spillutvikling. Mens Unity er et av de mest brukervennlige spillutviklingsprogrammene jeg noensinne har hatt gleden av å bruke, er den ikke fri for økende smerter. Jeg har jobbet med å overvinne og dokumentere disse forsøkene, og i denne artikkelen deler jeg min erfaring.

Relaterte innlegg
  • Slik lærer du enhet

Forstå inspektøren

Enhetsinspektøren er hvor du vil se all informasjon om det valgte objektet i scenevisningen.


Hvis du lager en kube og deretter velger den, vil inspektøren vise den Forvandle komponent, som vil vise x, y, og z egenskaper av posisjonen, rotasjonen og skalaen av kuben. Hvis du har en mer komplisert fiende du har opprettet, vil det vise all informasjon om det objektet, som kan inkludere et hvilket som helst antall komponenter du har knyttet til objektet.

Relaterte innlegg
  • Enhet: Nå tenker du med komponenter

Det er en fangst: For at en eiendom skal være synlig i inspektøren, må den bli offentliggjort i hvilket script som eiendommen tilhører: hvis du vil se fireSpeed variabel av en komponent som er knyttet til objektet ditt, da fireSpeed må deklareres som en offentlig variabel.

Det er her inspektørens virkelige kraft kommer inn i spill, og her må man lære enda et knep. Eventuell eiendom som kan ses i inspektøren kan redigeres for den aktuelle gjenstanden. Hvis skriptet angir en standardverdi for en eiendom via kode, er det veldig viktig å vite det Inspektørverdien vil tilsidesette den. Dette betyr at hvis fireSpeed variabel hadde en standardverdi på 4, og du satte det på 8 i inspektøren, da fireSpeed variabelen for objektet forblir som 8, selv om du endrer verdien til 4 i skriptet og lagre det.

(Vær oppmerksom på at variabelen settes til et annet omfang enn det offentlige - det vil si privat eller beskyttet - vil returnere egenskapen tilbake til skriptverdien, og gjemme verdien fra inspektøren.)

Det siste trikset å huske er at verdiene som er redigert i inspektøren, mens i scenevisningen når spillet ikke kjører, lagres, mens verdiene endres i inspektøren mens spillet er kjører under live redigering (ja, du kan leve redigere variabler mens du tester!) vil vende tilbake til sine verdier når du er ferdig med å teste prosjektet.

Disse få viktige poengene er ikke så komplekse, men det er veldig viktig at du husker dem, fordi du ikke er klar over alt dette kan føre til noe veldig forvirrende debugging.


prefabs

Prefabs er en av de viktigste aspektene av Unity, men de kan være litt forvirrende i begynnelsen, da det er noen få mindre quirks til dem som ikke er helt åpenbare ved første øyekast.

En prefab er i hovedsak en forhåndsdefinert definisjon av et objekt - en tegning, for all hensikt, mye som en klasse i OOP. Prefabs kan bestå av et hvilket som helst antall spillobjekter, grafikk, komponenter og så videre. De brukes best når du vil ha mange forekomster av et objekt, og vil kanskje ha små endringer av det aktuelle objektet.


Hvis du har en rekke prefabs i din scene, og gjør en endring i prefabfinisjonen, vil alle forekomster av den prefaben bli oppdatert. Alternativt, hvis du gjør oppdateringer til et bestemt eksempel, trykker du på Søke om, alle forekomster av prefaben (samt den viktigste prefabfinisjonen) vil bli oppdatert til konfigurasjonen av den aktuelle forekomsten. Hvis du har endret Inspector-variabler eller andre egenskaper, kan du trykke på Tilbakestill å returnere den forekomsten til samme konfigurasjon som prefabfinisjonen.


Navigere redaktørens 3D-rom

En av de første tingene jeg kjempet med i Enhet, selv etter å ha sett massevis av opplæringsvideoer, var å navigere i det visuelle 3D-rommet i redaktøren. Jeg var ganske vist en komplett nybegynner å flytte rundt i 3D-rom uten å være låst til et tegn (for eksempel når man spiller et første- eller tredjepersonspill), men jeg fant fremdeles bevegelse litt merkelig og komplisert.

Det er ikke dårlig når du er vant til det, men å ha litt mer retning da jeg først hoppet inn, ville vært bra, så her er noen nyttige kommandoer for å navigere redaktørens 3D-rom på riktig måte:


  • Høyreklikk Dra: Se rundt 3D-rommet fritt, uten å flytte.
  • Klikk på Objekt + F: Fokuser direkte på et objekt, flytt kameraet rett foran det.
  • Alt + Venstre klikk Dra: Roter rundt det nåværende fokuserte objektet.
  • Alt + Høyreklikk Dra: Ulike zoommekanikk.
  • Rull fremover / bakover: Zoom inn og ut direkte fremover eller bakover.
  • Rullehjul Klikk og dra: Flytt deg opp, ned, venstre og høyre, i 3D-plass.
  • Piltastene: Flytt direkte fram, tilbake, venstre eller høyre.

Komme sammen med Z

Uansett om du lager et 2D eller et 3D-spill, vil du bli kjent med den fabelagtige z-aksen. Mange klasser og funksjoner vil benytte seg av z-aksen, og mens du kanskje ikke vil endre et objekts posisjon på z-aksen, må du være oppmerksom på det og rollen det spiller i ulike funksjoner.

Z-aksens vanligste utseende, som egentlig ikke kan unngås, er bruken i Vector3 klasse. Hvert objekt i enhet har a Forvandle komponent, som er det som holder informasjonen for rotasjon, posisjon og all relatert data. I Enhet, tranform.position er en Vector3, som inneholder objektets x-, y- og z-koordinater.

Så selv om spillet ditt er 2D, må du jobbe med Vector3 klasse, og du må derfor være oppmerksom på denne parameteren. Den enkleste tingen å gjøre, i dette tilfellet, er å enten sette z parameter til 0, eller å sette den til nåværende z verdi ved å lese den fra transform.position.z.


Grunnleggende bevegelse

Som nevnt ovenfor lagres all bevegelsesrelatert informasjon i a Forvandle komponent. Ah, men du kan ikke bare skrive til transform.position Vector3-minst ikke i C #. I stedet må du opprette en ny Vector3, sett verdiene til din Vector3 (x, y, og z), og sett deretter transform.position til det nye Vector3, som følger:

// Vi kan ikke skrive til transform.position, så vi lager en ny Vector3: Vector3 newPosition; newPosition = ny Vector3 (theX, theY, theZ); // Sett transform.position til newPosition Vector3-objektet. transform.position = newPosition;

Selv om dette ikke er helt komplisert, vil det definitivt legge til haug av ting for å få deg opp hvis du ikke er klar over det!


Konklusjon

Alt i alt er ingenting ovenfor spesielt avansert, eller veldig teknisk; det er bare en mengde informasjon som nybegynnere til Unity ofte savner mens de lærer. Alle kan finne ut alt dette til slutt, men det kan ta mange timer med feilsøking, Googling og eksperimentering, og det er ikke noe behov for det.

Jeg har sett hver enkelt opplæringsvideo på Unity-siden, og mens det er rimelig å si at jeg ikke absorberte alle av informasjonen første gang rundt, blir mange av de ovennevnte ikke nevnt, eller er ikke gitt nok oppmerksomhet for å få det til å skille seg ut. Å lære alt jeg har lært tok meg en stund, og forhåpentligvis vil denne kompilerte informasjonslisten øke lærekurven for fremtidige nybegynnere til Unity Development.

Hvilke voksende smerter har du på tvers av mens du lærer Enhet?