Opprette et jaktspill i Unity
I denne opplæringen går vi gjennom prosessen med å lage et grunnleggende jaktspill i Unity. Dette spillet vil inneholde elementer som spillerbevegelse, dyre-AI, skytemekanikk og et scoringssystem. Vi vil dekke:
- Sette opp prosjektet og miljøet
- Lage spillerkontroller
- Implementering av animalsk AI
- Legger til skytemekanikk
- Sette opp et poengsystem
Sette opp prosjektet
La oss starte med å sette opp et nytt Unity-prosjekt og skape miljøet.
Opprette prosjektet
- Åpne Unity og lag et nytt 3D-prosjekt.
- Gi prosjektet et navn
HuntingGame
og klikkCreate
. - I prosjektvinduet oppretter du mapper som heter
Scripts
,Prefabs
ogMaterials
for å organisere ressursene dine.
Sette opp miljøet
- I hierarkiet høyreklikker du og velger
3D-objekt > Terreng
for å lage et terreng. - Tilpass terrenget ved å bruke
Terrengverktøy
for å male teksturer, legge til trær og plassere gress eller andre detaljer. - Legg til noen få 3D-objekter som steiner og trær for å gjøre miljøet mer realistisk.
Opprette spillerkontroller
Deretter skal vi lage spillerkarakteren og implementere fysikkbaserte bevegelseskontroller.
Spillerkarakter
- Høyreklikk i hierarkiet og velg
3D Object > Capsule
for å lage en spillerkarakter. - Gi kapselen nytt navn til
Player
og plasser den over terrenget. - Legg til en
Rigidbody
-komponent tilPlayer
-objektet for fysikkbasert bevegelse. - Legg til et
Camera
som et barn avPlayer
-objektet for å 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);
}
}
- Lag et nytt C#-skript med navnet
PlayerMovement.cs
i mappenScripts
. - Fest
PlayerMovement
-skriptet tilPlayer
-objektet.
Implementering av Animal AI
Vi lager enkel dyre-AI for å streife rundt i miljøet og reagere på spilleren.
Animal Prefab
- Importer eller lag en 3D-modell for dyret (f.eks. et rådyr).
- Dra modellen inn i scenen og plasser den i terrenget.
- Høyreklikk modellen i hierarkiet og velg
Opprett tom
for å lage et overordnet objekt. Gi det navnetHjort
. - Dra 3D-modellen inn i
Deer
-objektet og tilbakestill transformasjonen. - Lagre
Deer
-objektet som et prefab ved å dra det inn iPrefabs
-mappen.
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);
}
}
}
- Lag et nytt C#-skript med navnet
AnimalAI.cs
i mappenScripts
. - Fest
AnimalAI
-skriptet tilDeer
prefab. - Legg til en
NavMeshAgent
-komponent tilDeer
prefab. - Sett opp veipunkter i scenen ved å lage tomme GameObjects og plassere dem som ønsket. Tilordne disse veipunktene til
waypoints
-matrisen iAnimalAI
-skriptet.
Legger til skytemekanikk
Vi implementerer muligheten for spilleren til å skyte 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);
}
}
}
- Lag et nytt C#-skript med navnet
PlayerShooting.cs
i mappenScripts
. - Fest
PlayerShooting
-skriptet tilPlayer
-objektet. - Lag en effekteffekt (f.eks. et partikkelsystem) og tilordne den til
impactEffect
-feltet i skriptet.
Sette opp et poengsystem
Vi legger til et enkelt poengsystem for å spore spillerens vellykkede jakter.
Score Manager-skript
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;
}
}
- Lag et nytt C#-skript med navnet
ScoreManager.cs
i mappenScripts
. - Fest
ScoreManager
-skriptet til et nytt tomt GameObject kaltGameManager
. - Lag et UI-tekstelement for å vise poengsummen og tilordne det til
scoreText
-feltet iScoreManager
-skriptet.
Oppdatering av skyteskriptet for å 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);
}
}
Konklusjon
Vi har laget et grunnleggende jaktspill i Unity. Vi satte opp prosjektet og miljøet, lagde spillerkontroller med fysikkbasert bevegelse, implementerte dyre-AI, la til skytemekanikk og satte opp et scoringssystem. Denne grunnleggende kunnskapen kan utvides til å inkludere mer kompleks atferd, flere dyr og raffinert viltmekanikk for å forbedre jaktspillet ditt.