What is a game object in Unity?

Find Spilobjekter i Unity: En Komplet Guide

19/04/2022

Rating: 4.82 (13767 votes)
Indholdsfortegnelse

Hvad er et Spilobjekt i Unity?

I Unity er et spilobjekt den grundlæggende byggesten for alt i din scene. Tænk på det som en tom container, der kan indeholde forskellige komponenter. Disse komponenter giver spilobjektet funktionalitet – det kan være alt fra et visuelt udseende (en 3D-model), til hvordan det reagerer på fysik, til hvordan det håndterer brugerinput. Spilobjekter er det, der udgør din spilverden, fra en simpel terning til en kompleks karakter eller et miljø.

How do Lods work in Unity?
Another use case for LODs in Unity is their ability to hide (also known as culling) the object when it takes up a certain screen percentage. Hiding the mesh from a distance will stop it rendering, thus reducing the total polygon count. This can also be done with the LOD Group component.

Komponentbaseret Arkitektur: Hjertet af Unity

Unity opererer efter en komponentbaseret arkitektur. Dette betyder, at spilobjekter i sig selv er ret begrænsede. For at give dem liv og funktionalitet, tilføjer vi komponenter. Disse komponenter er typisk skrevet i C# (selvom JavaScript også er en mulighed, anbefales C# generelt for dets modernitet og integration med Unitys økosystem).

Denne tilgang minder meget om webudvikling, hvor man bygger sider ud af genanvendelige komponenter som knapper, inputfelter og layouts. I Unity kan du skabe små, robuste og genanvendelige komponenter, der hver især udfører en specifik opgave. Disse komponenter samles derefter på spilobjekter for at skabe komplekse entiteter. Fordelen ved dette er klar kommunikation mellem elementer og en markant reduceret risiko for utilsigtede sideeffekter, hvilket gør debugging enklere.

Nøgle Indbyggede Komponenter

Unity leveres med en række indbyggede komponenter, der giver grundlæggende funktionalitet. Her er nogle af de mest essentielle:

KomponentBeskrivelse
MeshFilterTillader tildeling af en 3D-mesh til et spilobjekt.
MeshRendererGør det muligt at tildele materialer til en 3D-mesh, hvilket giver den et visuelt udseende.
Collider (Box, Mesh, etc.)Muliggør detektion af spilobjekter under kollisioner.
RigidbodyAktiverer realistisk fysiksimulering for spilobjekter, især dem med 3D-meshes, og kan udløse kollisionsdetektionshændelser.
LightBelyser dele af din scene.
CameraDefinerer spillerens synsvinkel (viewport) og kan fastgøres til et spilobjekt.
UI Canvas KomponenterBruges til at vise grafiske brugergrænseflader (GUI).

Disse er blot nogle få eksempler. Unitys dokumentation, som er tilgængelig offline via hjælpesektionen i editoren, er en uvurderlig ressource for at lære mere om alle de tilgængelige komponenter.

Oprettelse af Brugerdefinerede Komponenter

Mens de indbyggede komponenter håndterer fysik og grafik, er det brugerdefinerede komponenter, der giver dit spil dets unikke mekanik, inputhåndtering og logik. For at oprette en ny komponent navigerer du til dit ønskede spilobjekt, vælger 'Add Component', og i søgefeltet skriver du navnet på din nye komponent efterfulgt af 'New Script (C#)'.

MonoBehaviour: Grundlaget for Dine Scripts

Alle dine brugerdefinerede komponenter, der har interaktion med spillets livscyklus, nedarver fra MonoBehaviour-klassen. Denne klasse giver adgang til essentielle metoder:

  • void Start(): Kaldes én gang, når spilobjektet, der indeholder scriptet, bliver instansieret i scenen. Perfekt til initialiseringskode, som at sætte en spillers udstyr ved spawn.
  • void Update(): Kaldes hver frame. Dette er stedet, hvor du typisk placerer kode, der håndterer brugerinput og opdaterer spilobjektets tilstand, såsom bevægelse.

Inspector Variabler: Fleksibilitet og Kontrol

For at gøre dine komponenter fleksible, kan du deklarere public variabler i dit script. Disse variabler vil blive synlige i Unitys Inspector-vindue, hvilket giver dig mulighed for at justere værdier som skade, hastighed eller følsomhed direkte i editoren, selv under kørsel (selvom ændringer foretaget under kørsel ikke gemmes permanent).

Interaktion med Brugerinput

Dit spil skal reagere på spillerens handlinger. Dette gøres typisk inden for Update()-metoden ved at bruge Unitys Input-system:

  • Input.GetKey(KeyCode.W): Returnerer true, hvis W-tasten holdes nede.
  • Input.GetKeyDown(KeyCode.W): Returnerer true, når W-tasten først trykkes ned.
  • Input.GetAxis("Vertical") / Input.GetAxis("Horizontal"): Returnerer en værdi mellem -1 og 1, der repræsenterer input fra f.eks. tastaturpiletaster eller et analogt joystick.

Manipulation af Spilobjekter

Når du har brugerinput, skal dine spilobjekter reagere. Dette kan involvere ændringer i deres translation (position), rotation eller skala. Alle spilobjekter har en transform-komponent, der giver adgang til disse manipulationer.

How to find a GameObject at runtime in Unity?
To find a GameObject at runtime in Unity, there are several ways: GameObject.Find, Resources.FindObjectsOfTypeAll, finding a gameobject with a tag, Transform.Find, and Transform.GetChild. For example, we will find this GameObject (shown in the image below) in different ways:

Transformationer i Lokal og Verdensrum

