Annonse

Et overraskende trekk ved internettøkonomien er fremveksten av indie-videospill. Når det eksklusive domenet til tusen manns trippel-A-studioer er blitt utviklet, har det blitt utviklet en rekke verktøysett som bringe moderne spillutviklingsressurser i hendene på enkeltpersoner eller små ad-hoc samlinger av programmerere og designere. Vi har tidligere diskutert beste indie-spill 10 indie-spill så bra, du vil glemme at de er indie i det hele tattDet kan imidlertid være tidspunkter der du vil ha noe annet enn indienormen. Et spill som følger indieverdier, men er laget med den kvaliteten som AAA-spill på topp sokkelen er kjent for. Titler som ... Les mer , så sørg for å sjekke dem ut for inspirasjon til hva som kan oppnås med verktøy som Unity.

Denne guiden er tilgjengelig for nedlasting som en gratis PDF. Last ned programmering av et spill med enhet: En nybegynnerguide nå. Kopier og del dette med familie og venner.

Disse utviklingslagene for indie-spill har vist en smidighet og risikotoleranse som i mange tilfeller lar dem presse innovasjon i gameplay raskere enn sine store budsjett-kolleger. En rekke sjokkerende suksessrike indietitler har hatt premiere de siste årene, inkludert

Minecraft, Limbo, og Super kjøtt gutt, og selv om du ikke trenger ferdigheter for å lage spill som dette, kan du gjøre det lage et spill ved hjelp av Buildbox Hvordan lage et videospill i løpet av en uke ved hjelp av BuildboxDet er et program som gjør spillutvikling utrolig enkel for selv de som absolutt ikke har erfaring med å designe videospill. Det heter Buildbox. Her er grunnen til at du bør prøve det. Les mer .

I det raskt utviklende landskapet med indie-spillutvikling, Enhet har fremstått som noe med en de-facto-standard: dens lave kostnader, brukervennlighet og brede funksjonssett gjør det ideelt for rask spillutvikling. Enighet er så fleksibel at du selv kan lag dine egne spillkontrollere Hvordan lage en tilpasset spillkontroller med Arduino og enhetHar du noen gang ønsket å designe din egen spillkontroller? Det er enklere enn du tror! Les mer med litt DIY vet hvordan!

Til og med store studioer som CCP (Developers of Eve Online) bruk den for raskt å prototype spillkonsepter. Unity gir en "spillmotor i en boks" - en fysikk- og gjengivelsesmotor med kroker for flere skriptspråk, tilpasningsdyktige til praktisk talt alle videospillsjanger.

Mens Unity gir en visuell redaktør for å manipulere spillmiljøet, er Unity ikke et “nullprogrammerings” spillskapende verktøy. Det krever at du programmerer for å gi resultater, men gir deg også et mye mer fleksibelt og kraftig verktøy enn noe ‘spillprodusent’ program muligens kunne.

Enhet vil ikke gjøre jobben for deg, men det reduserer hindringen for innreise betydelig. Starter helt fra bunnen av med C ++ og OpenGL, kan det ta dager å komme til et punkt der det faktisk er noe som er gjengitt på skjermen. Bruker Unity tar det omtrent ti sekunder. Enhet legger grunnleggende elementer i spillskaping i hendene på nybegynnere som programmerer på en rask, intuitiv måte.

I dag vil jeg veilede deg gjennom alt du trenger å vite for å lage et spill i Unity, som er delt opp i ti hovedkapitler:

§1 – Versjoner av enhet

§2 – Installere enhet

§3 - En kort introduksjon til det objektorienterte paradigmet

§4 – Grunnleggende om enhet

§5 – Eksempel: Grunnleggende elementer i et spill

§6 – Skriftverk i enhet

§7 – Eksempel: Scripting Pong

§8 – Utforske dokumentasjonen / lære mer

§9 - Bygge spillet ditt / kompilere til en frittstående applikasjon

§10-Avslutningsnotater

1. Versjoner av enhet

Enhet kommer i to grunnleggende smaker: pro-versjonen og gratisversjonen. Det er en antall forskjeller, men stort sett støtter proversjonen en rekke visuelle forbedringer (som sanntids myke skygger og etterbehandling), og et stort antall relativt mindre funksjoner som er ekstremt nyttige for mer komplekse spill.

Når det er sagt, for de fleste relativt enkle spill du kanskje ønsker å bygge, er gratisversjonen av Unity helt tilstrekkelig. Vi vil fordele nøkkelforskjellene nedenfor mer detaljert for de som er interessert.

1.1 Prising

Gratisversjonen av Unity er selvfølgelig gratis. Imidlertid er det noen begrensninger: gratisversjonen av Unity kan ikke lisensieres til noe selskap med en årlig inntekt på mer enn $100,000. Selv om slike organisasjoner er utenfor rammen av denne veiledningen, hvis du mistenker at du kan bli en slik organisasjon, er det sannsynligvis lurt å komme til Pro-versjonen.

Pro-versjonen av Unity er $75 en måned, eller $1500 for en permanent lisens, og har ingen grenser for hva du kan gjøre med spillene som er opprettet med den. Det er også en 30-dagers gratis prøveversjon tilgjengelig, som vi bruker for denne guiden, for å gi deg en så komplett oversikt over tilgjengelige funksjoner som mulig. Et års studentlisens er også tilgjengelig gjennom Studica til $129.

1.2 Funksjoner

