Hvordan lage et Basic Unity Platform Game

I vår del 1 av Hvordan lage et Basic Unity Platform-spill, gikk vi gjennom trinnene for å lage din grunnleggende karakter, legge til fysikk, plattformer og musinngang. I denne neste delen går vi over hvordan du legger til prosedyreplattformer, en spillmeny og noen ressurser for å finne modeller og flere plugin-moduler du kan bruke i fremtidige prosjekter.

Opprette prosedyreplattformer

Så i del en av denne opplæringen, har vi nettopp laget en grunnleggende plattform som karakteren din kan hoppe rundt på ( og falle ned til deres doom) - men for en sann plattformspiller må vi legge til flere plattformer. Men vi ønsker ikke å legge til en million plattformer - vi vil at Unity automatisk skal opprette plattformer som vår karakter spretter sammen.

For dette trenger vi en plattformmal - ellers kjent som en prefab. Prefab er kort for prefabrikkerte, og det betyr bare prefabrikat - vanligvis en kopi av et spillobjekt som du kan gjenbruke igjen og igjen. Faktisk kan prefabs inneholde hierarkier av spillobjekter, noe som betyr at du kan prefabbe en hel scene av spillobjekter.

Så hva du trenger å gjøre er å opprette en ny aktivitetsmappe med navnet Prefabs, og dra og slipp vår plattform fra hierarkipanelet til denne nye mappen. Prefabs blir gjenkjennelig i hierarkipanelet ved fargen blå.

Nå for å kunne instruere Unity for å lage prosedyreplattformer, må vi opprette et skript som heter GameManager, og legg det til kameraet. GameManager-skript inneholder i utgangspunktet viktige instruksjoner for motoren til relé til spillingen - i dette tilfellet vil det generere plattformer som vår karakter hopper sammen.

Grunnen til at vi legger den til kameraet er fordi kameraet aldri blir ødelagt, og det forblir konstant - så skriptet blir aldri ødelagt og forblir konstant ved å være knyttet til det.

Her er det som må inkluderes i skriptet:

For å forklare denne koden litt, er det nødvendig for oss å lage en referanse til både prefabrikken og sfæren (vår karakter), så du må dra og slippe dem inn i sine spesifikke spor i editoren din.

Denne koden inneholder også tre private variabler - linjene som starter med private var. Disse vil instantiere (referanse) prefab panelet på følgende måter:

  • Privat var grense: flyt plasserer en grense på y-aksen, så når vår karakter hopper høyere enn denne grensen, vil et nytt panel bli opprettet.
  • Private varrotasjon: Quaternion; bare legger til en nødvendig rotasjon for å instantiere våre prefabs - men vi legger til rotasjon = Quaternion.identify; fordi dette instruerer motoren til ikke å rotere spillobjektet. Objektet (våre prefabrikerte paneler) vil bokstavelig talt være perfekt tilpasset verden.
  • Den endelige private variabelen lastPlatformPosition vil huske og lagre posisjonen til den siste plattformen som en 3D-vektor (i utgangspunktet vil plattformene ikke forsvinne bak deg, slik at du kan gå bakover gjennom spillverdenen hvis du vil).

I dette neste skriptet skal vi legge til en sjekk for hver ramme om hvorvidt vårt sfære (tegn) ligger over grensen (som genererer nye plattformer) - hvis vår karakter er over grensen, vil vi øke grensen grense for å opprette et nytt panel / plattform som er høyere enn det siste.

Vårt neste trinn er å legge til kode som bestemmer neste panelposisjon:

Vi bruker en runde i denne koden for å sikre at vektorens X- og Z-verdier (posisjonen i spillverdenen) ikke er identiske med de forrige plattformene, slik at våre prosessormessige plattformer alltid vil øke i høyde.

Selvfølgelig ønsker vi ikke at disse verdiene skal plasseres strengt - en liten tilfeldighet er en god ting, ellers gjør vi bare en perfekt trapp. Så vi bruker Random.Range- funksjonen, mellom verdier -1 og 2, for å ringe tilfeldige verdier for X og Z. Du kan spille med disse tallene litt hvis du vil lure deg rundt.

Opprette en spillmeny

Så langt har vi laget et spill hvor du kan hoppe med økende høyde og bevege musen rundt for å styre retningen. Problemet er at hvis du faller av plattformen, faller du uendelig - vi må skriptet i en død / spill-meny for å starte over.

Så i utgangspunktet skriver vi et skript som kontrollerer om vårt sfære (karakter) faller under den første plattformen i spillet . I så fall vil skriptet laste inn en ny scene.

Vårt første skritt vil være å kontrollere om sfæren har falt under en bestemt grense. Gå inn i GameManager- skriptet vi laget tidligere, og se på om- setningen av oppdateringsfunksjonen .

Vi skal bruke et annet hvis erklæring her, for å sjekke om sfærens posisjon er under -2, 0 enheter av Y-stillingen - hvis det er vår private funksjon gameOver willwell, er det litt skript som er selvforklarende.

Den siste biten av skript er funksjonen som skal brukes til å håndtere et spill over tilstand og laste inn vår spillmeny.

