Reklame

Et overraskende træk ved internetøkonomien er stigningen af ​​indie-videospil. Når det eksklusive domæne af triple-A-studios med flere millioner dollars, er der udviklet et antal værktøjssæt, der bringe moderne spiludviklingsressourcer i hænderne på enkeltpersoner eller små ad-hoc samlinger af programmerere og designere. Vi har tidligere diskuteret bedste indiespil 10 indie-spil så gode, at du glemmer, at de overhovedet er indieDer kan dog være tidspunkter, hvor du vil have noget andet end indienormen. Et spil, der følger indie-værdier, men alligevel er lavet med den kvalitet, som øverste hylde AAA-spil er kendt for. Titler som ... Læs mere , så sørg for at tjekke dem ud for noget inspiration til, hvad der kan opnås med værktøjer som f.eks. Enhed.

Denne vejledning kan downloades som en gratis PDF. Download programmering af et spil med enhed: En begynderguide nu. Du er velkommen til at kopiere og dele dette med dine venner og familie.

Disse indie-spiludviklingshold har vist en smidighed og risikotolerance, som i mange tilfælde tillader dem at skubbe gameplay-innovation hurtigere end deres store budget-kolleger. En række chokerende succesrige indietitler har haft premiere i de senere år, inklusive

instagram viewer
Minecraft, Limbo, og Super kød dreng, og selvom du ikke behøver færdigheder til at lave spil som dette, kan du det lav et spil ved hjælp af Buildbox Sådan fremstilles et videospil i en uge ved hjælp af BuildboxDer er et program, der gør spiludvikling utroligt let for selv dem med absolut ingen erfaring med at designe videospil. Det kaldes Buildbox. Her er hvorfor du bør prøve det. Læs mere .

I det hurtigt udviklende landskab med indie-spiludvikling, Enhed er fremstået som noget af en de-facto-standard: dens lave omkostninger, brugervenlighed og brede funktionssæt gør det ideelt til hurtig spiludvikling. Enhed er så fleksibel, at du selv kan Lav dine egne brugerdefinerede spilkontrollere Sådan oprettes en brugerdefineret spilkontroller med Arduino og enhedHar du nogensinde ønsket at designe din egen spilcontroller? Det er lettere, end du tror! Læs mere med lidt DIY ved hvordan!

Selv store studios som CCP (Udviklere af Eve Online) brug det til hurtigt at prototype spilkoncepter. Unity giver en "spilmotor i en kasse" - en fysik- og gengivelsesmotor med kroge til flere scripting-sprog, der kan tilpasses praktisk talt enhver videospillegenre.

Selvom Unity tilvejebringer en visuel editor til at manipulere spilmiljøet, er Unity ikke et 'zero-programmerings'-spilskabelsesværktøj. Det kræver, at du programmerer for at producere resultater, men giver dig også et meget mere fleksibelt og kraftfuldt værktøj end ethvert 'spilproducent'-program muligvis kunne.

Enhed vil ikke gøre arbejdet for dig, men det reducerer hindringen for adgang betydeligt. Start helt fra bunden med C ++ og OpenGL, det kan tage dage at komme til det punkt, hvor der faktisk er noget gengivet på skærmen. Brug af Enhed tager det cirka ti sekunder. Enhed lægger de grundlæggende elementer i spiloprettelsen i hænderne på nybegynderprogrammører på en hurtig, intuitiv måde.

I dag vil jeg guide dig gennem alt hvad du har brug for at vide for at lave et spil i Unity, der er opdelt i ti hovedkapitler:

§1 – Versions af enhed

§2 – Installation af enhed

§3 - En kort introduktion til det objektorienterede paradigme

§4 – Grundlæggende om enhed

§5 – Eksempel: Grundelementer i et spil

§6 – Scripting i enhed

§7 – Eksempel: Scripting-pong

§8 – Udforske dokumentationen / lære mere

§9 - Opbygning af dit spil / kompilering til en enkeltstående applikation

§10-Lukningsnotater

1. Versioner af enhed

Enhed findes i to grundlæggende smag: pro-versionen og den gratis version. Der er en antal forskelle, men stort set understøtter pro-versionen en række visuelle forbedringer (som blød skygger i realtid og efterbehandling) og et stort antal relativt mindre funktioner, der er yderst nyttige til mere komplekse spil.

Når det er sagt, for de fleste relativt enkle spil, du måske ønsker at bygge, er den gratis version af Unity helt passende. Vi opdeler nøgleforskellene nedenfor mere detaljeret for de interesserede.

1.1 Prisfastsættelse

Den gratis version af Unity er selvfølgelig gratis. Der er dog et par begrænsninger: Den gratis version af Unity kan ikke licenseres til noget selskab med en årlig indkomst på mere end $100,000. Mens sådanne organisationer er uden for denne vejlednings rækkevidde, er det sandsynligvis klogt at springe til Pro-versionen, hvis du formoder at du bliver en sådan organisation.

Pro-versionen af ​​Unity er $75 en måned, eller $1500 for en permanent licens, og har ingen grænser for, hvad du kan gøre med de spil, der er oprettet med den. Der er også en 30-dages gratis prøveversion tilgængelig, som vi bruger til denne vejledning for at give dig så komplet oversigt over de tilgængelige funktioner som muligt. En etårig studielicens er også tilgængelig gennem Studica til $129.

1.2 Funktioner

