Unity er stadig det motor-valg flest danske og nordiske spiludviklere møder først, selv om konkurrencen fra Unreal Engine og Godot er blevet hårdere i 2026. Denne Unity tutorial tager dig gennem hele vejen fra tom computer til et færdigt, kørende 2D-spil, skrevet i C# og bygget i den nyeste Unity 6 LTS-editor. Du får 10 konkrete trin, flere komplette kodeblokke du kan kopiere direkte ind i dit eget projekt, og en liste over de fejl der typisk sender begyndere på en frustrerende aften med Google-søgninger. Sæt 60 til 90 minutter af, og du har et spilbart prototype-spil ved siden af en forståelse for, hvordan Unity faktisk hænger sammen under motorhjelmen.

Du skal ikke have rørt ved en spilmotor før for at følge med. Guiden forudsætter kun, at du kan installere et program og kopiere kode ind i en editor. Til gengæld rammer vi de samme elementer, du finder i langt større Unity-projekter: bevægelse styret af fysik, et globalt GameManager-mønster, kollisioner, en brugerflade bygget med TextMeshPro, og en build-proces, der ender med et program, du faktisk kan sende til en ven. Undervejs peger vi også på, hvor nybegyndere typisk taber tid, så du slipper for at genopdage de samme faldgruber selv.

Derfor Er Unity Stadig Et Godt Valg I 2026

Markedet for spilmotorer er langt fra entydigt lige nu. En branchemåling blandt over 2.300 spiludviklere viser, at Unreal Engine er det primære værktøj for 34 procent af de adspurgte, mens Unity ligger på 36 procent og Godot på 14 procent, ifølge tal fra VoxBooster. Kigger man i stedet på hvilken motor nye spil på Steam faktisk er bygget i, tegner billedet sig anderledes. Her står Unity bag omkring 35 til 38 procent af nye udgivelser, Unreal Engine dækker 18 til 22 procent, og Godot ligger på 8 til 10 procent. En tredje analyse af udgivne spil i 2025 satte Unitys andel helt op mod 49,4 procent og Unreal Engine omkring 20 procent. Forskellen opstår fordi undersøgelserne måler forskellige ting: den ene spørger studier om deres foretrukne værktøj, den anden tæller faktiske udgivelser.

For dig som begynder betyder de skiftende tal mindre, end du måske tror. Unity har stadig den største mængde gratis dokumentation, YouTube-guides, færdige assets og Stack Overflow-svar at læne sig op ad, hvilket gør motoren til et stærkt sted at starte, uanset hvad du vælger bagefter. Unity 6 LTS har desuden fået et solidt løft med GPU Resident Drawer til automatisk GPU-instancing, forbedret ray tracing via DXR 1.1, og Sentis, Unitys værktøj til at køre AI-modeller direkte i spillet, ifølge Unitys officielle dokumentation.

I Danmark og resten af Norden bruges Unity bredt både på erhvervsskoler, universitetslinjer med spildesign og hos de mange små indie-studier, der sjældent har budget til en fuld Unreal Engine-produktion fra start. Motoren kører lige godt på en billig bærbar som på en kraftig stationær, og fordi C# også bruges uden for spilverdenen, er sproget du lærer her, direkte overførbart til almindelig softwareudvikling. Det gør Unity til et naturligt førstevalg, hvis målet er at lære principperne bag spiludvikling, uden først at skulle investere i dyr hardware eller en bestemt platform.

Det samme gælder, hvis du allerede arbejder professionelt med noget andet end spil. Mange webudviklere og backend-programmører opdager, at overgangen til Unity føles mindre som at lære et helt nyt fag og mere som at lære et nyt bibliotek oven på kendskab, de allerede har. Klasser, metoder, arv og interfaces fungerer præcis, som du kender dem fra anden C#-kode, det eneste nye er, hvordan Unity binder dine scripts sammen med scener, objekter og en render-løkke, der kører 60 gange i sekundet eller mere.

Forudsætninger: Dette Skal Du Bruge Før Du Starter

Før du installerer noget, så tjek at din maskine faktisk kan køre Unity 6 LTS. Kravene varierer en smule mellem Windows, macOS og Linux, og Unity opdaterer dem løbende, så brug tabellen som udgangspunkt og dobbelttjek den officielle systemkrav-side hvis du er i tvivl om din egen opsætning.

