Oprettelse af et jagtspil i Unity
I denne tutorial vil vi gennemgå processen med at skabe et grundlæggende jagtspil i Unity. Dette spil vil indeholde elementer som spillerbevægelse, dyre-AI, skydemekanik og et scoringssystem. Vi vil dække:
- Opsætning af projekt og miljø
- Oprettelse af spillerkontroller
- Implementering af animalsk AI
- Tilføjelse af skydemekanik
- Opsætning af et scoringssystem
Opsætning af projektet
Lad os starte med at oprette et nyt Unity-projekt og skabe miljøet.
Oprettelse af projektet
- Åbn Unity og opret et nyt 3D-projekt.
- Navngiv dit projekt
HuntingGame
og klik påCreate
. - I projektvinduet skal du oprette mapper med navnet
Scripts
,Prefabs
ogMaterials
for at organisere dine aktiver.
Opsætning af miljøet
- I hierarkiet skal du højreklikke og vælge
3D Objekt > Terræn
for at oprette et terræn. - Tilpas terrænet ved at bruge
Terrænværktøjerne
til at male teksturer, tilføje træer og placere græs eller andre detaljer. - Tilføj et par 3D-objekter som klipper og træer for at gøre miljøet mere realistisk.
Oprettelse af spillerkontroller
Dernæst skaber vi spillerkarakteren og implementerer fysikbaserede bevægelseskontroller.
Spiller karakter
- I hierarkiet skal du højreklikke og vælge
3D-objekt > Kapsel
for at oprette en spillerkarakter. - Omdøb kapslen til
Player
og placer den over terrænet. - Tilføj en
Rigidbody
-komponent tilPlayer
-objektet til fysikbaseret bevægelse. - Tilføj et
Camera
som et underordnetPlayer
objekt for at tjene som spillerens synspunkt.
Player Movement Script
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5f;
public float rotationSpeed = 100f;
private Rigidbody rb;
void Start()
{
rb = GetComponent();
rb.freezeRotation = true;
}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = transform.forward * moveVertical * moveSpeed * Time.deltaTime;
rb.MovePosition(rb.position + movement);
float rotation = Input.GetAxis("Mouse X") * rotationSpeed * Time.deltaTime;
Quaternion turnRotation = Quaternion.Euler(0f, rotation, 0f);
rb.MoveRotation(rb.rotation * turnRotation);
}
}
- Opret et nyt C#-script ved navn
PlayerMovement.cs
i mappenScripts
. - Vedhæft
PlayerMovement
scriptet tilPlayer
objektet.
Implementering af Animal AI
Vi vil skabe simpel animalsk AI til at strejfe rundt i miljøet og reagere på spilleren.
Prefab dyr
- Importer eller lav en 3D-model for dyret (f.eks. et rådyr).
- Træk modellen ind i scenen og placer den på terrænet.
- Højreklik på modellen i hierarkiet, og vælg
Opret tom
for at oprette et overordnet objekt. Navngiv denHjorte
. - Træk 3D-modellen ind i
Deer
-objektet og nulstil dets transformation. - Gem
Deer
-objektet som et præfabrikat ved at trække det ind i mappenPrefabs
.
Animal AI Script
using UnityEngine;
using UnityEngine.AI;
public class AnimalAI : MonoBehaviour
{
public Transform[] waypoints;
private NavMeshAgent agent;
private int currentWaypoint = 0;
void Start()
{
agent = GetComponent();
agent.SetDestination(waypoints[currentWaypoint].position);
}
void Update()
{
if (agent.remainingDistance < agent.stoppingDistance)
{
currentWaypoint = (currentWaypoint + 1) % waypoints.Length;
agent.SetDestination(waypoints[currentWaypoint].position);
}
}
}
- Opret et nyt C#-script med navnet
AnimalAI.cs
i mappenScripts
. - Vedhæft
AnimalAI
scriptet tilDeer
præfabrikatet. - Tilføj en
NavMeshAgent
-komponent tilDeer
præfabrikatet. - Opsæt waypoints i scenen ved at oprette tomme GameObjects og placere dem som ønsket. Tildel disse waypoints til
waypoints
arrayet iAnimalAI
scriptet.
Tilføjelse af skydemekanik
Vi implementerer spillerens evne til at skyde på dyr.
Shooting Script
using UnityEngine;
public class PlayerShooting : MonoBehaviour
{
public Camera playerCamera;
public float range = 100f;
public GameObject impactEffect;
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Shoot();
}
}
void Shoot()
{
RaycastHit hit;
if (Physics.Raycast(playerCamera.transform.position, playerCamera.transform.forward, out hit, range))
{
AnimalAI animal = hit.transform.GetComponent();
if (animal != null)
{
Destroy(hit.transform.gameObject);
}
GameObject impactGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(impactGO, 2f);
}
}
}
- Opret et nyt C#-script ved navn
PlayerShooting.cs
i mappenScripts
. - Vedhæft
PlayerShooting
scriptet tilPlayer
objektet. - Opret en effekteffekt (f.eks. et partikelsystem) og tildel den til
impactEffect
-feltet i scriptet.
Opsætning af et scoringssystem
Vi tilføjer et simpelt scoringssystem til at spore spillerens succesfulde jagter.
Score Manager Script
using UnityEngine;
using UnityEngine.UI;
public class ScoreManager : MonoBehaviour
{
public static int score = 0;
public Text scoreText;
void Update()
{
scoreText.text = "Score: " + score.ToString();
}
public static void AddScore(int points)
{
score += points;
}
}
- Opret et nyt C#-script ved navn
ScoreManager.cs
i mappenScripts
. - Vedhæft
ScoreManager
scriptet til et nyt tomt GameObject ved navnGameManager
. - Opret et UI-tekstelement til at vise partituret og tildel det til
scoreText
-feltet iScoreManager
-scriptet.
Opdatering af skydescriptet til at spore resultat
void Shoot()
{
RaycastHit hit;
if (Physics.Raycast(playerCamera.transform.position, playerCamera.transform.forward, out hit, range))
{
AnimalAI animal = hit.transform.GetComponent();
if (animal != null)
{
Destroy(hit.transform.gameObject);
ScoreManager.AddScore(10);
}
GameObject impactGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(impactGO, 2f);
}
}
Konklusion
Vi har lavet et grundlæggende jagtspil i Unity. Vi satte projektet og miljøet op, skabte spillerkontroller med fysikbaseret bevægelse, implementerede animalsk AI, tilføjede skydemekanik og satte et scoringssystem op. Denne grundlæggende viden kan udvides til at omfatte mere kompleks adfærd, yderligere dyr og raffineret vildtmekanik for at forbedre dit jagtspil.