Der er mange funktioner fraværende i den gratis version af Unity. De vigtigste forskelle er imidlertid som følger: den gratis version af Unity mangler et antal gengivelsesmuligheder, der giver mulighed for bedre udseende, hurtigere kører spil (LOD-understøttelse, skærm-plads efterbehandling, avancerede shaders, blød skygger i realtid og udsat gengivelse). Det mangler også det fulde mechanim animationssystem, og nogle AI-værktøjer.

Generelt, for komplekse projekter i stor skala eller projekter, hvor grafisk ydeevne er vigtig, er pro-versionen umagen værd. Jeg bruger pro-versionen, fordi jeg udvikler virtual reality-spil til Oculus Rift Oculus Rift ReviewVirtuel virkelighed er ikke ny, men den er endelig overkommelig og inden for vores rammer. Efter fire år og to udviklingsprototyper er den endelige forbrugerudgave af Oculus Rift ankommet. Læs mere , og understøttelse af skærmrummet efter behandling er nødvendigt for at interagere korrekt med headsettet.

2. Installation af enhed

Enhed er ligetil at installere. Du kan downloade den eksekverbare fra unity3d.com/get-unity/download.

Når det er downloadet, skal du køre det, og derefter følge installationsvejledningen. Når installationen er afsluttet, vises et vindue med titlen 'aktiver din enhedslicens'. Marker afkrydsningsfeltet "aktiver en gratis 30-dages prøveversion af Unity Pro" og derefter "OK".

Tillykke! Du har nu en 30-dages prøveversion af Unity Pro. Når prøveperioden udløber, kan du skifte til den gratis version og beholde dit eksisterende indhold, hvis du ikke ønsker at købe pro-versionen.

3. En kort introduktion til det objektorienterede paradigme

Før vi kommer i gang med Unity, er det vigtigt, at vi går lidt over det grundlæggende. Enhed understøtter begge C # og JavaScript til spilprogrammering 7 enhedsspiludviklingssprog at lære: Hvilken er bedst?Vil du begynde spiludvikling i Unity? Du har brug for fortrolighed med et af disse Unity-kompatible sprog. Læs mere ; vi samarbejder med C # til denne tutorial.

For det første, hvis du aldrig har programmeret før, skal du lægge denne tutorial til side og bruge et par dage på at arbejde gennem Microsofts C # Language Primer indtil du har det godt med at bruge sproget til enkle opgaver.

Hvis du gerne vil have noget, der er lidt anderledes end C # (men ikke nødvendigvis et sprog, du kan bruge i Unity), så kig på vores guide til seks nemmeste programmeringssprog for begyndere 6 nemmeste programmeringssprog at lære for begyndereAt lære at programmere handler om at finde det rigtige sprog lige så meget som det handler om opbygningsprocessen. Her er de seks mest nemmeste programmeringssprog for begyndere. Læs mere .

Hvis du tidligere har programmeret på et imperativt eller objektorienteret sprog som C eller Java, skal du skumme primeren og sætte dig ind i, hvordan C # adskiller sig fra andre sprog, du har brugt i fortiden. Uanset hvad, fortsæt ikke med selvstudiet, før du har det godt med at løse enkle problemer med C # (for eksempel hvis jeg skulle spørge dig til at skrive et program, der udskriver de første hundrede primtal, skal du være i stand til at skrive dette program uden at konsultere Google).

Det vigtigste koncept at forstå her er objektorienteret paradigme Hvor fik "Objektorienteret" programmering navn fra det?Objektorienteret er ikke kun et tilfældigt buzzword, du hører i programmeringskredse. Der er en grund bag navnet - men hvad? Deltag i mig, mens jeg udforsker nogle af de grundlæggende elementer i programmeringskoncepter og forklarer ... Læs mere (forkortet som OOP). I objektorienterede sprog er programmer opdelt i opkaldte funktionelle enheder objekter. Hvert objekt har sine egne private variabler og funktioner. Objektspecifikke funktioner kaldes metoder.

Ideen her er modularitet: ved at have hvert objekt isoleret og tvinge andre objekter til at interagere med det gennem dens metoder kan du reducere antallet af mulige utilsigtede interaktioner - og i forlængelse heraf bugs. Du kan også oprette objekter, du kan genbruge senere uden ændringer. I Unity bygger du disse objekter og knytter dem til spilenheder (hvis adfærd de vil styre).

Objekter er instantieret fra klasser: en klasse er bare en fil, der fastlægger definitionen af ​​dit objekt. Så hvis du vil have en Mook objekt, der håndterer AI for en fjende i dit spil, du vil skrive en 'Mook' klasse og derefter vedhæfte den fil til enhver fjendens enhed. Når du kører dit spil, vil hver fjende være udstyret med en kopi af 'Mook'-objektet.

Vedhæftning af et nyt script til et objekt ser sådan ud:

Programmering af et spil med enhed: En begynderguide enhedsprogrammets spil 1

Først, vælg objektet og gå til Inspektør. Klik på Tilføj komponent knap.

Programmering af et spil med enhed: En begynderguide enhedsprogrammets spil 2

Gå til nyt script, indtast det ønskede navn, og klik på oprette og tilføje.

Programmering af et spil med enhed: En begynderguide enhedsprogram spil 3

Nu har du et nyt script, som du kan redigere ved at dobbeltklikke på det!

En klassefil ser sådan ud:

ved hjælp af UnityEngine; offentlig klasse Mook: MonoBehaviour {privat flydende sundhed; void Start () {sundhed = 100; } ugyldig Opdatering () {if (sundhed> 0) {/ * Søg efter spiller, hvis du støder på spilleren på vejen, dræb ham, hvis du bliver skudt, fjern en tilfældig mængde sundhed * /}} }