KomponentMinimumskrav
WindowsWindows 10 build 19043 eller nyere, eller Windows 11 21H2 build 22000 eller nyere. x64 med SSE2, eller Arm64. DX10, DX11, DX12 eller Vulkan
macOSmacOS Ventura 13 eller nyere. Intel x64 med SSE2 (udfases) eller Apple Silicon M1 og nyere. Metal-kompatibelt grafikkort
LinuxUbuntu 22.04 eller 24.04, x64 med SSE2. OpenGL 3.2 eller nyere, eller Vulkan
RAMMindst 8 GB anbefalet. Større projekter kræver mere, afhængigt af scener og assets
DiskpladsIntet fast minimum oplyst af Unity, men brug en disk med høj IOPS, da det reducerer byggetider markant
KontoGratis Unity-konto (Unity ID), krævet for at logge ind i Unity Hub

Du skal desuden bruge Unity Hub i den nyeste version, Unity Editor 6000.6 (den aktuelle Unity 6 LTS-udgave), en kodeeditor som Visual Studio Code, og gerne en gratis Git-konto hvis du vil holde styr på versioner undervejs. Et grundlæggende kendskab til programmering er en fordel, men denne Unity tutorial er skrevet, så du kan følge med selv uden tung C#-erfaring.

Trin 1: Installer Unity Hub Og Unity 6 LTS-editoren

Gå til Unitys hjemmeside og opret en gratis konto, hvis du ikke allerede har en. Download derefter Unity Hub, det lille program der styrer dine editor-installationer og projekter, og installer det som enhver anden applikation. Åbn Unity Hub, log ind med din Unity-konto, og klik på fanen “Installs” i venstre side.

  • Klik på “Install Editor” og vælg Unity 6 LTS (version 6000.6)
  • Markér modulet til din platform, for eksempel Windows Build Support eller Mac Build Support
  • Markér også WebGL Build Support, så du senere kan eksportere spillet til en browser
  • Klik “Install” og vent, mens Unity downloader og installerer editoren, det tager typisk 10 til 20 minutter afhængigt af din forbindelse

Når installationen er færdig, ligger Unity 6 LTS klar i listen under “Installs” i Hub. Herfra kan du altid tilføje flere moduler senere, hvis du for eksempel senere vil bygge til Android eller iOS.

Det er fristende at markere alle tilgængelige moduler med det samme, men lad være. Hvert modul fylder flere gigabyte, og du bruger sandsynligvis kun en eller to build-platforme i starten. Vælg i stedet den platform du rent faktisk sidder på lige nu, plus WebGL, fordi en browser-build er den hurtigste måde at vise dit færdige spil til andre uden at de selv skal installere noget.

Trin 2: Opret Dit Første 2D-projekt

Klik på fanen “Projects” i Unity Hub og vælg “New project”. Vælg skabelonen “2D (URP)”, som bruger Universal Render Pipeline og er Unitys anbefalede udgangspunkt for nye 2D-projekter. Giv projektet et navn, for eksempel “SamlStjernerne”, og vælg en mappe på din disk hvor du har god plads. Klik “Create project”, og vent mens Unity genererer projektstrukturen og åbner editoren for første gang.

Første opstart tager typisk et minuts tid mere end normalt, fordi Unity kompilerer standardpakkerne. Bliv ikke bekymret, hvis skærmen virker tom, det er helt forventet for et splinternyt projekt.

Trin 3: Find Rundt I Unity-interfacet

Unity-editoren består af et par faste vinduer, og du kommer til at bruge dem alle i løbet af denne Unity tutorial. “Scene”-vinduet er dit arbejdsområde, hvor du placerer og flytter objekter med musen. “Game”-vinduet viser, hvad spilleren faktisk ser, når du trykker Play. “Hierarchy” lister alle objekter i den aktuelle scene i en trælignende struktur. “Inspector” viser detaljerne og komponenterne for det objekt, du har markeret. Og “Project”-vinduet nederst er din filbrowser over alle assets, scripts og scener i projektet.

Et sidste vindue, “Console”, bliver din bedste ven senere i denne guide. Det er her Unity viser fejl, advarsler og dine egne Debug.Log-beskeder, så hold det åbent via menuen Window > General > Console.

Du kan flytte og ændre størrelse på alle vinduerne ved at trække i deres faneblade, og Unity husker din opsætning, næste gang du åbner projektet. Føler du dig fortabt, findes der en genvej under “Layout” øverst til højre, der nulstiller alt til standardopsætningen igen. Mange begyndere bruger uforholdsmæssigt lang tid på at rode rundt i layoutet i de første par dage, så brug et par minutter på bevidst at flytte Console ned under Scene-vinduet, så du altid kan se fejl uden at skifte fane.