Det er mange funksjoner fraværende i gratisversjonen av Unity. De viktigste forskjellene er imidlertid som følger: gratisversjonen av Unity mangler en rekke gjengivelsesalternativer som tillater det bedre utseende, raskere løpende spill (LOD-støtte, skjerm-plass etterbehandling, avanserte lysere, myke skygger i sanntid og utsatt gjengivelse). Det mangler også det fulle mechanim animasjonssystem, og noen AI-verktøy.

Generelt sett er proversjonen verdt for komplekse, store skalaer, eller prosjekter der grafisk ytelse er viktig. Jeg bruker pro-versjonen, fordi jeg utvikler virtual reality-spill for Oculus rift Oculus Rift ReviewVirtual Reality er ikke nytt, men det er endelig rimelig og innenfor vår ramme. Etter fire år og to utviklingsprototyper har den endelige forbrukerutgaven av Oculus Rift kommet. Les mer , og støtte for skjerm-plass etterbehandling er nødvendig for å kunne samhandle riktig med hodesettet.

2. Installere enhet

Enhet er enkelt å installere. Du kan laste ned den kjørbare filen fra unity3d.com/get-unity/download.

Når den er lastet ned, kjør den, og følg deretter installasjonsinstruksjonene. Når installasjonen er ferdig, vises et vindu med tittelen 'aktiver din Unity-lisens'. Merk av i boksen merket 'aktiver en gratis 30-dagers prøveversjon av Unity Pro' og deretter 'OK'.

Gratulerer! Du har nå en 30-dagers prøveversjon av Unity Pro. Når prøveperioden utløper, hvis du ikke vil kjøpe pro-versjonen, kan du bytte til gratisversjonen og beholde det eksisterende innholdet.

3. En kort introduksjon til det objektorienterte paradigmet

Før du kommer i gang med Unity, er det viktig at vi går litt over det grunnleggende. Enhet støtter begge deler C # og Javascript til spillprogrammering 7 Unity Game Development Språk å lære: Hvilket er best?Vil du begynne spillutvikling i Unity? Du trenger å bli kjent med et av disse Unity-kompatible språkene. Les mer ; vi jobber med C # for denne opplæringen.

For det første, hvis du aldri har programmert før, legg denne opplæringen til side og bruk noen dager på å jobbe gjennom Microsofts C # Language Primer til du føler deg komfortabel med å bruke språket til enkle oppgaver.

Hvis du vil ha noe litt annerledes enn C # (men ikke nødvendigvis et språk du kan bruke i Unity), kan du ta en titt på vår guide til seks enkleste programmeringsspråk for nybegynnere 6 enkleste programmeringsspråk å lære for nybegynnereÅ lære å programmere handler om å finne riktig språk like mye som det handler om oppbyggingsprosessen. Her er de seks enkleste programmeringsspråkene for nybegynnere. Les mer .

Hvis du tidligere har programmert på et imperativt eller objektorientert språk som C eller Java, kan du skumme primeren og gjøre deg kjent med hvordan C # skiller seg fra andre språk du har brukt tidligere. Uansett, ikke fortsett med opplæringen før du føler deg komfortabel med å løse enkle problemer med C # (for eksempel hvis jeg skulle spørre du skal skrive et program som skriver ut de første hundre primtallene, bør du kunne skrive det programmet uten å konsultere Google).

Det viktigste konseptet å forstå her er objektorientert paradigme Hvor fikk "objektorientert" programmering navnet sitt fra?Objektorientert er ikke bare et tilfeldig buzzword du hører i programmeringssirkler. Det er en grunn bak navnet - men hva? Bli med meg når jeg utforsker noen av grunnleggende elementene i programmeringskonsepter og forklarer ... Les mer (forkortet som OOP). I objektorienterte språk er programmer delt inn i funksjonelle enheter som heter objekter. Hvert objekt har sine egne private variabler og funksjoner. Objektspesifikke funksjoner kalles fremgangsmåter.

Ideen her er modularitet: ved å ha hvert objekt isolert, og tvinge andre objekter til å samhandle med det gjennom metodene kan du redusere antall mulige utilsiktede interaksjoner - og i forlengelse av dette, bugs. Du kan også opprette objekter du kan gjenbruke senere uten endringer. I Unity bygger du disse objektene og knytter dem til spillenheter (hvis oppførsel de vil styre).

Objekter er direkte hentet fra klasser: en klasse er bare en fil som inneholder definisjonen av objektet ditt. Så hvis du vil ha en Mook objekt som håndterer AI for en fiende i spillet ditt, vil du skrive en ‘Mook’ klasse, og deretter knytte den filen til alle fiendtlige enheter. Når du kjører spillet ditt, vil hver fiende være utstyrt med en kopi av ‘Mook’ -objektet.

Å knytte et nytt skript til et objekt ser slik ut:

Programmering av et spill med enhet: En nybegynnerguide enhetens programspill 1

Først, velg objektet og gå til Inspektør. Klikk på Legg til komponent knapp.

Programmering av et spill med enhet: En nybegynnerguide enhetsprogram 2

Gå til nytt manus, skriv inn navnet du ønsker, og klikk opprette og legge til.

Programmering av et spill med enhet: En nybegynnerguide enhetens programspill 3

Nå har du et nytt skript som du kan redigere ved å dobbeltklikke på det!

En klassefil ser slik ut:

bruker UnityEngine; offentlig klasse Mook: MonoBehaviour {privat flytehelse; ugyldig Start () {helse = 100; } ugyldig Oppdatering () {if (helse> 0) {/ * Søk etter spiller hvis du møter spilleren på veien, drep ham hvis du blir skutt, fjern en tilfeldig mengde helse * /}} }