Det er ofte nemmere at arbejde med objekters position og rotation i deres lokale rum, hvilket betyder i forhold til deres forældreobjekt. Dette står i modsætning til verdensrum, som er det globale koordinatsystem. Du kan konvertere mellem disse rum ved hjælp af metoder som Transform.TransformPoint() og Transform.InverseTransformPoint().

Oprettelse af Nye Spilobjekter (Prefabs)

Ofte skal du kunne generere spilobjekter dynamisk under spillet, f.eks. projektiler, fjender eller rekvisitter. Dette gøres ved hjælp af prefabs. En prefab er en skabelon for et spilobjekt, som du opretter ved at trække et spilobjekt fra scenen over i din projektmappe (Assets). Når du har en prefab, kan du instantiere den i din kode:

public GameObject projectilePrefab; void Fire() { Instantiate(projectilePrefab, transform.position, Quaternion.identity); } 

Du kan tildele din prefab til den offentlige variabel projectilePrefab via Inspector.

Find Spilobjekter i Unity

At finde og interagere med andre spilobjekter er en fundamental del af spiludvikling. Her er de mest almindelige metoder:

1. GameObject.Find()

Den mest direkte metode. Den tager en streng, der repræsenterer objektets navn eller sti i hierarkiet. Advarsel: Brug af GameObject.Find() i Update() kan have en negativ indvirkning på spillets ydeevne. Brug den fortrinsvis i Start() eller Awake() og gem referencen i en variabel.

GameObject player = GameObject.Find("Player"); 

Bemærk, at GameObject.Find() kun finder aktive objekter.

2. GameObject.FindWithTag()

En mere effektiv metode, hvis du har tildelt tags til dine spilobjekter via Tag Manager i Unity. Den returnerer det første aktive spilobjekt med det specificerede tag.

GameObject ball = GameObject.FindWithTag("Ball"); 

3. Transform.Find()

Hvis du vil finde et barnobjekt af et specifikt forældreobjekt, kan du bruge transform.Find(). Den søger efter et barnobjekt ved dets navn, relativt til forælderen.

How to find game objects in Unity?
In conclusion, Unity provides various methods to find game objects efficiently. Whether you choose to use the GameObject.Find method, leverage tags and the Tag Manager, or store object references in member variables, understanding the different ways to find game objects in Unity will greatly enhance your game development workflow.
Transform childTransform = transform.Find("ChildObjectName"); GameObject childObject = childTransform.gameObject; 

4. Offentlige Variabler (Inspector Tildeling)

Den mest ydelsesvenlige og anbefalede metode er at erklære en offentlig variabel i dit script og derefter trække og slippe det ønskede spilobjekt fra hierarkiet ind i Inspector-feltet. Dette giver dig en direkte reference uden behov for søgning under kørsel.

public GameObject targetObject; void Update() { if (targetObject != null) { // Gør noget med targetObject } } 

Denne metode giver også mulighed for at tildele inaktive objekter.

5. SendMessage() og SendMessageUpwards()

Disse metoder sender en besked (navnet på en funktion) til andre spilobjekter eller komponenter. SendMessage() sender beskeden nedad i hierarkiet, mens SendMessageUpwards() sender den både nedad og opad.

6. Raycasting

Raycasting involverer at sende en usynlig stråle ud i scenen for at detektere, hvad den rammer. Dette er nyttigt for alt fra hit-detection i våbensystemer til at vælge objekter med musen. Strålen vil kun interagere med objekter, der har en Collider-komponent.

7. Kollisionsdetektion

For at registrere kollisioner skal mindst ét af de kolliderende objekter have en Rigidbody-komponent, og mindst ét skal have en Collider. Du kan bruge metoder som OnCollisionEnter(), OnCollisionStay() og OnCollisionExit() i dine scripts til at reagere på disse hændelser.

Yderligere Overvejelser

Level of Detail (LOD)

LOD-systemer i Unity bruges til at optimere ydeevnen ved at vise simplere versioner af modeller, når de er længere væk fra kameraet. Dette reducerer antallet af polygoner, der skal renderes, og kan også bruges til at skjule objekter helt, når de optager en vis procentdel af skærmen (culling).

How do I build a mobile game with unity hub?

GUI Oprettelse

Unity har et robust UI-system til at skabe brugergrænseflader, der fungerer på en lignende principiel måde som andre komponenter.

Udvidelse af Unity Editoren

Du kan tilføje brugerdefinerede knapper og værktøjer til Unity Editoren for at strømline din arbejdsgang, f.eks. til opbygning af niveauer.

Materialer og PBR

Unitys renderingmotor understøtter Physically Based Rendering (PBR), hvilket muliggør realistisk lys og materialer. For at opnå flotte visuelle resultater kræver dette ofte gode 3D-modelleringsfærdigheder eller brug af optimerede modeller fra andre kilder.

Råd til Begyndere

Spiludvikling er en kompleks proces. Start med enkle koncepter og opdel dit projekt i små, opnåelige milepæle. Fokuser på at holde dine komponenter så uafhængige som muligt for at minimere fejl. Undersøg altid eksisterende løsninger på problemer, før du skriver din egen kode; der er stor sandsynlighed for, at nogen allerede har fundet en elegant løsning.

Nyttige Ressourcer og Fællesskaber

Spiludviklingsfællesskabet er utroligt hjælpsomt, med mange erfarne fagfolk, der deler viden. Udforsk ressourcer inden for konceptkunst, 3D-modellering og programmering for at udvide dine færdigheder.

At mestre, hvordan man finder og manipulerer spilobjekter i Unity, er et afgørende skridt i din rejse som spiludvikler. Ved at bruge de rette metoder og optimere din kode kan du skabe mere effektive og engagerende spiloplevelser.

Hvis du vil læse andre artikler, der ligner Find Spilobjekter i Unity: En Komplet Guide, kan du besøge kategorien Teknologi.

Go up