Trin 4: Byg Banen Med GameObjects Og Sprites

Spillet, vi bygger i denne Unity tutorial, er enkelt med vilje: spilleren styrer en figur nederst på skærmen og skal samle faldende stjerner for point. Start med spilleren. Højreklik i Hierarchy, vælg “2D Object” > “Sprites” > “Square”, og kald objektet “Player”. Tilføj en “Rigidbody2D”-komponent via Inspector, sæt “Gravity Scale” til 0, så spilleren ikke falder ned af skærmen, og tilføj en “Box Collider 2D”.

Opret derefter et nyt GameObject kaldet “Collectible”, igen som en firkantet sprite, men denne gang med “Box Collider 2D” sat til “Is Trigger”, så den ikke fysisk støder sammen med spilleren, men i stedet registrerer, at de to objekter overlapper. Træk “Collectible” ind i Project-vinduet for at gøre den til en prefab, en genbrugelig skabelon Unity kan kopiere igen og igen under spillet. Opret til sidst et tomt GameObject kaldet “Spawner” øverst i scenen, det bliver punktet hvor nye stjerner dukker op.

Trin 5: Skriv Din Første C#-script: PlayerController

Nu kommer den del, de fleste nye Unity-brugere glæder sig mest til: koden. Højreklik i Project-vinduet, vælg “Create” > “C# Script”, og kald den “PlayerController”. Dobbeltklik for at åbne den i Visual Studio Code, og erstat indholdet med følgende.

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 6f;
    public float screenHalfWidth = 8f;

    private Vector2 moveInput;
    private Rigidbody2D rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void OnMove(Vector2 value)
    {
        moveInput = value;
    }

    void FixedUpdate()
    {
        Vector2 velocity = new Vector2(moveInput.x * moveSpeed, 0f);
        rb.linearVelocity = velocity;

        Vector3 pos = transform.position;
        pos.x = Mathf.Clamp(pos.x, -screenHalfWidth, screenHalfWidth);
        transform.position = pos;
    }
}

Læg mærke til rb.linearVelocity, navnet Unity 6 bruger efter at have omdøbt den gamle velocity-egenskab på Rigidbody2D. Skriver du den gamle version, kompilerer koden stadig i mange tilfælde, men brug det nye navn, så du følger den aktuelle API. Gem filen, gå tilbage til Unity, træk scriptet ind på “Player” i Hierarchy, og tryk Play for at se objektet stå helt stille, hvilket er korrekt, for vi mangler input endnu.

Trin 6: Fysik, Kollisioner Og Det Nye Input System

Metoden OnMove ovenfor kalder vi automatisk ved hjælp af Unitys nyere Input System i stedet for den gamle Input Manager. Tilføj en komponent kaldet “Player Input” på “Player”-objektet via Inspector. Unity beder dig oprette et “Input Actions”-asset, hvis du ikke har et, godkend det, og lad Unity generere standardopsætningen med “Move”, “Jump” og “Fire”-handlinger.

Sæt “Behavior” på “Player Input”-komponenten til “Invoke Unity Events” eller “Send Messages”, sidstnævnte er den letteste for begyndere, fordi Unity selv kalder metoder som OnMove ud fra navnet på handlingen. Test ved at trykke Play og bruge piletasterne eller WASD, spilleren skal nu glide til venstre og højre inden for skærmens kant takket være Mathf.Clamp-linjen i scriptet.

Bland aldrig det gamle og det nye input-system i samme script. Vælger du at bruge “Send Messages”, skal alle dine scripts holde sig til den tilgang, ellers ender du med metoder, der aldrig bliver kaldt, og en frustrerende fejlsøgningsaften.

Trin 7: GameManager Og Spawner-logik

Nu skal spillet have en hjerne. Opret et tomt GameObject kaldet “GameManager” i Hierarchy, og et nyt script med samme navn. GameManager holder styr på score og fungerer som et singleton, altså et objekt alle andre scripts nemt kan finde frem til, uden at du behøver at trække referencer manuelt ind alle steder i projektet.