Lad os nedbryde dette:

  • Brug af UnityEngine: Denne linje fortæller C #, at vi ønsker at bruge Unitys biblioteker, som giver os mulighed for at oprette forbindelse til Unity-spilmotoren.
  • Offentlig klasse Mook: MonoBehaviour:Denne linje angiver klassen og dens navn - Mook.
  • Privat float sundhed: Dette erklærer en privat klassevariabel (som kun kan ændres indefra i klassen). Variablen gives en værdi i Start.
  • Intet start (): Dette erklærer en kaldet metode Start. Start er en speciel metode, der kun kører én gang, når spillet oprindeligt lanceres.
  • Intet opdatering (): Opdatering er en anden speciel metode, der kører på alle rammer. Det meste af din spillogik går her.
  • // Hvis du støder på spilleren på vejen, skal du dræbe ham: Denne linje er en kommentar (enhver linje, der starter med en dobbelt skråstreg ignoreres af C #). Kommentarer bruges til at minde dig selv om, hvad bestemte kodestykker gør. I dette tilfælde bruges denne kommentar til at stå i en mere kompliceret kodeblok, der faktisk gør, hvad kommentaren beskriver.

Sammen med Start og Opdatering, kan du instantisere dine egne metoder med næsten ethvert navn. Metoder, du opretter, kører dog ikke, medmindre de kaldes. Lad os erklære en metode til en kaldet hypotetisk klasse addTwoNumbers der tilføjer to tal sammen:

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

Dette erklærer en offentlig (tilgængelig for andre objekter) metode, der returnerer en float, kaldet addTwoNumbers, der tager to flydere som input (kaldet -en og b). Derefter returnerer summen af ​​de to værdier som dens output.

Opkald til denne metode inden for samme klasse (sig fra indefra Opdatering) ser sådan ud:

float resultat = addTwoNumbers (1, 2);

At kalde metoden fra en anden klasse ligner:

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

Igen, dette skaber bare et eksempel på vores klasse, får adgang til den passende metode og mater det numre, vi vil tilføje, og gemmer derefter resultatet i resultat. Enkel.

Hvis dit script er knyttet til et objekt, der har specielle egenskaber (som en partikelemitter), der ikke er adgang til under det normale sæt af GameObject-parametre kan du vælge at behandle det som en anden slags spilenhed ved hjælp af det GetComponent metode.

Syntaks for det ser sådan ud:

GetComponent().Spil();

Hvis noget af dette ikke er kendt for dig, skal du gå tilbage og gå gennem C # primeren. Det sparer dig for meget frustration, når vi fortsætter.

4. Unity Basics