PRO TIPS: Hvis problemet er med datamaskinen eller en bærbar PC / notatbok, bør du prøve å bruke Reimage Plus-programvaren som kan skanne arkiver og erstatte skadede og manglende filer. Dette fungerer i de fleste tilfeller der problemet er oppstått på grunn av systemkorrupsjon. Du kan laste ned Reimage Plus ved å klikke her

Dette harkens til Unitys Applikasjonsklasse - vi kan ringe LoadLevel- funksjonen for å få opp en ny scene, som i dette tilfellet er rett og slett vår spillmeny - husk at i utgangspunktet er alt i Unity nivåer. Hovedmenyer (Start Game - Options - Credits - Etc.) er i utgangspunktet bare nivåer / scener med biter av klikkbar tekst. Slags som Skyrims laste skjermer, eh? De er bare 3D-modeller i et tomt verdensrom med en lastingslinje.

I alle fall må vi opprette en scene gjennom Fil> Ny scene, og gi den navnet Meny mens du lagrer det. Da skal vi legge til begge scenene til byggeprosessen. Dette gjøres gjennom Fil> Bygg innstillinger .

Menyscenen vår bør fortsatt være åpen, så klikk bare på Legg til nåværende-knappen og legg til scenen i Build-innstillingene - gjør dette igjen med nivået.

Når vi dør i spillet, skal skriptet vi opprettet overgå oss fra spillnivå til menyscenen.

Legg til en startknapp for spillere

Nå kan vi spille spillet i testmodus, men fra nå av har spillerne ingen mulighet til å starte spillet hvis vi skulle laste opp dette spillet et eller annet sted. Så vi må lage en spillmeny som har en knapp for å starte spillet.

Så bytt til spill meny scenen, og legg til denne biten til kameraet ( i inspektørpanelet, husk fra punkt 1 i denne opplæringen?).

  • Klare flagg: Solid farge
  • Bakgrunn: # 000
  • Bredde: 200
  • Høyde: 60

Dette gir oss en solid svart bakgrunn for vår spillmeny - dette er gjort i RGB-verdier, ikke hex - så blått ville være 001, grønt er 010, rødt er 100 osv. Jeg kunne forklare dette for deg, men alt du trenger å gjøre er Google RGB-plukkeren hvis du vil ha en bestemt farge.

Når vi går videre, må vi legge til knappen vår for å starte spillet. Dette gjøres via UI-elementer - i utgangspunktet kan vi legge til UI-elementer på samme måte som vi legger til 3D-elementer, gjennom hierarkipanelet . Så fortsett og opprett en UI-knapp, og du vil se noen nye elementer i hierarkipanelet :

  • Event
  • Lerret
  • Knapp
  • Tekst

For å bryte dette ned - lerretet er vår beholder for alle brukergrensesnittelementer, og vi kan gjøre det lydhørt ( med responsiv mener jeg skalering til skjermstørrelse, ikke responsiv som det vil svare på spørsmål du spør. Det er best igjen for AI-skript). I hvert fall skal vi endre knappens posisjon til dette:

  • Rect Transform {Pos X: 0, Pos Y: 0, Pos Z: 0}
  • Rect Transform {Bredde: 200, Høyde: 60}

For å gjøre dette litt mer elegant, kan du fjerne knappens kildebilde, og sette en farge for den. Og for å endre knappens tekst, rediger du bare Tekstelementet til noe som START GAME, og gi det en skriftstørrelse rundt 16.

For å gjøre knappen klikkbar, legger vi til en funksjon i UIController-skriptet i Knappelementet . Bare legg til denne delen av koden nedenfor:

Bruk denne funksjonen til knappens inspektørinnstillinger, og i komponentinnstillingene for knapp (Script) vil vi ganske enkelt legge til en funksjon som utføres når spilleren klikker på Start-knappen. Legg så bare en funksjon til On Click () -hendelsen, og dra / slipp Startspill-knappen til inntastingsfeltet. Til slutt velger du den nyopprettede funksjonen fra UIController-skriptet ( UIController.StartGame)

Vi kan bruke denne funksjonen i knappens inspektørinnstillinger . I komponentinnstillingene Knapp (Script) kan vi utføre en funksjon når en spiller klikker på den. For dette legger vi til en ny funksjon til On Click () -hendelsen, ved å klikke på + -ikonet. Nå kan vi dra og slippe selve knappen på inngangsfeltet. Deretter velger vi funksjonen vi nettopp skrev fra UIController-skriptet (UIController.StartGame).

Slik eksporterer / Publiseres som et WebGL Browser Game

Åpne bygginnstillingene, og velg WebGL som målplattform. Klikk nå på knappen Switch Platform, og til slutt klikker du på Build- knappen og gir spillet ditt en tittel. Etter at den er bygd, blir den eksportert / lagret som en .HTML-fil, som kan åpnes / vises i en hvilken som helst WebGL-aktivert nettleser. Selv om du vil publisere spillet ditt, er det to metoder for å oppnå dette:

  • Last opp spillet ditt til en slags filvert (Dropbox, Google Disk, etc), og del deretter linken. Dette er nyttig for små demoer du vil vise til venner eller potensielle kunder ( spillportal nettsteder som enten kjøper spillet ditt eller oppretter en annonseandel med deg).
  • Last opp spillet ditt til en FTP-server du eier, og legg det inn i en