Singleton-mønstret er en af de første arkitektur-beslutninger, de fleste Unity-projekter støder på. Ved at gemme en statisk reference til sig selv i Awake, gør GameManager det muligt for ethvert andet script, som Collectible herunder, at kalde GameManager.Instance.AddScore(1) uden at skulle have en direkte Inspector-reference til objektet. Det er en simpel løsning, der fungerer fint til et lille projekt som dette, selvom større produktioner ofte vælger mere fleksible mønstre efterhånden som antallet af systemer vokser.

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance { get; private set; }
    public TextMeshProUGUI scoreText;

    private int score;

    void Awake()
    {
        Instance = this;
        UpdateScoreText();
    }

    public void AddScore(int amount)
    {
        score += amount;
        UpdateScoreText();
    }

    void UpdateScoreText()
    {
        scoreText.text = "Point: " + score;
    }
}

Opret derefter scriptet “Collectible” og tilføj det til “Collectible”-prefaben. Det får stjernerne til at falde ned ad skærmen, og det tæller point, når spilleren rører dem.

using UnityEngine;

public class Collectible : MonoBehaviour
{
    public int points = 1;
    public float fallSpeed = 3f;

    void Update()
    {
        transform.Translate(Vector2.down * fallSpeed * Time.deltaTime);
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            GameManager.Instance.AddScore(points);
            Destroy(gameObject);
        }
    }
}

Husk at sætte tagget “Player” på spiller-objektet via Inspector øverst, ellers fejler CompareTag-tjekket altid. Opret til sidst scriptet “Spawner” og tilføj det til “Spawner”-objektet øverst i scenen.

using UnityEngine;

public class Spawner : MonoBehaviour
{
    public GameObject collectiblePrefab;
    public float spawnInterval = 1.2f;
    public float spawnWidth = 7f;

    void Start()
    {
        InvokeRepeating(nameof(SpawnCollectible), 1f, spawnInterval);
    }

    void SpawnCollectible()
    {
        float x = Random.Range(-spawnWidth, spawnWidth);
        Vector3 spawnPos = new Vector3(x, transform.position.y, 0f);
        Instantiate(collectiblePrefab, spawnPos, Quaternion.identity);
    }
}

Træk “Collectible”-prefaben fra Project-vinduet ind i feltet “Collectible Prefab” på Spawner-komponenten i Inspector. Uden den reference spawner scriptet ingenting, og Console viser ingen fejl, fordi koden teknisk set kører fint, den mangler bare en prefab at kopiere.

Trin 8: Score, UI Og TextMeshPro

Højreklik i Hierarchy og vælg “UI” > “Text – TextMeshPro”. Første gang beder Unity dig importere TMP Essentials, klik “Import” og vent et øjeblik. Omdøb teksten til “ScoreText”, placer den øverst til venstre i Canvas-objektet, og træk den ind i feltet “Score Text” på GameManager-komponenten i Inspector.

Tryk Play igen. Du bør nu se stjerner falde ned fra toppen, kunne styre spilleren med piletasterne, og se tallet i øverste venstre hjørne stige, hver gang en stjerne rammer spilleren. Et eksempel på output i Console, hvis alt er korrekt opsat, er en helt tom log uden fejl eller advarsler, mens Game-vinduet viser teksten “Point: 0” stige til “Point: 1”, “Point: 2” og så videre.

Trin 9: Test, Debug Og Brug Play Mode Rigtigt

Unity gemmer ikke automatisk ændringer, du laver i Play Mode. Rør du ved en værdi i Inspector mens spillet kører, for eksempel “Spawn Interval”, og trykker Stop bagefter, forsvinder ændringen igen. Mange begyndere opdager det først, når de har brugt en halv time på at finjustere en værdi, der aldrig blev gemt.

Brug Console aktivt undervejs. En rød linje betyder en fejl, der stopper scriptet, mens en gul linje er en advarsel, du som regel kan ignorere midlertidigt. Klik på en fejlbesked for at hoppe direkte til den linje kode, der udløste den, det sparer dig for at scanne hele scriptet manuelt. Tilføj gerne Debug.Log("Score opdateret: " + score); midlertidigt i GameManager, hvis du vil se værdier løbende i Console, mens spillet kører, men fjern den slags logning igen før du bygger den endelige version, for den koster ydelse i store mængder.

Sådan ser et typisk, korrekt output ud, hvis du tilføjer en midlertidig log-linje i AddScore og samler tre stjerner i træk.

Score opdateret: 1
UnityEngine.Debug:Log (object)
GameManager:AddScore (int) (at Assets/Scripts/GameManager.cs:19)

Score opdateret: 2
UnityEngine.Debug:Log (object)
GameManager:AddScore (int) (at Assets/Scripts/GameManager.cs:19)

