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
HuntingGameog klik påCreate. - I projektvinduet skal du oprette mapper med navnet
Scripts,PrefabsogMaterialsfor at organisere dine aktiver.
Opsætning af miljøet
- I hierarkiet skal du højreklikke og vælge
3D Objekt > Terrænfor at oprette et terræn. - Tilpas terrænet ved at bruge
Terrænværktøjernetil 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 > Kapselfor at oprette en spillerkarakter. - Omdøb kapslen til
Playerog placer den over terrænet. - Tilføj en
Rigidbody-komponent tilPlayer-objektet til fysikbaseret bevægelse. - Tilføj et
Camerasom et underordnetPlayerobjekt 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.csi mappenScripts. - Vedhæft
PlayerMovementscriptet tilPlayerobjektet.
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 tomfor 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.csi mappenScripts. - Vedhæft
AnimalAIscriptet tilDeerpræfabrikatet. - Tilføj en
NavMeshAgent-komponent tilDeerpræfabrikatet. - Opsæt waypoints i scenen ved at oprette tomme GameObjects og placere dem som ønsket. Tildel disse waypoints til
waypointsarrayet iAnimalAIscriptet.
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.csi mappenScripts. - Vedhæft
PlayerShootingscriptet tilPlayerobjektet. - 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.csi mappenScripts. - Vedhæft
ScoreManagerscriptet 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.