Annons
Ett överraskande inslag i internetekonomin är ökningen av indie-videospel. När den exklusiva domänen för tusentals, trippel-A-studior med flera miljoner dollar har utvecklats ett antal verktygssatser som ta med moderna spelutvecklingsresurser i händerna på individer eller små ad-hoc-samlingar av programmerare och designers. Vi har tidigare diskuterat bästa indie-spel 10 Indie-spel så bra, du kommer glömma att de är Indie allsDet kan dock finnas tillfällen där du vill ha något annat än indienormen. Ett spel som följer indievärden, men görs med den kvalitet som AAA-spel på topphyllan är kända för. Titlar som ... Läs mer , så se till att du kolla in dem för lite inspiration om vad som kan uppnås med verktyg som Unity.
Dessa indie-spelutvecklingsteam har visat en smidighet och risktolerans som i många fall tillåter dem att driva gameplay-innovation snabbare än deras stora budget motsvarigheter. Ett antal chockerande framgångsrika indititlar har haft premiär under de senaste åren, inklusive
Minecraft, Limbo, och Super Meat Boy, och även om du inte behöver färdigheter för att göra spel som detta kan du göra det skapa ett spel med Buildbox Hur man skapar ett videospel i en vecka med BuildboxDet finns ett program som gör spelutveckling otroligt lätt för även de med absolut ingen erfarenhet av att designa videospel. Det heter Buildbox. Här är varför du bör prova det. Läs mer .I det snabbt utvecklande landskapet med indie-spelutveckling, Enhet har framstått som något av en de facto-standard: dess låga kostnader, användarvänlighet och breda funktionsuppsättningar gör det idealiskt för snabb spelutveckling. Enheten är så flexibel att du kan till och med skapa dina egna spelkontroller Hur man skapar en anpassad spelkontroller med Arduino och enhetHar du någonsin velat utforma din egen spelkontroll? Det är lättare än du tror! Läs mer med lite DIY vet hur!
Till och med stora studior som CCP (utvecklare av Eve Online) använd den för att snabbt prototypa spelkoncept. Unity tillhandahåller en "spelmotor i en låda" - en fysik- och återgivningsmotor med krokar för flera skriptspråk, anpassningsbara till praktiskt taget alla typer av videospel.
Medan Unity tillhandahåller en visuell redigerare för att manipulera spelmiljön, är Unity inte ett verktyg för "programmering av spel". Det kräver att du programmerar för att producera resultat, men ger dig också ett mycket mer flexibelt och kraftfullt verktyg än något "speltillverkare" -program möjligen kunde.
Enhet gör inte jobbet åt dig, men det minskar inträdesbarriären väsentligt. Från början helt med C ++ och OpenGL kan det ta dagar att komma till den punkt där det faktiskt finns något som visas på skärmen. Med Unity tar det cirka tio sekunder. Enhet lägger de grundläggande elementen i spelskapandet i händerna på nybörjare som programmerar på ett snabbt, intuitivt sätt.
Idag guidar jag dig genom allt du behöver veta för att skapa ett spel i Unity, som är uppdelat i tio huvudkapitel:
§1 – Enhetsversioner
§2 – Installera enhet
§3 - En kort introduktion till det objektorienterade paradigmet
§4 – Enhetsgrunder
§5 – Exempel: Baselement i ett spel
§6 – Scripting i enhet
§7 – Exempel: Scripting Pong
§8 – Utforska dokumentationen / lära sig mer
§9 - Bygg ditt spel / sammanställning till en fristående applikation
§10 - Avslutande anmärkningar
1. Versioner av enhet
Enhet finns i två grundläggande smaker: pro-versionen och gratisversionen. Det är en antal skillnader, men i stort sett stöder proversionen ett antal visuella förbättringar (som mjuka skuggor i realtid och efterbehandling) och ett stort antal relativt små funktioner som är oerhört användbara för mer komplexa spel.
Som sagt, för de flesta relativt enkla spel du kanske vill bygga, är den fria versionen av Unity helt tillräcklig. Vi kommer att dela upp de viktigaste skillnaderna nedan mer i detalj för de intresserade.
1.1 Prissättning
Den kostnadsfria versionen av Unity är naturligtvis gratis. Det finns emellertid några begränsningar: den fria versionen av Unity kan inte licensieras till något företag med en årsinkomst på mer än $100,000. Även om sådana organisationer ligger utanför denna guide, om du misstänker att du skulle bli en sådan organisation, är det förmodligen klokt att komma till Pro-versionen.
Pro-versionen av Unity är $75 en månad, eller $1500 för en permanent licens och har inga begränsningar för vad du kan göra med de spel som skapats med den. Det finns också en 30-dagars kostnadsfri testperiod som vi kommer att använda för den här guiden för att ge dig en så fullständig översikt över tillgängliga funktioner som möjligt. En ettårig studentlicens finns också tillgänglig genom Studica för $129.
1.2 Funktioner
Det finns många funktioner som saknas i den fria versionen av Unity. De viktigaste skillnaderna är emellertid följande: Den fria versionen av Unity saknar ett antal återgivningsalternativ som tillåter snyggare, snabbare löpande spel (LOD-stöd, efterbehandling av skärmutrymme, avancerade skuggare, mjuka skuggor i realtid och uppskjuten tolkning). Det saknar också fullständigt mekanim animationssystem, och några AI-verktyg.
I allmänhet, för komplexa storskaliga projekt eller projekt där grafisk prestanda är viktig, är proversionen värdefull. Jag använder proversionen eftersom jag utvecklar virtual reality-spel för Oculus Rift Oculus Rift ReviewVirtual Reality är inte nytt, men det är äntligen överkomligt och inom vårt grepp. Efter fyra års och två utvecklingsprototyper har den slutliga konsumentutgåvan av Oculus Rift kommit. Läs mer och stöd för skärmutrymme efter bearbetning är nödvändigt för att interagera korrekt med headsetet.
2. Installera enhet
Enheten är enkel att installera. Du kan ladda ner den körbara filen från unity3d.com/get-unity/download.
När du laddat ner den kör du den och följ sedan installationsinstruktionerna. När installationen är klar visas ett fönster med titeln "aktivera din Unity-licens". Markera rutan "aktivera en gratis 30-dagars testversion av Unity Pro" och sedan "OK".
Grattis! Du har nu en 30-dagars test av Unity Pro. När rättegången löper ut, om du inte vill köpa pro-versionen, kan du byta till gratisversionen och behålla ditt befintliga innehåll.
3. En kort introduktion till det objektorienterade paradigmet
Innan vi börjar med Unity är det viktigt att vi går lite över grunderna. Enhet stöder båda C # och JavaScript för spelprogrammering 7 Unity Game-utvecklingsspråk att lära sig: Vilket är bäst?Vill du börja spelautveckling i Unity? Du behöver bekanta dig med ett av dessa Unity-kompatibla språk. Läs mer ; vi kommer att arbeta med C # för den här tutorialen.
Först och främst, om du aldrig har programmerat förut, lägg denna handledning åt sidan och spendera några dagar på att arbeta genom Microsofts C # Language Primer tills du känner dig bekväm att använda språket för enkla uppgifter.
Om du vill ha något som är annorlunda än C # (men inte nödvändigtvis ett språk du kan använda i Unity), ta en titt på vår guide till sex enklaste programmeringsspråk för nybörjare 6 enklaste programmeringsspråk att lära sig för nybörjareAtt lära sig programmera handlar om att hitta rätt språk lika mycket som det handlar om uppbyggnadsprocessen. Här är de sex bästa enklaste programmeringsspråken för nybörjare. Läs mer .
Om du tidigare har programmerat på ett nödvändigt eller objektorienterat språk som C eller Java, kan du skumma grundaren och bekanta dig med hur C # skiljer sig från andra språk du har använt tidigare. Hursomhelst, fortsätt inte med självstudien förrän du känner dig bekväm att lösa enkla problem med C # (till exempel om jag skulle fråga du ska skriva ett program som skriver ut de första hundra primtalen, du bör kunna skriva det programmet utan att konsultera Google).
Det viktigaste begreppet att förstå här är objektorienterat paradigm Var fick "Objektorienterad" programmering sitt namn från?Objektorienterad är inte bara ett slumpmässigt surrord du hör i programmeringskretsar. Det finns en anledning bakom namnet - men vad? Följ med mig när jag utforskar några av grunderna i programmeringskoncept och förklarar ... Läs mer (förkortat som OOP). I objektorienterade språk delas program in i funktionella enheter som kallas Föremål. Varje objekt har sina egna privata variabler och funktioner. Objektspecifika funktioner kallas metoder.
Idén här är modularitet: genom att ha varje objekt isolerat och tvinga andra objekt att interagera med det genom dess metoder kan du minska antalet möjliga oavsiktliga interaktioner - och i förlängningen, buggar. Du kan också skapa objekt som du kan återanvända senare utan ändring. I Unity bygger du dessa objekt och kopplar dem till spelenheter (vars beteende de kommer att styra).
Objekt instanseras från klasser: en klass är bara en fil som innehåller definitionen av ditt objekt. Så om du vill ha en Mook objekt som hanterar AI för en fiende i ditt spel, du skulle skriva en "Mook" klass och sedan bifoga den filen till varje fiendens enhet. När du kör ditt spel kommer varje fiende att vara utrustad med en kopia av 'Mook' -objektet.
Bifoga ett nytt skript till ett objekt ser så här ut:
Först, välj objektet och gå till Inspektör. Klicka på Lägg till komponent knapp.
Gå till nytt manus, ange namnet du vill ha och klicka på skapa och lägga till.
Nu har du ett nytt skript som du kan redigera genom att dubbelklicka på det!
En klassfil ser ut så här:
använder UnityEngine; public class Mook: MonoBehaviour {privat flytande hälsa; void Start () {hälsa = 100; } void Update () {if (hälsa> 0) {/ * Sök efter spelare om du stöter på spelaren på vägen, döda honom om du blir skjuten, ta bort en slumpmässig mängd hälsa * /}} }
Låt oss bryta ned detta:
- Använda UnityEngine: Denna rad berättar för C # att vi vill använda Unitys bibliotek, som gör att vi kan ansluta till Unity-spelmotorn.
- Offentlig klass Mook: MonoBehaviour:Denna rad förklarar klassen och dess namn - Mook.
- Privat flottörhälsa: Detta förklarar en privat klassvariabel (som bara kan ändras från klassen). Variabeln ges ett värde i Start.
- Void Start (): Detta förklarar en metod som heter Start. Start är en speciell metod som bara körs en gång när spelet först startas.
- Void Update (): Uppdatering är en annan speciell metod som körs på varje ram. Det mesta av din spellogik kommer att gå här.
- // om du stöter på spelaren på vägen, döda honom: Den här raden är en kommentar (vilken rad som börjar med en dubbel snedstreck ignoreras av C #). Kommentarer används för att påminna dig om vad specifika kodbitar gör. I det här fallet används den här kommentaren för att stå i ett mer komplicerat kodblock som faktiskt gör det som kommentaren beskriver.
Tillsammans med Start och Uppdatering, kan du anpassa dina egna metoder med nästan alla namn. Metoder som du skapar körs dock inte om de inte har ringt. Låt oss förklara en metod för en hypotetisk klass som heter addTwoNumbers som lägger till två siffror tillsammans:
public float addTwoNumbers (float a, float b) {return a + b; }
Detta förklarar en offentlig (tillgänglig för andra objekt) metod som returnerar en flottör, kallad addTwoNumbers, som tar två flottörer som input (kallas en och b). Därefter returnerar summan av de två värdena som dess utgång.
Att ringa denna metod från samma klass (säg inifrån Uppdatering) ser ut så här:
flottörresultat = addTwoNumbers (1, 2);
Att kalla metoden från en annan klass är liknande:
addTwoNumbers instans; flottörresultat = exempel.addTwoNumbers (1, 2);
Återigen skapar detta bara en instans av vår klass, får åtkomst till lämplig metod och matar in numren vi vill lägga till och lagrar sedan resultatet i resultat. Enkel.
Om ditt skript är kopplat till ett objekt som har specialegenskaper (som en partikelemitter) som inte kan nås under den normala uppsättningen av GameObject-parametrar kan du välja att behandla det som en annan typ av spelenhet genom att använda de GetComponent metod.
Syntaxen för det ser ut så här:
GetComponent().Spela();
Om något av detta är okänt för dig, gå tillbaka och gå igenom C # primern. Det kommer att spara dig mycket frustration när vi fortsätter.
4. Unity Basics
I det här avsnittet kommer vi att arbeta oss igenom den grundläggande mekaniken i Unity-motorn. Arbetsflödet i Unity går så här:
- Skapa en enhet för att tjäna en roll i spelet (tomt GameObjects kan användas för abstrakta logiska uppgifter).
- Skriv eller hitta en klassfil och lägg till den till enheten som ett skript (med hjälp av Lägg till komponent knappen i inspektör se.
- Springa > testa > debug > upprepa tills det fungerar och gå vidare till nästa element i spelet.
Enhet kommer med ett antal grundläggande flikar som kan läggas ut på olika sätt för användarens smak. De stora fem är:
- Spel: visar en löpande instans av spelet som du kan interagera med och testa.
- Scen: ger en statisk, redigerbar version av spelvärld.
- Inspektör: låter dig ändra enskilda enheter i spelvärlden genom att välja dem i redaktör flik.
- Projekt: låter dig bläddra igenom projektets filer och dra modeller, material och andra resurser till redaktör för att placera dem i spelvärlden.
- Hierarki: den här fliken visar alla objekt i världen, så att du kan hitta avlägsna objekt i scenen och överordnade enheter till varandra genom att klicka och dra.
Se diagrammet nedan för platserna för alla dessa saker:
4.1 Enhetsenheter
4.1.1 Meshes
Mesh är vägen 3D geometri representeras i Enhet. Du kan antingen använda Unitys inbyggda primitiv objekt (kuber, sfärer, cylindrar, etc), eller importera dina egna 3D-modeller från ett modelleringspaket som Blandare Komma igång med Blender: 7 fantastiska tutorials för nybörjare3D-modellering är ett utmärkt sätt att utöva kreativitet samtidigt som du håller kontakten med din tekniska sida. Här är några fantastiska gratisstudier. Läs mer eller maya Lär Maya 2016: Var man kommer igångMaya är ett verktyg som används för 3D-animering, men det kommer med en otroligt brant inlärningskurva. Vilket bra läromedel finns det? Läs mer . Unity stöder olika 3D-format, inklusive .fbx, och .3 ds.
De grundläggande verktygen för att manipulera nät är skalnings-, rotations- och översättningsknapparna i gränssnittets övre vänstra hörn. Dessa knappar lägger till kontrollikoner till modellerna i redigeringsvyn, som sedan kan användas för att manipulera dem i rymden. Om du vill ändra ett objekts struktur eller fysikegenskaper väljer du dem och använder inspektör för att analysera material och Rigidbody element.
4.1.2 GUI-element
Traditionella GUI-sprites och text kan visas med hjälp av GUI-text och den GUI-struktur GameObjects i redaktören. Men ett mer robust och realistiskt sätt att hantera UI-element är att använda 3D-text och Quad GameObjects (med transparenta strukturer och en upplyst transparent shader) för att placera HUD-element i spelvärlden som enheter.
I hierarki se, dessa spelelement kan dras till huvudkameran för att göra dem barn, så att de rör sig och roterar med kameran.
GUI-element (text och texturer) kan justera sin storlek och skala med relevanta fält på inspektörsfliken.
4.1.3 Material
Material är kombinationer av texturer och shaders Fem viktiga PC-spelvillkor förklaradeOm du spelar ett spel på en konsol, hanteras de tekniska detaljerna åt dig. Vissa spelare föredrar detta, men PC-spelare åtnjuter ofta den större grad av kontroll de har över spelets öga ... Läs mer , och kan dras direkt till spelobjekt från projektfliken. Ett stort antal skuggare levereras med Unity Pro, och du kan justera strukturen som är fäst på dem med inspektörsfliken för ett objekt som de appliceras på.
Om du vill importera en textur konverterar du den till en .jpg, .png, eller .bmpoch dra den in i tillgångar -mappen under Unity-projektkatalogen (som visas i Mina dokument som standard). Efter några sekunder visas en lastningsfält i redigeraren. När den är klar kan du hitta bilden som en struktur under projekt flik.
4.1.5 Ljus
Ljus är GameObjects som projicerar utstrålning mot världen. Om det inte finns några ljus i din scen, dras alla polygoner med samma ljusstyrka, vilket ger världen ett platt, tvättat utseende.
Ljus kan placeras, roteras och har flera interna egenskaper som du kan anpassa. De intensitet reglaget styr ljusets ljusstyrka och räckvidd styr hur snabbt det bleknar ut.
Riktlinjerna i scenvy visar belysningens maximala räckvidd. Spela med båda inställningarna för att uppnå önskad effekt. Du kan också justera ljusets färg, mönstret (kaka visas på ytan som ljuset pekas på, och vilken typ av blossning som visas på skärmen när man tittar direkt på ljuset. Cookien kan användas för att förfalska mer realistiska ljusmönster, skapa dramatiska falska skuggor och simulera projektorer.
De tre huvudtyperna av ljus är fläck, punkt, och riktnings.
Spotljus ha en plats i 3D-utrymme och projektljus endast i en riktning i en kon med variabel vinkel. Dessa är bra för ficklampor, strålkastare och i allmänhet ger dig en mer exakt kontroll av belysningen. Spotljus kan kasta skuggor.
Pekljus ha en plats i 3D-utrymme och kasta ljus jämnt i alla riktningar. Punktlampor kastar inte skuggor.
Riktningsljusslutligen används för att simulera solljus: de projicerar ljus i en riktning som från oändligt långt borta. Riktningsljus påverkar alla objekt i scenen och kan ge skuggor.
4.1.6 Partikelsystem
EN Partikelsystem är en GameObject som genererar och kontrollerar hundratals eller tusentals partiklar samtidigt. Partiklar är små, optimerade 2D-objekt som visas i 3D-utrymme. Partikelsystem använder förenklad rendering och fysik, men kan visa tusentals enheter i realtid utan stamning, vilket gör dem idealiska för rök, eld, regn, gnistor, magiska effekter och mer.
Det finns många parametrar som du kan justera för att uppnå dessa effekter, och du kan komma åt dem genom att leka ett partikelsystem under komponentredaktör > val av partikelsystem > öppnar inspektörsfliken. Du kan ändra storlek, hastighet, riktning, rotation, färg och struktur på varje partikel och ställa in de flesta av dessa parametrar för att också ändras över tiden.
Under kollision attribut, om du aktiverar det och ställer in simuleringsutrymmet till värld får du partiklar som kommer att kollidera med föremål i världen, som kan användas för ett antal realistiska partikeleffekter, inklusive regn, rörligt vatten och gnistor.
5. Exempel: Baselement i ett spel
För den här tutorialen kommer vi att göra ett enkelt spel av Pong - något som vi har täckt flera gånger i DIY tidigare:
- Arduino Classic Pong Hur man återskapar det klassiska Pong-spelet med ArduinoPong var den första videospel som någonsin nått massmarknaden. För första gången i historien fördes begreppet "videospel" in i familjens hem, tack vare Atari 2600 -... Läs mer
- Arduino OLED Pong Arduino Retro Gaming med en OLED-skärmHar du någonsin undrat hur mycket arbete som krävs för att skriva dina egna retrospel? Hur lätt är Pong att koda för Arduino? Läs mer
I det här avsnittet kommer vi att gå igenom arrangera kärnelementen - handledning för skript kommer senare.
Först, låt oss dela upp Pong-spelet i dess grundläggande komponenter. Först behöver vi två paddlar och en boll. Bollen flyger utanför skärmen, så vi vill att en mekanism återställer den. Vi vill också att text ska visa den aktuella poängen, och för att visa dig alla kärnelement i Unity, vill vi ha en fin partikeleffekt när du slår bollen. Hela spelet måste vara dramatiskt upplyst.
Det bryts ned till en bollobjekt (en sfär), a spawner, två padderstöd med partikelavgivare bifogad, a 3D-text enhetoch spot light. För den här tutorialen använder vi det fysiska standardmaterialet studsa, med studsa kombinera satt till multiplicera. Så här ser installationen ut i tio skärmdumpar:
Skapa först en kub prop för paddla.
Skala det på lämpligt sätt, duplicera det, och sätta en sfär mellan paddlarna för bollen.
Skapa sedan en 3DText-objekt och skala och placera det korrekt, ändra textstorlek attribut för att få en mindre pixelerad bild.
Skapa sedan två partikelsystem, välj de egenskaper du vill ha och fäst dem på paddlarna.
Nästa, du vill placera och rotera kameran så att det ramar in scenen korrekt. Medan kameran är vald kan du se en liten förhandsvisning av kamerans vy i det nedre högra hörnet.
Innan vi är klar måste vi skapa ytterligare två kuber som ska vara stötfångare, för att förhindra att bollen springar ut ur spelområdet. Vi kan göra dem osynliga genom att avmarkera nätgivare i inspektörsflik.
Om du träffar spel kan du nu se de grundläggande delarna av vårt spel. De kommer inte göra någonting ännu, men vi kommer till det!
Nu när vi har fått den inställningen kommer vi att prata om vad som är involverat i att skripta dessa element för att skapa ett spel.
6. Skript i enhet
När du har kopplat ett skript till ett objekt kan du ändra det genom att dubbelklicka på det i inspektör. Detta öppnas Monodevelop, standardutvecklingsmiljön för Unity. I huvudsak är Monodevelop en textredigerare med funktioner specifikt optimerade för programmering.
Nyckelord och kommentarer markeras i blå och grön, och numeriska värden och strängar visas i röd. Om du har använt Förmörkelse eller andra IDE: er, MonoDevelop är mycket lik. Du kan bygga dina skript från redaktören för att kontrollera om syntaxfel, så här:
I allmänhet, för att få ditt skript att interagera med Unity, måste du hänvisa till element som objektet som har skriptet har (du kan se en lista över dessa element under inspektör -fliken när det relevanta objektet är valt). Du kan sedan ringa metoder eller ställa in variabler för vart och ett av dessa element för att aktivera de ändringar du vill ha.
Om du vill att ett skript på ett objekt ska påverka egenskaperna hos ett annat objekt kan du skapa ett tomt GameObject variabel i ditt skript, och använd inspektör att tilldela det till ett annat objekt i scenen.
En lista över elementen ett objekt kan ha är som följer (hämtad från inspektörsvyn för en av våra paddlar i exemplet ovan):
- Omvandla
- Kub (nätfilter)
- Box Collider
- Mesh Renderer
Var och en av dessa aspekter av objektet kan påverkas inifrån ett skript. Därefter ska vi titta exakt på hur.
6.1 Transformera
Transformationsfunktionerna för ett GameObject i Enhet styr de fysiska parametrarna för det objektet: dess skala, dess placeraoch dess orientering. Du kan komma åt dem från ett skript som detta:
transform.position = newPositionVector3; transform.rotation = newRotationQuaternion; transform.localScale = newScaleVector3;
I exemplen ovan är de nämnda variablerna av de typer som anges i namnen. Det finns några viktiga detaljer här: position och skala lagras som du kan förvänta dig Vector3s. Du kan komma åt X, Y, och Z komponenter i var och en (till exempel, transform.position.y ger dig avståndet för ett objekt över nollplanet).
Men för att undvika gimbal lås, rotationer hanteras som quaternions (fyra-komponentvektorer). Eftersom handmanipulering av kvaternioner är ointuitiv kan du manipulera rotationer med eulerska vinklar med hjälp av Quaternion. Euler metod som så:
transform.rotation = Quaternion. Euler (tonhöjd, yaw, roll);
Om du vill flytta objekt smidigt från en plats till en annan hittar du det Slerp metod för quaternions och vector3s användbart. Slerp tar in tre argument - det aktuella tillståndet, det slutliga tillståndet och hastigheten på förändring och interpoleras smidigt mellan dem med den angivna hastigheten. Syntaxen ser så här ut:
transform.position = Vector3.Slerp (startPositionVector3, newDestinationVector3, 1);
6.2 Avgivare
Renderingsfunktionerna i Unity gör att du kan kontrollera hur ytorna på rekvisita görs på skärmen. Du kan tilldela strukturen, ändra färg och ändra objektets skuggning och synlighet. Syntaxen ser så här ut:
renderer.enabled = falsk; renderer.material.color = ny färg (0, 255, 0); renderer.material.mainTexture = myTexture; renderer.material.shader = newShader;
De flesta av dessa har ganska tydliga funktioner. Det första exemplet gör objektet i fråga osynligt: ett användbart trick i ett antal situationer. Det andra exemplet tilldelar ett nytt RGB-färg (nämligen grönt) till objektet i fråga. Den tredje tilldelar den huvudsakliga diffusa strukturen till en ny texturvariabel. Det sista exemplet ändrar skuggning av objektets material till en ny definierad skuggningsvariabel.
6.3 Fysik
Enheten levereras med en integrerad fysikmotor - något som fysik sandlådespel Smash, Drive & Build: 3 Awesome Physics Sandboxes Simulatorer Läs mer all användning. Detta tillåter dig att tilldela objektens fysiska egenskaper och låta detaljerna i deras simulering hanteras åt dig. I allmänhet, snarare än att försöka implementera din egen fysik med hjälp av en lärobok och transformationssystemet, är det enklare och mer robust att använda Unitys fysikmotor i största möjliga utsträckning.
Alla fysikrekvisita kräver colliders. Men själva simuleringen hanteras av en Rigidbody, som kan läggas till i inspektör se. Rigidbodies kan vara kinematisk eller nonkinematic.
Kinematiska fysikrekvisita kolliderar med (och verkar) icke-kinematiska fysikrekvisita runt dem, men påverkas inte av själva kollisionen. Statiska kinematiska rekvisita är de ordspråkiga immoverbara föremålen, och rörliga kinematiska föremål är de ordspråkig instoppbar kraft (för posten, när de kolliderar, passerar de helt enkelt genom var och en Övrig).
Utöver det kan du justera objektets vinkelläge (hur mycket energi det tar för att snurra det), ändra dess massa, diktera om det påverkas av tyngdkraft eller inte och applicera krafter på det.
Exempel:
rigidbody.angularDrag = 0,1f; rigidbody.mass = 100; rigidbody.isKinematisk = falsk; rigidbody.useGravity = true; Rigidbody. AddForce (transform.forward * 100);
Dessa är alla ganska självförklarande. Det enda att notera här är användningen av transform.forward. Vector3's har alla tre komponenter (.framåt, .upp, och .rätt) associerade med dem, som kan nås och roterar med dem (framåt- är riktningen för den blå pilen i redigeraren). De transform.forward nyckelordet är helt enkelt framåtvektorn för det aktuella objektet med storlek 1. Det kan multipliceras med en flottör för att skapa mer kraft på objektet. Du kan också referera transform.up och transform.rightoch förneka dem för att få sina vändningar.
6.4 Kollision
Ofta, när du bygger ett spel, vill du ha en kollision för att resultera i en viss statusändring i din kod, utöver bara fysikssimulering. För detta behöver du en metod för detektering av kollision.
Det krävs en viss mängd förarbeten för att upptäcka kollisioner i Unity. Först behöver minst ett av föremålen i kollisionen a icke-kinematisk styv kropp fäst vid den. Båda föremålen måste ha korrekta kolliderare, inställda som icke-triggers. Båda föremålens totala hastighet måste vara tillräckligt låg för att de faktiskt kolliderar, istället för att bara hoppa igenom varandra.
Om du har tagit hand om allt detta kan du kontrollera kollision genom att placera en speciell kollisionsdetekteringsmetod i ett skript som är kopplat till objektet du vill kontrollera kollision med. Metoden kommer att se ut så här:
void OnCollisionEnter (Collision other) {// gör saker här. }
Den här metoden körs automatiskt under den första ramen som ett annat objekt rör vid ditt objekt. Kollisionsenheten Övrig är en referens till det objekt du träffar. Du kan till exempel referera till dess gameobject, Rigidbody, och omvandla egenskaper för att manipulera det på olika sätt. Medan OnCollisionEnter är förmodligen den vanligaste funktionen du kommer att använda, du kan också använda OnCollisionExit och OnCollisionStay (med annars identisk syntax och användning), som aktiverar under den första ramen att du slutar kollidera med ett objekt respektive under varje ram som du kolliderar med ett objekt.
Ibland kan det också vara användbart att göra det som kallas raycasting. Vid raycasting, en oändligt tunn linje (a stråle) kastas genom världen från något ursprung, längs någon vektor, och när den träffar något returneras positionen och andra detaljer i den första kollisionen. Koden för en raycast ser så här ut:
RaycastHit hit; if (Fysik. Raycast (transform.position, -Vector3.up, ut hit)) {float distanceToGround = hit.distance; }
Detta kastar en stråle från positionen för det aktuella objektet längs -Vector3.up (rakt ned) och länkar variabeln träffa till det första objektet som det kolliderar med. När din stråle har träffat något kan du komma åt hit.distance för att avgöra hur långt det är, eller träffa. GameObject för att manipulera objektet du träffar.
Strålkastningar som detta kan användas för skyttar för att avgöra vad pistolen pekade på, eller för att välja föremål när kameran tittar på dem, eller för vissa stilar av rörelsemekaniker.
6.5 Tidskorrigering
En viktig faktor att tänka på när du manipulerar objekt på detta sätt har att göra med framerate. Oavsett hur noggrant du optimerar kommer framerate alltid att variera och du vill inte att din spelhastighet ska variera i enlighet därmed. Om någon annan kör ditt spel på en snabbare dator än du utvecklade det på, vill du inte att spelet ska köras med dubbla hastigheter.
Hur du korrigerar för detta är genom att multiplicera värdena du använder med tiden det tog att göra den sista ramen. Detta görs med hjälp av Time.deltaTime. Detta ändrar effektivt hastigheten på alla variabler du ökar varje ram från förändring per ram till förändring per sekund, och du bör antagligen göra den här ändringen till valfritt värde du ökar eller dekrementerar varje ram.
6.6 Ljudkällor och lyssnare
Nu när vi har behandlat hur vi skapar, återger och kontrollerar objekt, låt oss prata om den andra känslan som datorspel kan tjäna: nämligen ljud. Enhet stöder två slags ljud: 2D och 3D ljud. 3D-ljud varierar deras volym baserat på avstånd och snedvrider när de rör sig relativt kameran. 2D-ljud gör det inte.
2D-ljud är lämpliga för voice-overs och bakgrundsmusik, och 3D-ljud gäller för ljud som genereras av händelser i världen. För att ändra om ett ljud är 3D eller inte, välj det i projekt Visa, växla till inspektör Visa och välj lämpligt alternativ från rullgardinsmenyn och tryck sedan på återinförsel knapp.
För att faktiskt spela ljudet måste du bifoga ett ljudkälla till en rekvisita (rekvisiten du vill att ljudet ska komma från, i fallet med ett 3D-ljud). Då måste du öppna audioclip och välj din ljudfil.
Du kan använda myAudioSource. Paus() och myAudioSource. Spela() för att kontrollera dessa ljudfiler. Du kan justera nedfallsbeteenden, volym och dopplerförskjutning av ljuden under inspektör fliken för ljudkällan.
6.7 Inmatning
Ett spel som inte tar några input från användaren är inte mycket av ett spel. Det finns många olika typer av input du kan läsa i, och nästan alla av dem är tillgängliga via Inmatning och Nyckelkod föremål. Vissa exempel på inmatningar (som har värden utvärderade varje ram) är nedan.
Vector3 mousePos = Input.mousePosition; bool isLeftClicking = Inmatning. GetMouseButton (0); bool isPressingSpace = Inmatning. GetKey (KeyCode. Plats);
Funktionerna för dessa linjer är mestadels självförklarande. Med hjälp av dessa tre typer av inmatningsreferenser kan du rekonstruera kontrollscheman för de flesta moderna 3D-datorspel.
6.8 Felsöka ett skript
Låt oss säga att ett skript inte fungerar. Som den goda läkaren säger, kan det hända att du får händer och hängningar. Om det finns direkta syntaxfel med ditt C #, kommer spelet i allmänhet att vägra att köra när du träffar spela, och några ganska användbara felmeddelanden tillhandahålls om du bygga skript från redaktören. Se nedan:
Dessa buggar är vanligtvis inte de svåraste att fixa. Det som kan vara mer problematiskt är subtila semantiska fel, där du framgångsrikt har skrivit en fil full med giltigt C # - bara inte en som gör vad du trodde att det skulle göra. Om du har något av dessa fel och du har problem med att spåra det finns det några saker du kan försöka förbättra situationen.
Den första är att pausa körningen av spelet och kontrollera konsolen. Du kan pausa spelet genom att klicka på paus ikonen i den övre mitten av redigeraren och sedan välja trösta från botten av fönster meny (eller tryck på Ctrl > Flytta > C). Även om det inte finns några fel kan varningar fortfarande hjälpa till att ge några ledtrådar om vad som kan gå fel.
Om detta inte fungerar kan du också försöka få en uppfattning om tillståndet för ditt skript genom att skriva ut tillståndet för interna variabler för att bekräfta att programmet gör det du tror att det gör. Du kan använda Debug. Logg (String) för att skriva ut innehållet i en sträng till konsolen när programutförandet träffar den raden. I allmänhet, om du arbetar bakåt från det du tror borde hända genom de saker som borde vara gör att det händer, så kommer du så småningom att nå en punkt där dina felsökning inte gör vad du förväntar dig att de ska göra do. Det är där ditt fel är.
7. Exempel: Scripting Pong
För att bygga Pong, låt oss dela upp spelet i dess kärnelement: vi behöver en boll som riccherar fram och tillbaka mellan paddlarna när de ökar hastighet, vi behöver en resultattavla som vet när bollarna har passerat paddlarna, och vi behöver en mekanism för att starta om bollen när det händer. Ett bra första steg skulle vara att lägga till en icke-kinematisk styv kropp till bollen, två kinematiska styva kroppar till paddlar, inaktivera gravitationen för dem alla och tilldela ett lämpligt fysiskt material från standardtillgångarna (studsa med studsa kombinera satt till multiplicera).
Nedan kan du se skriptet för bollen med förklarande kommentarer. Bollen måste uppnå några grundläggande mål: den ska studsa i ett komplicerat mönster, alltid bibehålla rörelse på båda axlarna, och det borde accelerera i en utmanande men inte omöjlig takt i horisontalen riktning.
BallHandler.cs
Därefter måste vi skripta vår paddel, som du kan se nedan. Padden måste röra sig upp och ner som svar på knapptryckningar (men inte utanför vissa gränser). Det måste också utlösa partikelsystemet när det kolliderar med något.
PaddleHandler.cs
Därefter behöver vi fiendens AI: något som får fiendens paddel att spåra mot bollen med en fast takt. För det använder vi Vector3.Slerp för maximal enkelhet. Vi vill också ha samma partikelbeteende som vi ser på vår egen paddel.
EnemyAI.cs
Slutligen behöver vi ett skript för att uppdatera resultattavlan och återställa bollen när den går utanför gränserna.
ScoreboardUpdater.cs
Med de bifogade skripten och referenserna fyllda upp, när vi kör vårt Pong-spel, upplever vi spel!
Du kan ladda ner min Pong-demo, om du vill se allt jag har beskrivit i handling. Det körs på Windows, Mac och Linux-system.
8. Utforska dokumentationen / lära sig mer
Enhet är en komplex motor med många fler funktioner än som möjligt kan täckas i en guide av denna stil, och det är innan du inkluderar den stora mängden (gratis och kommersiella) enhetsförlängningar som finns tillgängliga på internet. Den här guiden ger dig en stark utgångspunkt för att utveckla ett spel, men självutbildning är en viktig färdighet i alla ansträngningar, och dubbelt så här.
En avgörande resurs här är Unity ScriptReference. ScriptReference är en sökbar databas, tillgänglig för både C # och Javascript, som har en lista av varje Unity-kommando och funktion, med beskrivningar av deras funktioner och korta exempel på syntax.
Om du har problem med redigeraren och gränssnittet för Unity, eller bara gillar videoundervisningar som en fråga om att föredra, finns det en lång lista med hög kvalitet Unity video tutorials De bästa enhetsstudieprogrammen för nybörjareVill du utveckla spel med Unity, men vet inte var du ska börja? Prova en av dessa fantastiska Unity 3D-tutorials idag. Läs mer tillgängligt. Mer omfattande (men mindre bred) texthandledning för Unity finns också tillgängliga från CatLikeCoding.
Slutligen, om du har frågor utöver omfattningen av dokumentation eller handledning, kan du ställa specifika frågor på svar. Unity3d.com. Kom ihåg att svar tillhandahålls av frivilliga, så respektera deras tid och sök först i databasen för att se till att din fråga inte redan har besvarats.
9. Bygg ditt spel / Compilera till en fristående applikation
När du har byggt något du är stolt över (eller är klar med att klona vårt lite dodiga Pong-exempel för övning) är det dags att flytta ditt spel från redaktören och förvandla det till något du kan posta på internet och tvinga dina vänner och familj till spela. För att göra det måste du bygga en fristående applikation. De goda nyheterna är att det i Unity är mycket, väldigt lätt. Det finns emellertid några potentiella hickor som du vill vara försiktig med.
För det första vet du att du bara kan bygga ett felfritt projekt. För det ändamålet, se till att konsolen är öppen när du bygger: det finns vissa felförhållanden som spelet kommer att ignorera i redaktören, men fortfarande avbryter en försök att bygga. Detta dumpar bara felmeddelanden till konsolen, utan synliga resultat på skärmen, vilket kan vara frustrerande om du glömmer att kontrollera. När du har fått ditt spel att kompilera felfri kan du dock välja Bygg inställningar under Fil menyn eller tryck på Ctrl > Flytta
> B. Detta kommer att skapa en enkel dialog som låter dig bygga ditt spel för flera plattformar.
Processen därifrån är självförklarande: välj dina alternativ och slå bygga; spelet ber dig om en katalog att installera på och placerar både den körbara och datakatalogen där. Dessa två filer kan zippas samman och distribueras (se bara till att du inte tar betalt för ett spel inbyggt i Unity-demot, eftersom det strider mot användarvillkoren).
10. Avslutande anteckningar
Som med alla spelutvecklingsverktyg är nyckeln till framgång med Unity iterativ utveckling. Du måste bygga i hanterbara steg - vara ambitiös, för all del, men vara ambitiös i små bitar och ordna dessa bitar så att även om du undviker din ultimata ambition så kommer du åtminstone att sluta med en sammanhängande produkt.
Få först de viktigaste elementen: ha en idé i åtanke om din minsta möjliga produkt, det enklaste, mest nakna benet du eventuellt kan skapa och fortfarande känns som om du uppnådde något värt. Ta dig till det minsta möjliga projektet innan du går vidare till större ambitioner.
Denna handledning ger dig en stark startplats, men det bästa sättet att lära sig Enhet är genom att bygga ett spel. Börja bygga ett spel, fylla luckor i dina kunskaper när de kommer upp, och det gradvisa flödet av kunskap kommer att försvinna de saker du inte vet överraskande snabbt.
Om du har läst allt detta och är lite överväldigad av den kodning som krävs med Unity, se till att du kolla in hur lära sig spelutveckling med Unity Learn Unity Learn är det enklaste sättet att behärska spelutvecklingVill du börja utveckla dina egna spel? Unity Learn är det bästa och enklaste sättet att lära sig och behärska det du behöver veta. Läs mer och läs också vår guide om hur man gör videospel utan programmering Hur man skapar videospel utan programmeringVill du skapa ett videospel men kan inte koda? Använd sedan ett byggsats för videospel som låter dig bygga spel utan någon kodning som krävs! Läs mer .
Enhet är ett kraftfullt verktyg, och med lite utforskning kan du bygga imponerande projekt med det snabbare än du kan förvänta dig. Låt oss veta vad du har byggt i kommentarerna nedan - vi skulle gärna se!
En författare och journalist baserad på sydväst, garanteras Andre att vara funktionell upp till 50 grader Celcius och är vattentät till ett djup av tolv meter.