Score opdateret: 3
UnityEngine.Debug:Log (object)
GameManager:AddScore (int) (at Assets/Scripts/GameManager.cs:19)

Ser du i stedet intet i Console, men scoren alligevel ikke stiger i Game-vinduet, er fejlen typisk, at “Collectible” mangler tagget “Player” på det objekt, den tjekker imod, eller at referencen til “Score Text” aldrig blev trukket ind i Inspector. Begge dele fejler stille, uden en eneste rød linje, hvilket er præcis den slags stille fejl, der gør Unity-fejlsøgning svær for nybegyndere.

Trin 10: Byg (Build) Og Eksportér Dit Spil

Når spillet fungerer i editoren, er det tid til at bygge en selvstændig version. Gå til “File” > “Build Profiles”, en funktion der er blevet mere fleksibel i Unity 6 LTS og lader dig gemme separate indstillinger per platform. Vælg din platform, for eksempel Windows eller Web, og klik “Add Open Scenes” for at sikre, at din scene er med i builden.

Klik “Build”, vælg en output-mappe, og vent mens Unity kompilerer hele projektet. En Windows-build giver dig en .exe-fil og en tilhørende data-mappe, mens en Web-build giver dig filer, du kan uploade til en server eller en platform som itch.io. Test altid den færdige build uden for editoren, for enkelte fejl, særligt rundt om Input System og scripting backend, viser sig kun uden for Unitys egen Play Mode.

Åbn .exe-filen direkte fra output-mappen, ikke bare gennem Unity, og gennemspil hele forløbet igen: bevæg spilleren, saml et par stjerner, og tjek at scoren stiger som forventet. Virker builden anderledes end i editoren, er den første ting du bør tjekke “Player Settings”, hvor “Active Input Handling” og “Scripting Backend” nogle gange står sat forskelligt fra det, du har testet i Play Mode. En Web-build bør du desuden teste i mindst to forskellige browsere, da WebAssembly-understøttelsen kan variere en smule mellem dem.

Vil du holde styr på projektfiler med Git fra start, så opret en .gitignore-fil i rodmappen af projektet, så du ikke committer tunge, genererede mapper, Unity selv bygger op igen.

[Ll]ibrary/
[Tt]emp/
[Oo]bj/
[Bb]uild/
[Bb]uilds/
[Ll]ogs/
[Mm]emoryCaptures/
*.csproj
*.sln
*.user
.vs/
.idea/
*.tmp

Det Komplette Projekt: Sådan Hænger Delene Sammen

Når alle ti trin er gennemført, består dit projekt af fire scripts, to prefabs og én scene, der tilsammen udgør et komplet, spilbart spil. Det er en god idé at stoppe op her og se hele strukturen samlet, før du begynder at bygge videre på egen hånd, for det er netop samspillet mellem delene, der gør Unity til en spilmotor og ikke bare en samling uafhængige scripts.

Sådan Ser Projektmappen Ud Bag Kulisserne

Under “Assets” i Project-vinduet bør din mappestruktur nu minde om denne, hvis du har fulgt navngivningen fra trinene ovenfor.

Assets/
  Scenes/
    SampleScene.unity
  Scripts/
    PlayerController.cs
    Collectible.cs
    Spawner.cs
    GameManager.cs
  Prefabs/
    Collectible.prefab
  Settings/
    InputSystem_Actions.inputactions
  TextMesh Pro/
    (importeret automatisk ved TMP Essentials)

I Hierarchy-vinduet er selve scenen sat sammen af fem objekter: “Player” med PlayerController, Rigidbody2D og Player Input, “Spawner” med Spawner-scriptet og en reference til Collectible-prefaben, “GameManager” med GameManager-scriptet og en reference til tekstfeltet, samt et “Canvas”-objekt med “ScoreText” som barn. Mister du overblikket undervejs, så brug denne liste som tjekliste og sammenlign den med din egen Hierarchy, det er typisk her en manglende reference eller et forkert navngivet objekt gemmer sig.

Det færdige, lille spil er med vilje enkelt, men strukturen skalerer. Vil du senere tilføje liv, sværhedsgrader eller flere baner, sker det ved at udvide GameManager og Spawner, uden at du behøver at skrive Player-logikken om fra bunden.

5 Almindelige Faldgruber For Unity-begyndere