I dette afsnit skal vi arbejde os gennem Unity-motorens grundlæggende mekanik. Arbejdsgangen i Unity går sådan ud:

  1. Opret en enhed til at tjene en rolle i spillet (tomt GameObjects kan bruges til abstrakte logiske opgaver).
  2. Skriv eller find en klassefil, og tilføj den til enheden som et script (ved hjælp af Tilføj komponent knappen i inspektør udsigt.
  3. Løb > prøve > fejlfinde > gentage indtil det fungerer og gå videre til det næste element i spillet.

Enhed leveres med et antal grundlæggende visningstabeller, der kan opstilles på forskellige måder efter brugerens smag. De store fem er:

  1. Spil: viser et kørende eksempel på spillet, som du kan interagere med og teste.
  2. Scene: leverer en statisk, redigerbar version af spilverden.
  3. Inspektør: giver dig mulighed for at ændre individuelle enheder i spilverdenen ved at vælge dem i redaktør fane.
  4. Projekt: giver dig mulighed for at gennemse projektets filer og trække modeller, materialer og andre ressourcer ind i redaktør fane for at placere dem i spilverdenen.
  5. Hierarki: denne fane viser alle objekter i verden, så du kan finde fjerne objekter i scenen og overordnede enheder til hinanden ved at klikke og trække.

Se nedenstående diagram for placeringen af ​​alle disse ting:

Programmering af et spil med enhed: En begynderguide enhedsprogrammets spil 0

4.1 Enhedsenheder

4.1.1 Meshes

Mesh er vejen 3D geometri er repræsenteret i Enhed. Du kan enten bruge Unitys indbyggede primitiv genstande (terninger, kugler, cylindre osv.), eller importer dine egne 3D-modeller fra en modelleringspakke som Blender Kom godt i gang med Blender: 7 fantastiske tutorials til nybegynder3D-modellering er en fremragende måde at udøve kreativitet, mens du holder kontakten med din tekniske side. Her er nogle fantastiske gratis tutorials. Læs mere eller Maya Læring af Maya 2016: Hvor man kommer i gangMaya er et værktøj, der bruges til 3D-animation, men det leveres med en utrolig stejl indlæringskurve. Hvilket godt undervisningsmateriale er der? Læs mere . Unity understøtter en række 3D-formater, herunder .fbx, og .3ds.

De grundlæggende værktøjer til at manipulere masker er skalering, rotation og oversættelsesknapper i øverste venstre hjørne af interface. Disse knapper tilføjer kontrolikoner til modellerne i redigeringsvisningen, som derefter kan bruges til at manipulere dem i rummet. For at ændre et objekts tekstur eller fysikegenskaber skal du vælge dem og bruge inspektør for at analysere materiale og rigidbody elementer.

4.1.2 GUI-elementer

Traditionelle GUI-sprites og tekst kan vises ved hjælp af GUI-tekst og GUI-struktur GameObjects i redaktøren. Imidlertid er en mere robust og realistisk måde at håndtere UI-elementer på at bruge 3D-tekst og Quad GameObjects (med gennemsigtige strukturer og en ubelyst gennemsigtig skygge) for at placere HUD-elementer i spilverdenen som enheder.

I hierarki set, kan disse gameplay-elementer trækkes på hovedkameraet for at gøre dem til børn, hvilket sikrer, at de bevæger sig og roterer med kameraet.

GUI-elementer (tekst og teksturer) kan justeres størrelse og skala ved hjælp af de relevante felter i inspektørfanen.

4.1.3 Materialer

Materialer er kombinationer af teksturer og shaders Fem vigtige PC Gaming-vilkår forklaretHvis du spiller et spil på en konsol, håndteres de tekniske detaljer for dig. Nogle spillere foretrækker dette, men pc-spillere nyder ofte den større grad af kontrol, de har over et spils øje ... Læs mere , og kan trækkes direkte på spilobjekter fra projektfanen. Et stort antal skygger leveres med Unity Pro, og du kan justere strukturen, der er knyttet til dem ved hjælp af fanen Inspector for et objekt, som de er anvendt på.

Hvis du vil importere en struktur, skal du konvertere den til en .jpg, .png, eller .bmp, og træk det ind i aktiver -mappen under Unity-projektkataloget (som vises i Mine dokumenter som standard). Efter nogle få sekunder vises en indlæsningsbjælke i editoren. Når det er færdigt, kan du finde billedet som en struktur under projekt fane.

4.1.5 Lys

Lys er GameObjects som projicerer udstråling til verden. Hvis der ikke er lys i din scene, tegnes alle polygoner i samme lysstyrkeniveau, hvilket giver verden et fladt, udvasket look.

Lys kan placeres, drejes og har flere interne egenskaber, som du kan tilpasse. Det intensitet skyderen styrer lysets lysstyrke og rækkevidde styrer, hvor hurtigt den falmer ud.

Retningslinjerne i scenevisning viser dig det maksimale belysningsområde. Spil med begge indstillinger for at opnå den ønskede effekt. Du kan også justere lysets farve, mønsteret (cookie vises på den overflade, hvor lyset peges på, og hvilken slags blusser der vises på skærmen, når man ser direkte på lyset. Cookien kan bruges til at forfalde mere realistiske lysmønstre, skabe dramatiske falske skygger og simulere projektorer.

De tre hovedtyper af lys er få øje på, punkt, og retningsbestemt.

Spotlys have en placering i 3D-rum og projektlys kun i en retning i en kegle med variabel vinkel. Disse er gode til lommelygter, lygter og generelt giver dig en mere præcis kontrol med belysningen. Spotlys kan kaste skygger.

Punktlys har en placering i 3D-rum og kaster lys jævnt i alle retninger. Punktlamper kaster ikke skygger.

Retningslysendelig bruges til at simulere sollys: de projicerer lys i en retning som fra uendeligt langt væk. Retningslys påvirker alle objekter i scenen og kan producere skygger.

4.1.6 Partikelsystemer

EN Partikelsystem er en GameObject der genererer og kontrollerer hundreder eller tusinder af partikler samtidigt. Partikler er små, optimerede 2D-objekter, der vises i 3D-rum. Partikelsystemer bruger forenklet gengivelse og fysik, men kan vise tusinder af enheder i realtid uden stamming, hvilket gør dem ideelle til røg, ild, regn, gnister, magiske effekter og mere.

Der er mange parametre, som du kan finjustere for at opnå disse effekter, og du kan få adgang til dem ved at gyde et partikelsystem under komponenteditor > valg af partikelsystemet > åbning af inspektør fanen. Du kan ændre størrelse, hastighed, retning, rotation, farve og struktur på hver partikel og indstille de fleste af disse parametre til at ændre sig over tid også.

Under kollision attribut, hvis du aktiverer det og indstiller simuleringsrummet til verden får du partikler, der vil kollidere med genstande i verden, som kan bruges til en række realistiske partikeleffekter, herunder regn, bevægende vand og gnister.

5. Eksempel: Grundlæggende elementer i et spil

Til denne tutorial vil vi lave et simpelt spil Pong - noget, vi har dækket flere gange i DIY før:

  • Arduino Classic Pong Sådan genskabes det klassiske pong-spil ved hjælp af ArduinoPong var den første videospil nogensinde, der nåede til massemarkedet. For første gang i historien blev konceptet med et "videospil" bragt ind i familiens hjem takket være Atari 2600 -... Læs mere
  • Arduino OLED Pong Arduino Retro-spil med en OLED-skærmHar du nogensinde spekuleret på, hvor meget arbejde det kræver at skrive dine egne retrospil? Hvor let er Pong at kode for Arduino? Læs mere

I dette afsnit skal vi overveje at arrangere kerneelementerne - tutorial til scripting kommer senere.

Lad os først fordele spillet Pong i dets grundlæggende komponenter. For det første har vi brug for to padler og en bold. Bolden flyver væk fra skærmen, så vi vil have en mekanisme til at nulstille den. Vi ønsker også, at tekst skal vise den aktuelle score, og af hensyn til at vise dig alle kerneelementerne i Unity, vil vi have en fin partikeleffekt, når du rammer bolden. Hele spillet skal tændes dramatisk.

Det bryder sammen i en kugleobjekt (en sfære), a spawner, to padle rekvisitter med partikelemittere vedhæftet, a 3D-tekst-enhed, og spotlys. Til denne tutorial bruger vi det fysiske standardmateriale bounce, med hoppe kombinere indstillet til formere sig. Sådan ser opsætningen ud i ti skærmbilleder:

Programmering af et spil med enhed: En begynderguide enhedsprogrammets spil 4
Programmering af et spil med enhed: En begynderguide enhedsprogramspil 5

Opret først en terning prop til padlen.

Programmering af et spil med enhed: En begynders guide enhedsprogramspil 6

Skaler det passende, kopiere det, og læg en sfære mellem padlerne til bolden.

Programmering af et spil med enhed: En begynderguide enhedsprogramspil 7

Opret derefter en 3DText-objekt og vægt og position det korrekt, ændre skriftstørrelse attribut for at få et mindre pixelat billede.

Programmering af et spil med enhed: En begynderguide enhedsprogrammets spil 8

Opret derefter to partikelsystemer, vælg de ønskede egenskaber, og fastgør dem på padlerne.

Programmering af et spil med enhed: En begynderguide enhedsprogram spil 9
Programmering af et spil med enhed: En begynderguide enhedsprogramspil 10

Dernæst vil du gerne position og drej kameraet så det indrammer scenen korrekt. Mens kameraet er valgt, kan du se en lille forhåndsvisning af kameraets visning i nederste højre hjørne.

Programmering af et spil med enhed: En begynderguide enhedsprogramkamp 11

Inden vi er færdige, er vi nødt til at oprette yderligere to terninger, der skal være stødfangere, for at forhindre bolden i at sprænge ud af spilleområdet. Vi kan gøre dem usynlige ved at fjerne markeringen af mesh renderer i inspektør fane.

Programmering af et spil med enhed: En begynderguide enhedsprogramspil 13
Programmering af et spil med enhed: En begynderguide enhedsprogramspil 14

Hvis du rammer spillet, kan du nu se de grundlæggende elementer i vores spil lagt ud. De vil ikke gøre noget endnu, men vi kommer til det!

Programmering af et spil med enhed: En begynderguide enhedsprogramspil 12

Nu når vi har fået denne opsætning, skal vi tale om, hvad der er involveret i scripting af disse elementer for at lave et spil.

6. Scripting i enhed

Når du har knyttet et script til et objekt, kan du revidere det ved at dobbeltklikke på det i inspektør. Dette åbnes MonoDevelop, standardudviklingsmiljøet for Unity. I det væsentlige er Monodevelop en teksteditor med funktioner, der er specifikt optimeret til programmering.

Nøgleord og kommentarer fremhæves i blå og grøn, og numeriske værdier og strenge vises i rød. Hvis du har brugt det Formørkelse eller andre IDE'er, MonoDevelop er meget ens. Du kan build dine scripts fra inde i editoren for at kontrollere for syntaksfejl, sådan:

Programmering af et spil med enhed: En begynderguide enhedsprogram spil 15

Generelt, for at få dit script til at interagere med Unity, skal du henvise til elementer, som objektet, der indeholder scriptet besidder (du kan se en liste over disse elementer under inspektør fanen, når det relevante objekt er valgt). Du kan derefter kalde metoder eller indstille variabler for hvert af disse elementer for at aktivere de ønskede ændringer.

Hvis du vil have et script på et objekt til at påvirke egenskaberne for et andet objekt, kan du oprette et tomt GameObject variabel i dit script, og brug inspektør at tildele det til et andet objekt i scenen.

En liste over de elementer, et objekt kan have, er som følger (hentet fra inspektørvisningen af ​​en af ​​vores padler i ovenstående eksempel):

  1. Transform
  2. Cube (Mesh-filter)
  3. Box Collider
  4. Mesh Renderer

Hver af disse aspekter af objektet kan påvirkes fra et script. Dernæst skal vi se på nøjagtigt hvordan.

6.1 Transform

Transformationsfunktionerne for et GameObject i Enhed styrer de fysiske parametre for det pågældende objekt: dets vægt, dets position, ogdet er orientering. Du kan få adgang til dem fra et script som dette:

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

I ovenstående eksempler er de navngivne variabler af de typer, der er specificeret i navnene. Der er et par nøgleinformationer her: placering og skala gemmes som forventet, som Vector3s. Du kan få adgang til x, Y, og Z komponenter i hver (f.eks. transform.position.y giver dig afstanden til et objekt over nulplanet).

Dog for at undgå gimbal lås, rotationer håndteres som quaternions (firekomponentvektorer). Da håndmanipulering af kvaternioner ikke er intuitive, kan du manipulere rotationer ved hjælp af euleriske vinkler ved at bruge Quaternion. Euler metode som sådan:

transform.rotation = kvartær. Euler (tonehøjde, gab, rulle);

Hvis du ønsker at flytte objekter glat fra et sted til et andet, finder du det Slerp metode til kvaternioner og vector3s hjælpsom. Slerp indtager tre argumenter - den aktuelle tilstand, den endelige tilstand og ændringshastigheden og interpoleres let mellem dem med den givne hastighed. Syntaks ser sådan ud:

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

6.2 Udgiver

Gengiverfunktionerne i Unity giver dig mulighed for at kontrollere, hvordan rekvisitaernes overflader gengives på skærmen. Du kan tildele strukturen igen, ændre farve og ændre objektets skygger og synlighed. Syntaks ser sådan ud:

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

De fleste af disse har ret klare funktioner. Det første eksempel gør det pågældende objekt usynligt: ​​et nyttigt trick i en række situationer. Det andet eksempel tildeler et nyt RGB farve (nemlig grønt) til det pågældende objekt. Den tredje tildeler den vigtigste diffuse struktur til en ny strukturvariabel. Det sidste eksempel ændrer shader af objektets materiale til en nyligt defineret shader-variabel.

6.3 Fysik

Enhed leveres med en integreret fysikmotor - noget der fysik sandkasse spil Smash, Drive & Build: 3 Awesome Physics Sandboxes Simulatorer Læs mere al brug. Dette giver dig mulighed for at tildele genstands fysiske egenskaber og lade detaljerne i deres simulering håndteres for dig. Generelt snarere end at forsøge at implementere din egen fysik ved hjælp af en lærebog og transformeringssystemet, er det enklere og mere robust at bruge Unitys fysikmotor i videst muligt omfang.

Alle fysik-rekvisitter kræver colliders. Imidlertid håndteres selve simuleringen af ​​en rigidbody, som kan tilføjes i inspektør udsigt. Rigidbodies kan være kinematisk eller nonkinematic.

Kinematisk fysik-rekvisitter kolliderer med (og virkning) ikke-kinematiske fysik-rekvisitter omkring dem, men påvirkes ikke selv af kollision. Statiske kinematiske rekvisitter er de ordsprogelige, immoveable objekter, og bevægelige kinematiske objekter er de ordsig ustoppelig kraft (for rekorden, når de kolliderer, passerer de simpelthen gennem hver Andet).

Derudover kan du justere objektets vinkeltræk (hvor meget energi det tager at dreje det), ændre dens masse, diktere, om det er påvirket af tyngdekraften eller ikke, og anvende kræfter på det.

Eksempler:

rigidbody.angularDrag = 0,1f; rigidbody.mass = 100; rigidbody.isKinematisk = falsk; rigidbody.useGravity = sandt; rigidbody. AddForce (transform.forward * 100);

Disse er alle temmelig selvforklarende. Den eneste ting at bemærke her er brugen af transform.forward. Vector3's har alle tre komponenter (.frem, .op, og .højre) tilknyttet dem, som kan fås adgang til og roterer med dem (frem er retningen for den blå pil i redaktøren). Det transform.forward nøgleord er simpelthen den fremadrettede vektor for det aktuelle objekt med styrke 1. Det kan ganges med en flyder for at skabe mere kraft på objektet. Du kan også referere transform.up og transform.rightog negere dem for at få deres vende.

6.4 Kollision

Ofte, når du bygger et spil, vil du gerne have en kollision, der resulterer i en vis ændring af tilstanden i din kode, udover bare fysikssimulering. Til dette har du brug for en metode til påvisning af kollision.

Der er en vis mængde prep-arbejde, der kræves for at opdage kollisioner i Unity. For det første har mindst et af objekterne i kollisionen brug for a ikke-kinematisk stiv krop knyttet til det. Begge objekter skal have korrekte colliders, indstillet til at være ikke-triggere. Begge genstands totale hastighed skal være lav nok til, at de faktisk kolliderer i stedet for blot at springe gennem hinanden.

Hvis du har taget alt det taget hånd om, kan du tjekke for kollision ved at placere en speciel kollisionsdetektionsmetode i et script knyttet til det objekt, du gerne vil kontrollere kollision med. Metoden vil se sådan ud:

ugyldigt OnCollisionEnter (Collision other) {// gør ting her. }

Denne metode køres automatisk i den første ramme, hvor et andet objekt berører dit objekt. Kollisionsenheden Andet er en henvisning til det objekt, du rammer. Du kan f.eks. Henvise til dens gameobject, rigidbody, og omdanne egenskaber til at manipulere det på forskellige måder. Mens OnCollisionEnter er sandsynligvis den mest almindelige funktion, du bruger, du kan også bruge OnCollisionExit og OnCollisionStay (med ellers identisk syntaks og anvendelse), som aktiverer under den første ramme, at du holder op med at kollidere med et objekt og under hver ramme, som du kolliderer med et objekt.

Nogle gange kan det også være nyttigt at gøre det, der hedder raycasting. Ved stråling, en uendelig tynd linje (a ray) kastes gennem verden fra en eller anden oprindelse, langs en eller anden vektor, og når det rammer noget, returneres positionen og andre detaljer ved den første kollision. Koden til en raycast ser sådan ud:

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

Dette kaster en stråle fra positionen af ​​det aktuelle objekt langs -Vector3.up (lige ned) og forbinder variablen hit til det første objekt, det kolliderer med. Når din stråle har ramt noget, kan du få adgang hit.distance at bestemme, hvor langt det er, eller hit. GameObject at manipulere det objekt, du rammer.

Raycasts som dette kan bruges til skydere til at bestemme, hvad pistolen har peget på, eller til at vælge objekter, når kameraet ser på dem, eller til bestemte stilarter af bevægelsesmekaniker.

6.5 Tidskorrektion

En vigtig faktor, du skal huske på, når du manipulerer genstande på denne måde, har at gøre med framerate. Uanset hvor omhyggeligt du optimerer, vil rammer altid variere, og du vil ikke have, at din spilhastighed skal variere i overensstemmelse hermed. Hvis en anden kører dit spil på en hurtigere computer, end du har udviklet det på, vil du ikke, at spillet skal køre med dobbelt hastighed.

Den måde, du korrigerer til dette på, er ved at multiplicere de værdier, du bruger, med den tid, det tog for at gengive den sidste ramme. Dette gøres ved hjælp af Time.deltaTime. Dette ændrer effektivt hastigheden på enhver variabel, du øger hver ramme fra ændring pr. ramme til skift pr. sekund, og du skal sandsynligvis foretage denne ændring til enhver værdi, du øger eller nedbryder hver ramme.

6.6 Lydkilder og lyttere

Nu hvor vi har dækket, hvordan man opretter, gengiver og kontrollerer objekter, lad os tale om den anden mening, som computerspil kan tjene: nemlig lyd. Enhed understøtter to slags lyde: 2D og 3D lyde. 3D-lyde varierer deres lydstyrke baseret på afstand og forvrænger, når de bevæger sig i forhold til kameraet; 2D-lyde gør det ikke.

2D-lyde er passende til voice-overs og baggrundsmusik, og 3D-lyde gælder for lyde genereret af begivenheder i verden. For at ændre, om en lyd er 3D eller ikke, skal du vælge den i projekt visning, skift til inspektør se og vælg den passende mulighed i rullemenuen, og tryk derefter på genimport knap.

For faktisk at kunne afspille lyden, skal du vedhæfte en audiosource til en rekvisitter (den rekvisitter, du vil have lyden til at stamme fra, i tilfælde af en 3D-lyd). Så skal du åbne audioclip felt og vælg din lydfil.

Du kan bruge myAudioSource. Pause() og myAudioSource. Spil() for at kontrollere disse lydfiler. Du kan justere nedfaldsadfærd, lydstyrke og doppler-forskydning af lydene under inspektør fane til audiosource.

6.7 Input

Et spil, der ikke modtager input fra brugeren, er ikke meget af et spil. Der er mange forskellige slags input, du kan læse i, og næsten alle er tilgængelige via Input og Nøgle kode objekter. Nogle eksempler på inputindgange (som har en værdier, der evalueres hver ramme) er nedenfor.

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

Funktionerne i disse linjer er for det meste selvforklarende. Ved hjælp af disse tre slags inputreference kan du rekonstruere kontrolplanerne for de fleste moderne 3D-computerspil.

6.8 Fejlfinding af et script

Lad os sige, at et script ikke fungerer. Som den gode læge siger, kan bangups og hangups ske med dig. Hvis der er direkte syntaksfejl med din C #, vil spillet generelt nægte at køre, når du rammer spil, og der leveres nogle forholdsvis nyttige fejlmeddelelser, hvis du build scripterne fra redaktøren. Se nedenunder:

Programmering af et spil med enhed: En begynderguide enhedsprogramspil 16

Disse bugs er typisk ikke det sværeste at løse. Hvad der kan være mere problematisk er subtile semantiske fejl, hvor du med succes har skrevet en fil fuld af gyldig C # - bare ikke en der gør det, som du troede, det ville gøre. Hvis du har en af ​​disse fejl, og du har problemer med at spore den op, er der et par ting, du kan prøve at forbedre situationen.

Den første er at stoppe udførelsen af ​​spillet og kontrollere konsollen. Du kan sætte spillet på pause ved at klikke på pause ikonet i den øverste midterste del af editoren, og vælg derefter konsol fra bunden af vindue menu (eller ved at trykke på Ctrl > Flytte > C). Selv hvis der ikke er nogen fejl, kan advarsler stadig hjælpe med at give nogle ledetråde til, hvad der kan gå galt.

Hvis dette ikke fungerer, kan du også prøve at få en idé om tilstanden til dit script ved at udskrive tilstanden for interne variabler for at bekræfte, at programmet gør det, du tror, ​​det gør. Du kan bruge Fejlfinde. Log (streng) at udskrive indholdet af en streng til konsollen, når programudførelsen rammer den linje. Generelt, hvis du arbejder baglæns fra det, du mener burde ske gennem de ting, der skulle være der får det til at ske, vil du til sidst nå et punkt, hvor dine debug-udskrifter ikke gør, som du forventer at de skal gøre. Det er her din fejl er.

7. Eksempel: Scripting Pong

For at opbygge Pong, lad os dele spillet ned i dets kerneelementer: vi har brug for en kugle, der ricochets frem og tilbage mellem padlerne ved stigende hastighed, vi har brug for et resultattavle, der ved, hvornår kuglerne har passeret padlerne, og vi har brug for en mekanisme til at genstarte bolden, når sker. Et godt første skridt ville være at tilføje en ikke-kinematisk stiv krop til bolden, to kinematiske stive legemer til padle, deaktiver tyngdekraften for dem alle, og tildel et passende fysisk materiale fra standardaktiverne (bounce med hoppe kombinere indstillet til formere sig).

Nedenfor kan du se scriptet til bolden med forklarende kommentarer. Bolden skal nå nogle grundlæggende mål: den skal hoppe i et kompliceret mønster, altid vedligeholdende bevægelse på begge akser, og det skal accelerere i et udfordrende, men ikke umuligt tempo i vandret retning.

BallHandler.cs

Dernæst skal vi scriptere vores padle, som du kan se nedenfor. Padlen skal bevæge sig op og ned som svar på tastetryk (men ikke uden for visse grænser). Det er også nødvendigt at udløse partikelsystemet, når det kolliderer med noget.

PaddleHandler.cs

Dernæst har vi brug for fjendens AI: noget der får fjendens padle til at spore mod bolden med en fast hastighed. Til det bruger vi Vector3.Slerp for maksimal enkelhed. Vi vil også gerne have den samme partikelopførsel, som vi ser på vores egen padle.

EnemyAI.cs

Endelig har vi brug for et script for at opdatere resultattavlen og nulstille bolden, når det går uden for grænserne.

ScoreboardUpdater.cs

Med de vedlagte scripts og referencerne udfyldt, når vi kører vores spil Pong, oplever vi gameplay!

Programmering af et spil med enhed: En begynderguide enhedsprogramspil 18

Du kan download min Pong-demo, hvis du gerne vil se alt, hvad jeg har skitseret i handling. Det kører på Windows, Mac og Linux-systemer.

8. Udforske dokumentationen / lære mere

Enhed er en kompleks motor med mange flere funktioner, end det muligvis kunne dækkes i en guide til denne stil, og det er inden du inkluderer den store række af (gratis og kommercielle) enhedsudvidelser, der er tilgængelige på internettet. Denne guide giver dig et stærkt udgangspunkt for at udvikle et spil, men selvuddannelse er en vigtig færdighed i enhver bestræbelse, og dobbelt så her.

En vigtig ressource her er Unity ScriptReference. ScriptReference er en søgbar database, der er tilgængelig for både C # og Javascript, som har en liste af hver enheds-kommando og -funktion med beskrivelser af deres funktioner og korte eksempler på syntaks.

Hvis du har problemer med redigeringen og grænsefladen for Unity, eller bare som videotutorials som et spørgsmål om at foretrække, er der en lang liste med høj kvalitet Unity video tutorials De bedste enheds 3D-tutorials for begyndereVil du udvikle spil med Unity, men ved ikke, hvor du skal starte? Prøv en af ​​disse fantastiske Unity 3D-tutorials i dag. Læs mere ledig. Mere omfattende (men mindre bred) tekstvejledninger til Unity fås også fra CatLikeCoding.

Endelig, hvis du har spørgsmål ud over anvendelsesområdet for dokumentation eller tutorials, kan du stille specifikke spørgsmål på svar. Unity3d.com. Husk, at svarene leveres af frivillige, så respekter deres tid og søg først i databasen for at sikre dig, at dit spørgsmål ikke allerede er besvaret.

9. Opbygning af dit spil / kompilering til en enkeltstående applikation

Når du har bygget noget, du er stolt af (eller du er færdig med at klone vores lidt svimlende Pong-eksempel til praksis), er det tid til flyt dit spil fra redaktøren og gør det til noget, du kan sende på Internettet og tvinge dine venner og familie til Spil. For at gøre det, skal du oprette en enkeltstående applikation. Den gode nyhed er, at i Enhed er dette meget, meget let. Der er dog et par potentielle hickcoughs, som du vil være forsigtig med.

For det første skal du vide, at du kun kan opbygge et fejlfrit projekt. Med henblik herpå skal du sørge for at have konsollen åben, mens du bygger: der er nogle fejlbetingelser, som spillet ignorerer i editoren, men stadig afbryder en forsøgt build. Dette dumper kun fejlmeddelelser til konsollen uden synlige resultater på skærmen, hvilket kan være frustrerende, hvis du glemmer at tjekke. Når du først har fundet dit spil, der er fejlfrit, kan du vælge Byg indstillinger under Fil menu, eller tryk på Ctrl > Flytte
> B. Dette åbner en enkel dialog, der giver dig mulighed for at bygge dit spil til flere platforme.

Programmering af et spil med enhed: En begynders guide enhedsprogrammets spil 17

Processen derfra er selvforklarende: vælg dine indstillinger og tryk build; spillet beder dig om et bibliotek at installere til og vil placere både det eksekverbare og datakatalog der. Disse to filer kan lynlåses sammen og distribueres (bare sørg for, at du ikke opkræver et spil, der er indbygget i Unity-demoen, da dette overtræder servicevilkårene).

10. Lukningsnotater

Som med ethvert spiludviklingsværktøj er nøglen til succes med Unity iterativ udvikling. Du er nødt til at bygge i håndterbare trin - være ambitiøs på alle måder, men vær ambitiøs i små bidder, og arranger disse bidder sådan, at selv hvis du ikke kommer til ud fra din ultimative ambition, vil du i det mindste afvikle med en sammenhængende produkt.

Få de mest afgørende elementer først: har en idé i tankerne om din minimum levedygtigt produkt, den enkleste, mest nakne knogle ting, du muligvis kunne skabe og stadig føle, som om du opnåede noget værd. Gå til det minimale levedygtige projekt, før du går videre til større ambitioner.

Denne tutorial giver dig et stærkt udgangspunkt, men den bedste måde at lære Enhed er ved at opbygge et spil. Begynd med at opbygge et spil, udfyld huller i din viden, når de dukker op, og den gradvise strøm af viden vil erodere de ting, du ikke ved, overraskende hurtigt.

Hvis du har læst alt dette og er lidt overvældet af den kodning, der kræves med Unity, skal du kontrollere, hvordan du lær spiludvikling med Unity Learn Unity Learn er den nemmeste måde at mestre spiludvikling påVil du begynde at udvikle dine egne spil? Unity Learn er den bedste og nemmeste måde at lære og mestre, hvad du har brug for at vide. Læs mere og læs også vores vejledning om hvordan man laver videospil uden programmering Hvordan man laver videospil uden programmeringVil du lave et videospil, men kan ikke kode? Brug derefter et videospilskonstruktionssæt, der giver dig mulighed for at bygge spil uden nogen kodning krævet! Læs mere .

Enhed er et kraftfuldt værktøj, og med lidt efterforskning kan du bygge imponerende projekter med det hurtigere end du kunne forvente. Fortæl os, hvad du har opbygget i kommentarerne herunder - vi ville meget gerne se!

Andre er en forfatter og journalist med base i det sydvestlige USA, og det garanteres at forblive funktionelt op til 50 grader Celcius og er vandtæt til en dybde på 12 meter.