La oss bryte dette ned:

  • Bruker UnityEngine: Denne linjen forteller C # at vi ønsker å bruke Unitys biblioteker, som lar oss koble til Unity-spillmotoren.
  • Offentlig klasse Mook: MonoBehaviour:Denne linjen erklærer klassen og navnet - Mook.
  • Privat flytehelse: Dette erklærer en privat klassevariabel (som bare kan endres fra klassen). Variabelen er gitt en verdi i Start.
  • Opphevet start (): Dette erklærer en metode som heter Start. Start er en spesiell metode som bare kjøres en gang, når spillet først lanseres.
  • Gyldig oppdatering (): Oppdatering er en annen spesiell metode som kjører på alle rammer. Det meste av spilllogikken din vil gå her.
  • // Hvis du møter spilleren på veien, så drep ham: Denne linjen er en kommentar (alle linjer som begynner med et dobbelt skråstrek ignoreres av C #). Kommentarer brukes til å minne deg på hva bestemte kodebiter gjør. I dette tilfellet brukes denne kommentaren til å stå inne for en mer komplisert kodeblokk som faktisk gjør det kommentaren beskriver.

Sammen med Start og Oppdater, kan du opprette dine egne metoder med nesten hvilket som helst navn. Metoder du oppretter, kjører imidlertid ikke med mindre de blir ringt. La oss erklære en metode for en hypotetisk klasse som heter addTwoNumbers som legger til to tall sammen:

public float addTwoNumbers (float a, float b) {return a + b; }

Dette erklærer en offentlig (tilgjengelig for andre objekter) -metode som returnerer en flottør, kalt addTwoNumbers, som tar to flottører som input (kalt en og b). Den returnerer deretter summen av de to verdiene som utgang.

Å kalle denne metoden fra samme klasse (si fra innsiden Oppdater) ser slik ut:

float resultat = addTwoNumbers (1, 2);

Å kalle metoden fra en annen klasse er lik:

addTwoNumbers forekomst; float resultat = instans.addTwoNumbers (1, 2);

Igjen, dette skaper bare en forekomst av klassen vår, får tilgang til riktig metode og mater den inn tallene vi vil legge til, og lagrer deretter resultatet i resultat. Enkel.

Hvis skriptet ditt er knyttet til et objekt som har spesielle egenskaper (for eksempel en partikkelemitter) som ikke er tilgjengelig under det normale settet med GameObject-parametere, kan du velge å behandle det som en annen type spillenhet ved å bruke de GetComponent metode.

Syntaks for det ser slik ut:

GetComponent().Spille();

Hvis noe av dette er ukjent for deg, gå tilbake og gå gjennom C # -grunning. Det vil spare deg for mye frustrasjon når vi fortsetter.

4. Unity Basics