De fleste Unity-begyndere falder i de samme huller, uanset om de følger denne Unity tutorial eller en helt anden. Her er de, der går igen oftest.

  • Script-filnavn og klassenavn matcher ikke. Opretter du filen “PlayerController.cs” men kalder klassen noget andet internt, nægter Unity at hæfte scriptet på et objekt
  • Blanding af gammelt og nyt Input System. Et projekt der delvist bruger Input Manager og delvist Input System ender typisk med input, der virker i editoren men ikke i den færdige build
  • Glemmer at gemme scenen. Ctrl+S gemmer scenen, ikke bare scriptet. Mange mister timers arbejde, fordi de kun gemte koden og lukkede Unity uden at gemme scenen bagefter
  • For store, ukomprimerede sprites. Importerer du et 4K-billede til en lille 2D-figur uden at justere “Max Size” i Texture-indstillingerne, fylder projektet unødvendigt meget og kører langsommere på svagere maskiner
  • Overforbrug af GameObject.Find og FindObjectOfType i Update. Begge metoder er relativt tunge, og kører du dem hver frame i stedet for at cache referencen én gang, mærker spillet det hurtigt som faldende billedrate
  • Ingen version control fra start. Først når projektet går i stykker efter en fejlslagen pakke-opdatering, indser de fleste, hvor meget en simpel Git-historik havde reddet dem
  • Forkert Rigidbody2D Body Type. Sætter du “Dynamic” på et objekt, der skal stå helt stille, som for eksempel en platform, begynder det uventet at falde eller rotere, fordi tyngdekraften og fysikmotoren påvirker det, som den ville med enhver anden bevægelig genstand

Fejlfinding: 8 Fejl Og Hvordan Du Løser Dem

Ingen Unity tutorial er komplet uden en liste over de fejlbeskeder, du uundgåeligt støder på. De fleste fejl i Unity følger med en stack trace i Console, en liste af linjer der viser, hvilken metode der kaldte hvilken. Læs den nedefra og op, den nederste linje er typisk tættest på den kode, du selv har skrevet, mens de øverste linjer ofte peger ind i Unitys eget interne motor-kode. Her er de otte mest almindelige fejl nybegyndere støder på, med årsag og løsning.

FejlÅrsagLøsning
“The associated script cannot be loaded”Filnavn matcher ikke klassenavn, eller scriptet ligger i en ugyldig mappeOmdøb filen så den matcher klassenavnet præcist, og flyt den ud af specialmapper som Editor, hvis den ikke hører til der
Materialer vises i lyserød/magentaMaterialet bruger en shader, der ikke findes i den aktive render pipeline (ofte efter skift til URP)Brug menuen “Edit > Rendering > Materials > Convert Selected Built-in Materials to URP”
Build fejler med manglende platformsmodulBuild-modulet til platformen er ikke installeret via Unity HubÅbn Unity Hub, gå til din editor-installation, og tilføj det manglende modul under “Add modules”
Package Manager hænger eller fejlerNetværksproblemer, eller en korrupt linje i manifest.jsonTjek internetforbindelsen, åbn Packages/manifest.json i en teksteditor og fjern ugyldige linjer, genstart derefter Unity
Input reagerer slet ikkeProjektets “Active Input Handling” i Player Settings passer ikke til den input-kode, du har skrevetGå til Edit > Project Settings > Player, og sæt Active Input Handling til “Input System Package” eller “Both”, afhængigt af hvad koden forventer
OnTriggerEnter2D kaldes aldrigEt af objekterne mangler Rigidbody2D, eller Collider2D er ikke sat til “Is Trigger”Tilføj en Rigidbody2D til mindst ét af objekterne, og markér “Is Trigger” på collideren, der skal registrere overlap
NullReferenceException konstant i ConsoleEn public-reference i Inspector er aldrig blevet trukket ind, for eksempel scoreText eller collectiblePrefabMarkér objektet, tjek Inspector for tomme felter, og træk den rigtige reference ind manuelt
Spillet virker i editoren, men crasher i buildForskel i scripting backend (Mono mod IL2CPP) eller en grafik-API, platformen ikke understøtterTjek Player Settings for scripting backend og grafik-API, og test altid en build tidligt frem for kun at stole på Play Mode

Fælles for flere af fejlene ovenfor er, at Console ikke altid fortæller hele historien. Falder billedraten, uden at der står en eneste fejl i rødt, er problemet som regel ikke en bug, men en flaskehals i, hvor meget arbejde CPU’en eller GPU’en laver hver eneste frame. Det er her det indbyggede Profiler-vindue bliver relevant, og vi vender tilbage til det i næste afsnit.

Avancerede Tips Til Performance Og Workflow

Når du har det grundlæggende spil kørende, er der et par vaner, der adskiller et begynderprojekt fra et, der kan vokse. Den første er object pooling. At kalde Instantiate og Destroy konstant, som vores Spawner gør, er fint til en lille prototype, men bliver en reel flaskehals med mange objekter på samme tid. Unitys indbyggede ObjectPool-klasse løser det ved at genbruge objekter i stedet for at oprette og rydde op i dem hele tiden.

using UnityEngine;
using UnityEngine.Pool;

public class CollectiblePool : MonoBehaviour
{
    public GameObject prefab;
    private ObjectPool<GameObject> pool;

    void Awake()
    {
        pool = new ObjectPool<GameObject>(
            createFunc: () => Instantiate(prefab),
            actionOnGet: obj => obj.SetActive(true),
            actionOnRelease: obj => obj.SetActive(false),
            defaultCapacity: 20
        );
    }
}

Udnyt desuden Build Profiles til at holde separate indstillinger for Windows, Web og mobil adskilt, i stedet for at skifte platform manuelt hver gang. Overvej GPU Resident Drawer, hvis dit spil senere får mange ensartede objekter på skærmen samtidig, da den automatiserer GPU-instancing uden ekstra kode fra din side. Og hold Git-historikken ren fra start, gerne med Git LFS til store binære assets som billeder og lydfiler, så repoet ikke vokser sig unødigt tungt.

Brug Profiler-vinduet Til At Finde Flaskehalse

Åbn Profiler-vinduet via Window > Analysis > Profiler, og tryk Play mens det kører. Vinduet viser, hvor meget tid hver frame bruger på CPU, rendering, fysik og scripts, opdelt i søjler du kan klikke dig ned i. Ser du en enkelt høj søjle under “Scripts”, er det som regel et script, der gør for meget arbejde i Update i stedet for i FixedUpdate eller en coroutine. Ser du i stedet en høj søjle under “Rendering”, er det ofte for mange separate draw calls, noget sprite-atlasser og batching kan reducere markant. Vænner du dig til at åbne Profiler, så snart noget føles sløvt, sparer du dig selv for timevis af gætteri senere i et større projekt.

Unity-priser I 2026: Personal, Pro Og Enterprise

Unity kræver ikke, du skal betale noget som helst for at følge denne Unity tutorial. Personal-planen er gratis og dækker langt de fleste hobbyprojekter og små indie-teams. Vokser dit projekt sig større, er det værd at kende grænserne på forhånd.

PlanPrisKrav
PersonalGratisOmsætning eller finansiering under 200.000 dollar i de seneste 12 måneder
Pro210 dollar om måneden, eller 2.310 dollar om året pr. sædeKrævet ved omsætning eller finansiering over 200.000 dollar
EnterpriseIndividuel pris, kontakt salgKrævet ved årlig omsætning over 25 millioner dollar
IndustryIndividuel pris, kontakt salgRettet mod ikke-spil-brug med finansiering over 1 million dollar

Der er ingen løbende runtime-afgift pr. installation i den nuværende prismodel, kun de faste årlige eller månedlige sæde-priser ovenfor. Vælger du senere at sammenligne mod konkurrenterne, er Unreal Engine kendt for sin royalty-model på indtægt over en vis grænse, mens Godot er helt gratis og open source uden nogen form for licensafgift, ifølge en sammenligning fra GameGen.

Opgraderer du til Pro-planen, følger der mere end bare retten til at bruge Unity kommercielt. Planen giver blandt andet adgang til console-deployment, understøttelse af Apple Vision Pro, og hurtigere kundesupport, hvis noget går galt midt i en produktion. For et solo-projekt eller et lille team er Personal-planen typisk rigeligt, helt indtil projektet reelt begynder at tjene penge, og det er netop pointen med grænsen på 200.000 dollar, den rammer først, når hobbyen er ved at blive en forretning.

Unity Vs. Unreal Engine Vs. Godot: Hvad Skal Du Vælge Derefter?

Når du har gennemført denne Unity tutorial, er det naturligt at spørge, om Unity overhovedet er det rigtige valg på længere sigt. Svaret afhænger af, hvad du vil bygge. Unity har historisk stået stærkt inden for mobil, indie-titler, uddannelse og tværplatform-udvikling, mens Unreal Engine ifølge nyere præferencetal står stærkere blandt større studier og højtopløselige 3D-produktioner, ifølge data fra GameDiscoverCo. Godot vinder til gengæld langsomt frem blandt nyere indie-udviklere, drevet af at motoren er gratis, open source og uden nogen form for royalty-krav.