I dette avsnittet skal vi jobbe oss gjennom den grunnleggende mekanikken til Unity-motoren. Arbeidsflyten i Unity går slik:

  1. Opprett en enhet som skal tjene en rolle i spillet (blank GameObjects kan brukes til abstrakte logiske oppgaver).
  2. Skriv eller finn en klassefil, og legg den til enheten som et skript (ved å bruke Legg til komponent knappen i inspektør utsikt.
  3. Løpe > test > debug > gjenta til det fungerer og gå videre til neste element i spillet.

Unity kommer med en rekke grunnleggende visningsfanen som kan legges ut på forskjellige måter til smak for brukeren. De store fem er:

  1. Spill: viser en løpende forekomst av spillet som du kan samhandle med og teste.
  2. scene: gir en statisk, redigerbar versjon av spillverden.
  3. Inspektør: lar deg endre individuelle enheter i spillverdenen ved å velge dem i redaktør fane.
  4. Prosjekt: lar deg bla gjennom prosjektets filer og dra modeller, materialer og andre ressurser til redaktør -fanen for å plassere dem i spillverdenen.
  5. hierarki: denne fanen viser alle objekter i verden, slik at du kan finne fjerne objekter i scenen, og foreldreenheter til hverandre ved å klikke og dra.

Se diagrammet nedenfor for plassering av alle disse tingene:

Programmering av et spill med enhet: En nybegynnerguide enhetens programspill 0

4.1 Enhetsenheter

4.1.1 Meshes

Mesh er veien 3D geometri er representert i Enhet. Du kan enten bruke Unitys innebygde primitiv objekter (terninger, kuler, sylindere osv.), eller importer dine egne 3D-modeller fra en modelleringspakke som Blender Komme i gang med Blender: 7 fantastiske opplæringsprogrammer for nybegynnere3D-modellering er en utmerket måte å trene kreativitet på mens du holder kontakten med din tekniske side. Her er noen fantastiske gratis opplæringsprogrammer. Les mer eller Maya Læring Maya 2016: Hvor du kommer i gangMaya er et verktøy som brukes til 3D-animasjon, men den kommer med en utrolig bratt læringskurve. Hvilket godt lærestoff er det? Les mer . Unity støtter en rekke 3D-formater, inkludert .fbx, og .3 ds.

De grunnleggende verktøyene for å manipulere nettinger er skalering, rotasjon og oversettelsesknapper i øverste venstre hjørne av grensesnittet. Disse knappene legger til kontrollikoner til modellene i redigeringsvisningen, som deretter kan brukes til å manipulere dem i verdensrommet. Hvis du vil endre strukturen eller fysikkegenskapene til et objekt, velger du dem og bruker inspektør visning for å analysere materiale og stiv kropp elementer.

4.1.2 GUI-elementer

Tradisjonelle GUI-sprites og tekst kan vises ved å bruke GUI-tekst og GUI-struktur GameObjects i redaktøren. Imidlertid er en mer robust og realistisk måte å håndtere UI-elementer på å bruke 3D-tekst og Quad GameObjects (med gjennomsiktige strukturer og en uopplyst transparent shader) for å plassere HUD-elementer i spillverdenen som enheter.

I hierarki visning, kan disse spillelementene dras på hovedkameraet for å gjøre dem til barn, slik at de beveger seg og roterer med kameraet.

GUI-elementer (tekst og teksturer) kan justeres størrelse og skala ved å bruke de aktuelle feltene i inspektørfanen.

4.1.3 Materialer

Materialer er kombinasjoner av teksturer og shaders Fem viktige vilkår for PC-spill forklartHvis du spiller et spill på en konsoll, blir de tekniske detaljene håndtert for deg. Noen spillere foretrekker dette, men PC-spillere liker ofte den større grad av kontroll de har over et spills øye ... Les mer , og kan dras direkte på spillobjekter fra prosjektfanen. Et stort antall lysfarger leveres med Unity Pro, og du kan justere tekstur som er festet til dem ved å bruke inspektørfanen for et objekt de er brukt på.

Hvis du vil importere en tekstur, konverterer du den til en .jpg, .png, eller .bmp, og dra den inn i eiendeler -mappen under Unity-prosjektkatalogen (som vises i Mine dokumenter som standard). Etter noen sekunder vil en lastelinje vises i redigeringsprogrammet. Når det er ferdig, vil du kunne finne bildet som en tekstur under prosjekt fane.

4.1.5 Lys

Lys er GameObjects som projiserer utstråling til verden. Hvis det ikke er lys i scenen din, tegnes alle polygoner på samme lysnivå, noe som gir verden et flatt, utvasket utseende.

Lys kan plasseres, roteres og har flere interne egenskaper som du kan tilpasse. De intensitet glidebryteren styrer lysets lysstyrke og område styrer hvor raskt den blekner.

Retningslinjene i scenevisning viser deg maksimal belysningsområde. Spill med begge innstillingene for å oppnå ønsket effekt. Du kan også justere fargen på lyset, mønsteret (kjeks vises på overflaten lyset peker på, og hva slags bluss som vises på skjermen når du ser direkte på lyset. Informasjonskapselen kan brukes til å falske mer realistiske lysmønstre, lage dramatiske falske skygger og simulere projektorer.

De tre viktigste lysene er få øye på, punkt, og retnings.

Spotlys ha en plassering i 3D-rom og prosjektlys bare i en retning i en kjegle med variabel vinkel. Disse er bra for lommelykter, søkelys og generelt gir deg mer nøyaktig kontroll over belysningen. Spotlys kan kaste skygger.

Pekelys ha en plassering i 3D-rom, og kast lys jevnt i alle retninger. Pekelys kaster ikke skygger.

Retningslystil slutt brukes til å simulere sollys: de projiserer lys i en retning som fra uendelig langt borte. Retningslys påvirker alle objekter i scenen, og kan gi skygger.

4.1.6 Partikkelsystemer

EN Partikkelsystem er en GameObject som genererer og kontrollerer hundrevis eller tusenvis av partikler samtidig. Partikler er små, optimaliserte 2D-objekter som vises i 3D-rom. Partikkelsystemer bruker forenklet gjengivelse og fysikk, men kan vise tusenvis av enheter i sanntid uten stamming, noe som gjør dem ideelle for røyk, ild, regn, gnister, magiske effekter og mer.

Det er mange parametere som du kan finjustere for å oppnå disse effektene, og du får tilgang til dem ved å gyt et partikkelsystem under komponentredaktør > velge partikkelsystem > Åpne inspektør-fanen. Du kan endre størrelse, hastighet, retning, rotasjon, farge og tekstur på hver partikkel, og stille de fleste av disse parametrene til å endre seg over tid også.

Under kollisjon attributt, hvis du aktiverer det og setter simuleringsområdet til verden vil du få partikler som vil kollidere med gjenstander i verden, som kan brukes til en rekke realistiske partikkeleffekter, inkludert regn, vann i bevegelse og gnister.

5. Eksempel: Grunnleggende elementer i et spill

For denne opplæringen skal vi lage et enkelt spill pong - noe vi har dekket flere ganger i DIY før:

  • Arduino Classic Pong Hvordan gjenskape det klassiske pong-spillet ved hjelp av ArduinoPong var det første videospillet noensinne som nådde massemarkedet. For første gang i historien ble konseptet med et "videospill" ført inn i familiens hjem, takket være Atari 2600 -... Les mer
  • Arduino OLED Pong Arduino Retro Gaming Med en OLED-skjermHar du noen gang lurt på hvor mye arbeid det tar å skrive dine egne retrospill? Hvor lett er Pong å kode for Arduino? Les mer

I dette avsnittet skal vi ordne kjerneelementene - opplæringen til skript kommer senere.

La oss først dele opp spillet til Pong i de grunnleggende komponentene. For det første trenger vi to padler og en ball. Ballen flyr utenfor skjermen, så vi vil ha en mekanisme som kan tilbakestille den. Vi vil også at tekst skal vise gjeldende poengsum, og for å vise deg alle kjerneelementene i Unity, vil vi ha en fancy partikkeleffekt når du treffer ballen. Hele spillet må være dramatisk opplyst.

Som brytes ned til en ballobjekt (en sfære), a spawner, to padle rekvisitter med partikkelemittere vedlagt, a 3D-tekst enhet, og spotlys. For denne opplæringen bruker vi standard fysisk materiale sprette, med sprett kombinere satt til multiplisere. Slik ser oppsettet ut, i ti skjermbilder:

Programmering av et spill med enhet: En nybegynnerguide enhetens programspill 4
Programmering av et spill med enhet: En nybegynnerguide enhetens programspill 5

Lag først en kube prop for padleren.

Programmering av et spill med enhet: En nybegynnerguide enhetens programspill 6

Skaler det riktig, duplisere det, og satte en sfære mellom padlene for ballen.

Programmering av et spill med enhet: En nybegynnerguide enhetens programspill 7

Deretter oppretter du en 3DText-objekt og skala og posisjon det riktig, endre skriftstørrelse attributt for å få et mindre pikslert bilde.

Programmering av et spill med enhet: En nybegynnerguide enhetsprogram 8

Deretter lager du to partikkelsystemer, velg egenskapene du ønsker, og fest dem på padlerne.

Programmering av et spill med enhet: En nybegynnerguide enhetens programspill 9
Programmering av et spill med enhet: En nybegynnerguide enhetens programspill 10

Deretter vil du gjøre det posisjon og roter kameraet slik at den rammer inn scenen riktig. Mens kameraet er valgt, kan du se en liten forhåndsvisning av kamerasynet i nedre høyre hjørne.

Programmering av et spill med enhet: En nybegynnerguide enhetens programspill 11

Før vi er ferdige, må vi lage ytterligere to terninger for å være støtfangere, for å forhindre at ballen spretter ut av spillområdet. Vi kan gjøre dem usynlige ved å fjerne merket for mesh renderer i inspektør fane.

Programmering av et spill med enhet: En nybegynnerguide enhetsprogrammet 13
Programmering av et spill med enhet: En nybegynnerguide enhetens programspill 14

Hvis du treffer play, kan du nå se de grunnleggende elementene i spillet vårt. De vil ikke gjøre noe ennå, men det får vi til!

Programmering av et spill med enhet: En nybegynnerguide enhetsprogramspill 12

Nå som vi har fått det oppsettet, skal vi snakke om hva som er involvert i skripting av disse elementene for å lage et spill.

6. Skripting i enhet

Når du har koblet et skript til et objekt, kan du revidere det ved å dobbeltklikke på det i inspektør. Dette åpnes MonoDevelop, standardutviklingsmiljøet for Unity. I hovedsak er Monodevelop en tekstredigerer med funksjoner som er spesielt optimalisert for programmering.

Nøkkelord og kommentarer blir fremhevet i blå og grønn, og numeriske verdier og strenger vises i rød. Hvis du har brukt det Formørkelse eller andre IDE-er, er MonoDevelop veldig lik. Du kan bygge skriptene dine fra redaktøren for å se etter syntaksfeil, slik:

Programmering av et spill med enhet: En nybegynnerguide enhetsprogram 15

Generelt sett, for å få skriptet ditt til å samhandle med Unity, må du referere til elementer som objektet som holder skriptet besitter (du kan se en liste over disse elementene under inspektør kategorien når det aktuelle objektet er valgt). Du kan deretter ringe metoder eller angi variabler for hvert av disse elementene for å gjennomføre endringene du ønsker.

Hvis du vil at et skript på et objekt skal påvirke egenskapene til et annet objekt, kan du opprette et tomt GameObject variabelen i skriptet ditt, og bruk inspektør å tilordne det til et annet objekt i scenen.

En liste over elementene et objekt kan ha er som følger (hentet fra inspektørbildet til en av padlene våre i eksemplet ovenfor):

  1. Forvandle
  2. Cube (nettfilter)
  3. Box Collider
  4. Mesh Renderer

Hver av disse aspektene av objektet kan påvirkes fra et skript. Deretter skal vi se nøyaktig hvordan.

6.1 Transform

Transformasjonsfunksjonene for et GameObject i Unity kontrollerer de fysiske parametrene til det objektet: det skala, det er posisjon, og dets orientering. Du kan få tilgang til dem fra et skript som dette:

transform.position = newPositionVector3; transform.rotation = newRotationQuaternion; transform.localScale = newScaleVector3;

I eksemplene ovenfor er de nevnte variablene av typene som er spesifisert i navnene. Det er noen viktige detaljer her: posisjon og skala lagres som du kan forvente Vector3s. Du får tilgang til X, Y, og Z komponenter i hver (for eksempel, transform.position.y gir deg avstanden til et objekt over nullplanet).

For å unngå gimbal lås, rotasjoner blir håndtert som kvaternioner (firekomponentvektorer). Fordi håndmanipulering av kvartær er uintuitivt, kan du manipulere rotasjoner ved å bruke euleriske vinkler ved å bruke Quaternion. Euler slik:

transform.rotation = kvartær. Euler (tonehøyde, gjespe, rulle);

Hvis du ønsker å flytte objekter jevnt fra et sted til et annet, finner du det Slerp metode for kvartær og vektor3s nyttig. Slerp tar inn tre argumenter - den nåværende tilstanden, den endelige tilstanden og hastigheten på endringen, og interpolerer jevnt mellom dem med den gitte hastigheten. Syntaks ser slik ut:

transform.position = Vector3.Slerp (startPositionVector3, newDestinationVector3, 1);

6.2 Innleverer

Gjengiverfunksjonene i Unity lar deg kontrollere måten overflatene til rekvisitter blir gjengitt på skjermen. Du kan tilordne tekstur på nytt, endre farge og endre skyggelegging og synlighet av objektet. Syntaks ser slik ut:

renderer.enabled = falsk; renderer.material.color = ny farge (0, 255, 0); renderer.material.mainTexture = myTexture; renderer.material.shader = newShader;

De fleste av disse har ganske tydelige funksjoner. Det første eksemplet gjør det aktuelle objektet usynlig: et nyttig triks i en rekke situasjoner. Det andre eksemplet tilordner et nytt RGB-farge (nemlig grønn) til det aktuelle objektet. Den tredje tildeler den viktigste diffuse tekstur til en ny strukturvariabel. Det siste eksemplet endrer shader av objektets materiale til en nylig definert shader-variabel.

6.3 Fysikk

Enhet leveres med en integrert fysikkmotor - noe som fysikk sandkassespill Smash, Drive & Build: 3 Awesome Physics Sandboxes Simulatorer Les mer all bruk. Dette lar deg tilordne de fysiske egenskapene til objekter og la detaljene i simuleringen deres håndteres for deg. Generelt, i stedet for å prøve å implementere din egen fysikk ved hjelp av en lærebok og transformasjonssystemet, er det enklere og mer robust å bruke Unitys fysikkmotor i størst mulig grad.

Alle fysikkrekvisitter krever colliders. Imidlertid håndteres selve simuleringen av en stiv kropp, som kan legges til i inspektør utsikt. Rigidbodies kan være kinematisk eller nonkinematic.

Kinematisk fysikkrekvisitter kolliderer med (og virker) ikke-kinematiske fysikkrekvisitter rundt dem, men påvirkes ikke av kollisjon selv. Statiske kinematiske rekvisitter er de ordspråklige immoveable objektene, og bevegelige kinematiske objekter er de ordspråklig ustoppelig styrke (for rekorden, når de kolliderer, passerer de ganske enkelt gjennom hver annen).

Utover det kan du justere objektets vinkeldrag (hvor mye energi det tar å snurre det), endre massen, diktere om den er påvirket av tyngdekraften eller ikke, og bruke krefter på den.

eksempler:

rigidbody.angularDrag = 0,1f; rigidbody.mass = 100; rigidbody.isKinematisk = usant; rigidbody.useGravity = true; stiv kropp. AddForce (transform.forward * 100);

Disse er alle ganske selvforklarende. Det eneste du må merke seg her er bruken av transform.forward. Vector3's har alle tre komponenter (.framover, .opp, og .Ikke sant) tilknyttet dem, som du får tilgang til og roterer med dem (framover er retningen på den blå pilen i redaktøren). De transform.forward nøkkelord er ganske enkelt fremvektoren for det nåværende objektet med størrelsesorden 1. Det kan multipliseres med en flottør for å skape mer kraft på objektet. Du kan også referere transform.up og transform.right, og neger dem for å få reversering.

6.4 Kollisjon

Ofte, når du bygger et spill, vil du ha en kollisjon for å resultere i endring av tilstanden i koden din, utover bare fysikksimulering. For dette trenger du a metode for påvisning av kollisjon.

Det kreves en viss mengde forarbeid for å oppdage kollisjoner i Unity. For det første trenger minst ett av gjenstandene i kollisjonen a ikke-kinematisk stivkropp festet til den. Begge objektene må ha riktige kollidere, satt til å være ikke-triggere. Totalhastigheten til begge objektene må være lav nok til at de faktisk kolliderer, i stedet for å bare hoppe gjennom hverandre.

Hvis du har tatt alt av det, kan du sjekke for kollisjon ved å plassere en spesiell metode for påvisning av kollisjon i et skript som er knyttet til objektet du ønsker å kontrollere kollisjon med. Metoden vil se slik ut:

ugyldig OnCollisionEnter (Collision other) {// gjør ting her. }

Denne metoden kjøres automatisk i løpet av den første rammen som et annet objekt berører objektet ditt. Kollisjonsenheten annen er en referanse til objektet du treffer. Du kan for eksempel referere til dets gameobject, stiv kropp, og forvandle egenskaper for å manipulere det på forskjellige måter. Samtidig som OnCollisionEnter er sannsynligvis den vanligste funksjonen du bruker, du kan også bruke OnCollisionExit og OnCollisionStay (med ellers identisk syntaks og bruk), som aktiverer under den første rammen at du slutter å kollidere med et objekt og under hver ramme du kolliderer med et objekt.

Noen ganger kan det også være nyttig å gjøre det som kalles raycasting. Ved stråling, en uendelig tynn linje (a stråle) blir kastet gjennom verden fra en eller annen opprinnelse, langs noen vektor, og når den treffer noe, returneres posisjonen og andre detaljer ved den første kollisjonen. Koden for en raycast ser slik ut:

RaycastHit hit; if (Fysikk. Raycast (transform.position, -Vector3.up, ut hit)) {float distanceToGround = hit.distance; }

Dette kaster en stråle fra posisjonen til det nåværende objektet langs -Vector3.up (rett ned), og kobler variabelen truffet til den første gjenstanden den kolliderer med. Når strålen din har truffet noe, kan du få tilgang hit.distance å bestemme hvor langt det er, eller truffet. GameObject å manipulere objektet du treffer.

Stråler som dette kan brukes til skyttere for å bestemme hva pistolen pekte på, eller til å velge gjenstander når kameraet ser på dem, eller for bestemte stiler av bevegelsesmekaniker.

6.5 Tidskorrigering

En viktig faktor du må huske på når du manipulerer objekter på denne måten har å gjøre med framerate. Uansett hvor nøye du optimaliserer, vil framerater alltid variere, og du vil ikke at spillhastigheten skal variere tilsvarende. Hvis noen andre kjører spillet ditt på en raskere datamaskin enn du utviklet det på, vil du ikke at spillet skal kjøres med dobbel hastighet.

Måten du korrigerer for dette er ved å multiplisere verdiene du bruker med tiden det tok å gjengi den siste rammen. Dette gjøres ved å bruke Time.deltaTime. Dette endrer effektivt hastigheten til alle variabler du øker hver ramme fra endring per ramme til endring per sekund, og du bør sannsynligvis gjøre denne endringen til enhver verdi du øker eller dekrementerer hver ramme.

6.6 Lydkilder og lyttere

Nå som vi har dekket hvordan vi oppretter, gjengir og kontrollerer objekter, la oss snakke om den andre betydningen dataspill kan tjene: lyd. Enhet støtter to slags lyder: 2D og 3D lyder. 3D-lyder varierer volumet deres basert på avstand, og forvrenger når de beveger seg i forhold til kameraet. 2D-lyder gjør det ikke.

2D-lyder er passende for voice-overs og bakgrunnsmusikk, og 3D-lyder gjelder for lyder generert av hendelser i verden. For å endre om lyden er 3D eller ikke, velger du den i prosjekt visning, bytt til inspektør vis og velg det aktuelle alternativet fra rullegardinmenyen, og trykk deretter på importere knapp.

For å faktisk spille av lyden, må du legge ved en audiosource til en rekvisitt (rekvisitten du vil at lyden skal stamme fra, i tilfelle av en 3D-lyd). Da må du åpne audioclip og velg lydfilen din.

Du kan bruke myAudioSource. Pause() og myAudioSource. Spille() for å kontrollere lydfilene. Du kan justere nedfallsatferd, volum og dopplerforskyvning av lydene under inspektør fane for lydkilden.

6.7 Innspill

Et spill som ikke har noen innspill fra brukeren, er ikke mye av et spill. Det er mange forskjellige typer innspill du kan lese i, og nesten alle av dem er tilgjengelige gjennom Input og Nøkkelkode objekter. Noen eksempler på inndata (som har verdier evaluert hver ramme) er nedenfor.

Vector3 mousePos = Input.mousePosition; bool isLeftClicking = Input. GetMouseButton (0); bool isPressingSpace = Input. GetKey (KeyCode. Rom);

Funksjonene til disse linjene er for det meste selvforklarende. Ved hjelp av disse tre typer inngangsreferanser kan du rekonstruere kontrollskjemaene til de fleste moderne 3D-dataspill.

6.8 Feilsøke et skript

La oss si at et skript ikke fungerer. Som den gode legen sier, det kan skje bangups og hangups med deg. Hvis det er direkte syntaksfeil med C #, vil spillet generelt nekte å kjøre når du treffer play, og noen ganske nyttige feilmeldinger blir gitt hvis du bygge skriptene fra redaktøren. Se nedenfor:

Programmering av et spill med enhet: En nybegynnerguide enhetens programspill 16

Disse feilene er vanligvis ikke de vanskeligste å fikse. Det som kan være mer problematisk er subtile semantiske feil, der du har skrevet en fil full av gyldig C # - bare ikke en som gjør det du trodde det ville gjort. Hvis du har en av disse feilene, og du har problemer med å spore den opp, er det noen få ting du kan prøve å forbedre situasjonen.

Den første er å pause utførelsen av spillet, og sjekke konsollen. Du kan ta spillet på pause ved å klikke på pause ikonet i den øvre midtre delen av redigereren, og velg deretter konsoll fra bunnen av vindu meny (eller trykk på Ctrl > Skifte > C). Selv om det ikke er noen feil, kan advarsler fortsatt bidra til å gi noen ledetråder om hva som kan gå galt.

Hvis dette ikke fungerer, kan du også prøve å få noen ide om tilstanden til skriptet ditt ved å skrive ut tilstanden til interne variabler for å bekrefte at programmet gjør det du tror det gjør. Du kan bruke Debug. Logg (streng) for å skrive ut innholdet i en streng til konsollen når programutførelsen treffer den linjen. Generelt, hvis du jobber bakover fra det du tror burde skje gjennom de tingene som skal være Når du får det til, vil du til slutt komme til et punkt der feilsøkingene dine ikke gjør det du forventer at de skal gjøre gjøre. Det er der feilen din er.

7. Eksempel: Scripting Pong

For å bygge Pong, la oss dele spillet ned i kjerneelementene: vi trenger en ball som ricochets frem og tilbake mellom padlene ved å øke hastighet, vi trenger et resultattavle som vet når ballene har passert padlerne, og vi trenger en mekanisme for å starte ballen på nytt når den skjer. Et godt første skritt ville være å legge en ikke-kinematisk stiv kropp til ballen, to kinematiske stive legemer til padler, deaktiver tyngdekraften for dem alle, og tilordne et passende fysisk materiale fra standardverdiene (sprette med sprett kombinere satt til multiplisere).

Nedenfor kan du se skriptet til ballen med forklarende kommentarer. Ballen trenger å oppnå noen grunnleggende mål: den skal sprette i et komplisert mønster, alltid vedlikeholde bevegelse på begge akser, og den skal akselerere i et utfordrende, men ikke umulig tempo i horisontalen retning.

BallHandler.cs

Deretter må vi skripte padlen vår, som du kan se nedenfor. Padelen må bevege seg opp og ned som svar på tastetrykk (men ikke utenfor visse grenser). Det må også utløse partikkelsystemet når det kolliderer med noe.

PaddleHandler.cs

Deretter trenger vi fiendens AI: noe som vil føre til at fiendens padle sporer mot ballen med en fast hastighet. For det bruker vi Vector3.Slerp for maksimal enkelhet. Vi vil også like den samme partikkelatferden som vi ser på vår egen padle.

EnemyAI.cs

Til slutt trenger vi et manus for å oppdatere resultattavlen og tilbakestille ballen når den går utenfor.

ScoreboardUpdater.cs

Når vi kjører vårt skript av Pong, opplever vi spill!

Programmering av et spill med enhet: En nybegynnerguide enhetsprogram 18

Du kan last ned min Pong-demo, hvis du vil se alt jeg har skissert i aksjonen. Den kjører på Windows, Mac og Linux-systemer.

8. Utforske dokumentasjonen / lære mer

Unity er en kompleks motor med mange flere funksjoner enn det som muligens kunne dekkes i en guide av denne stilen, og det er før du inkluderer det store utvalget av (gratis og kommersielle) enhetsutvidelser tilgjengelig på internett. Denne guiden vil gi deg et sterkt utgangspunkt for å utvikle et spill, men selvopplæring er en viktig ferdighet i enhver anstrengelse, og dobbelt så her.

En avgjørende ressurs her er Unity ScriptReference. ScriptReference er en søkbar database, tilgjengelig for både C # og Javascript, som har en liste av hver Unity-kommando og funksjon, med beskrivelser av deres funksjoner og korte eksempler på syntaks.

Hvis du har problemer med redigereren og grensesnittet til Unity, eller bare liker videoopplæringer som et spørsmål om å foretrekke, er det en lang liste med høy kvalitet Unity video tutorials The Best Unity 3D Tutorials for BeginnersVil du utvikle spill med Unity, men vet ikke hvor du skal begynne? Prøv en av disse fantastiske Unity 3D-veiledningene i dag. Les mer tilgjengelig. Mer omfattende (men mindre bred) tekstveiledninger for Unity er også tilgjengelig fra CatLikeCoding.

Til slutt, hvis du har spørsmål utenfor dokumentasjons- eller opplæringsområdet, kan du stille spesifikke spørsmål på svarene. Unity3d.com. Husk at svar blir gitt av frivillige, så respekter deres tid og søk først i databasen for å forsikre deg om at spørsmålet ditt ikke allerede er besvart.

9. Bygge spillet ditt / kompilere til en frittstående applikasjon

Når du har bygd noe du er stolt av (eller du er ferdig med å klone vårt litt møkkete Pong-eksempel for å øve), er det på tide å flytt spillet ditt fra redaktøren og gjør det til noe du kan legge ut på internett og tvinge dine venner og familie til spille. For å gjøre det, må du bygge et frittstående program. Den gode nyheten er at i Unity er dette veldig, veldig enkelt. Det er imidlertid noen få potensielle hikke som du vil være forsiktig med.

For det første vet du at du bare kan bygge et feilfritt prosjekt. Sørg for at du har konsollen åpen mens du bygger det: det er noen feilforhold som spillet vil ignorere i redaktøren, men som fortsatt vil avbryte en forsøkt bygging. Dette slipper bare feilmeldinger til konsollen uten synlige resultater på skjermen, noe som kan være frustrerende hvis du glemmer å sjekke. Når du har laget spillet uten feil, kan du imidlertid velge Bygg innstillinger under Fil meny, eller trykk på Ctrl > Skifte
> B. Dette vil få opp en enkel dialog som lar deg bygge spillet ditt for flere plattformer.

Programmering av et spill med enhet: En nybegynnerguide enhetsprogram 17

Prosessen derfra er selvforklarende: velg alternativene og trykk bygge; spillet ber deg om en katalog å installere på, og vil plassere både den kjørbare og datakatalogen der. Disse to filene kan kobles sammen og distribueres (bare pass på at du ikke belaster for et spill som er innebygd i Unity-demoen, da dette bryter vilkårene for tjenesten).

10. Avslutningsnotater

Som med alle spillutviklingsverktøy er nøkkelen til suksess med Unity iterativ utvikling. Du må bygge i håndterbare trinn - være ambisiøs, for all del, men vær ambisiøs i små biter, og ordne de biter slik at selv om du ikke kommer til din ultimate ambisjon, vil du i det minste avvikle med en sammenhengende produkt.

Få de mest avgjørende elementene først: ha en ide i tankene dine minimum levedyktig produkt, den enkleste, mest bare bein-tingen du muligens kan skape og fremdeles føles som om du oppnådde noe verdt. Få til det minste levedyktige prosjektet før du går videre til større ambisjoner.

Denne opplæringen gir deg et sterkt utgangspunkt, men den beste måten å lære enhet er ved å bygge et spill. Begynn å bygge et spill, fyll ut kunnskapene dine når de dukker opp, og den gradvise flyten av kunnskap vil tømme bort det du ikke vet overraskende raskt.

Hvis du har lest alt dette og er litt overveldet av kodingen som kreves med Unity, må du sjekke ut hvordan du lære spillutvikling med Unity Learn Unity Learn er den enkleste måten å mestre spillutviklingVil du begynne å utvikle dine egne spill? Unity Learn er den beste og enkleste måten å lære og mestre det du trenger å vite. Les mer og les også vår guide om hvordan lage videospill uten programmering Hvordan lage videospill uten programmeringVil du lage et videospill, men kan ikke kode? Bruk deretter et videospillkonstruksjonssett som lar deg bygge spill uten koding! Les mer .

Enhet er et kraftig verktøy, og med litt leting kan du bygge imponerende prosjekter med det raskere enn du kanskje forventer. Gi oss beskjed om hva du bygde i kommentarene nedenfor - vi vil gjerne se!

Andre er en skribent og journalist med base i Sørvest, og garantert å være funksjonell opptil 50 grader Celcius, og er vanntett til en dybde på tolv meter.