Kilde / MålingUnityUnreal EngineGodot
Brancheundersøgelse (2.300+ udviklere, primært værktøj)30%42%11%
Andel af nye Steam-udgivelser 2026 (skøn)35-38%18-22%8-10%
Analyse af udgivne spil i 2025Omkring 49,4%Omkring 20%Ikke opgjort

Tag tallene som en indikation af retning snarere end en endegyldig sandhed. Metodeforskelle betyder, at du kan finde endnu andre procenter andre steder, men den overordnede konklusion holder: Unity er stadig bredt brugt, Unreal Engine vinder frem i det øvre, grafiktunge segment, og Godot vokser fra et lille udgangspunkt.

I praksis er valget sjældent så dramatisk, som det lyder. Planlægger du et mobilt 2D-spil eller et lille indie-projekt, er Unity fortsat et sikkert valg takket være mængden af dokumentation og færdige assets. Sigter du efter en fotorealistisk 3D-titel med et større team i ryggen, giver Unreal Engines værktøjer til lys og materialer ofte mere værdi for pengene. Og vil du undgå licensbetingelser helt, uanset hvor stort projektet bliver, er Godot det eneste af de tre, der er fuldstændig gratis og open source uanset omsætning.

Ofte Stillede Spørgsmål

Er Unity gratis at bruge?
Ja, Personal-planen er gratis, så længe din omsætning eller finansiering ligger under 200.000 dollar over de seneste 12 måneder. Over den grænse skal du opgradere til Pro.

Hvilket programmeringssprog bruger Unity?
Unity bruger C# som sit primære scriptingsprog, som i alle kodeeksemplerne i denne Unity tutorial. Der findes også et visuelt scripting-værktøj til dem, der foretrækker ikke at skrive kode direkte.

Kan jeg kun lave 2D-spil i Unity, eller også 3D?
Unity understøtter begge dele fuldt ud via Universal Render Pipeline til lettere projekter og High Definition Render Pipeline til grafiktunge 3D-titler.

Hvor lang tid tager det at lære Unity ordentligt?
Det afhænger af dit udgangspunkt, men følger du denne guide trin for trin, har du et kørende prototype-spil klar inden for en til to timer. At blive tryg med fysik, UI og performance tager typisk flere uger med jævnlig øvelse.

Hvad er den største forskel på Unity og Unreal Engine?
Unity bruger C# og har en lavere adgangstærskel for begyndere, mens Unreal Engine er kendt for sin stærke grafikmotor og bruges mere af større studier til high-end 3D-produktioner.

Virker mit Unity-spil på mobil?
Ja, Unity understøtter både Android og iOS som build-mål. Husk at installere det rette build-modul via Unity Hub, før du forsøger at bygge til mobil første gang.

Hvad koster det, hvis mit spil bliver en succes?
Så længe omsætningen eller finansieringen holder sig under 200.000 dollar, koster det ingenting. Passerer du den grænse, skal du til Pro-planen, og passerer du 25 millioner dollar i årlig omsætning, lander du i Enterprise-kategorien med individuel pris.

Skal jeg bruge Git, selvom jeg er alene om projektet?
Ja. Selv som solo-udvikler redder en simpel Git-historik dig, den dag en pakke-opdatering eller en fejlslået ændring ødelægger projektet, og du har brug for at gå tilbage til en tidligere, kørende version.

Hvorfor bruger I Rigidbody2D i et spil uden tyngdekraft?
Fordi Unitys fysikmotor også håndterer kollisioner og triggere for dig, selv når objektet ikke skal påvirkes af tyngdekraft. Ved at sætte Gravity Scale til 0 får du stadig glæde af den indbyggede kollisionsdetektion, uden at figuren falder ned af skærmen.

Kan jeg bruge AI-værktøjer sammen med Unity?
Ja. Unity 6 LTS leverer Sentis, der kører færdigtrænede AI-modeller direkte i spillet, for eksempel til fjender med mere varieret adfærd, uden at du selv skal bygge en inferens-motor fra bunden.

Hvad gør jeg, hvis projektet pludselig ikke vil åbne?
Luk Unity Hub helt, slet mappen “Library” inde i projektmappen, og åbn projektet igen. Unity genopbygger Library-mappen automatisk ud fra dine Assets, og det løser en stor del af de tilfælde, hvor et projekt nægter at åbne eller hænger fast på en loading-skærm.