Skapa ett jaktspel i Unity
I den här handledningen går vi igenom processen att skapa ett grundläggande jaktspel i Unity. Det här spelet kommer att innehålla element som spelarrörelser, djur-AI, skjutmekanik och ett poängsystem. Vi kommer att täcka:
- Att sätta upp projektet och miljön
- Skapa spelarkontroller
- Implementering av animal AI
- Lägger till skjutmekanik
- Inrätta ett poängsystem
Konfigurera projektet
Låt oss börja med att sätta upp ett nytt Unity-projekt och skapa miljön.
Skapar projektet
- Öppna Unity och skapa ett nytt 3D-projekt.
- Namnge ditt projekt
HuntingGame
och klicka påCreate
. - I projektfönstret skapar du mappar med namnet
Scripts
,Prefabs
ochMaterials
för att organisera dina tillgångar.
Ställa in miljön
- I hierarkin högerklickar du och väljer
3D-objekt > Terräng
för att skapa en terräng. - Anpassa terrängen genom att använda
Terrängverktygen
för att måla texturer, lägga till träd och placera gräs eller andra detaljer. - Lägg till några 3D-objekt som stenar och träd för att göra miljön mer realistisk.
Skapa spelarkontroller
Därefter skapar vi spelarkaraktären och implementerar fysikbaserade rörelsekontroller.
Spelarkaraktär
- I hierarkin högerklickar du och väljer
3D-objekt > Kapsel
för att skapa en spelarkaraktär. - Byt namn på kapseln till
Player
och placera den ovanför terrängen. - Lägg till en
Rigidbody
-komponent tillPlayer
-objektet för fysikbaserad rörelse. - Lägg till en
Camera
som ett barn tillPlayer
-objektet för att tjäna som spelarens synvinkel.
Spelarrörelsemanus
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);
}
}
- Skapa ett nytt C#-skript med namnet
PlayerMovement.cs
i mappenScripts
. - Bifoga
PlayerMovement
-skriptet tillPlayer
-objektet.
Implementering av Animal AI
Vi kommer att skapa enkel djur-AI för att ströva runt i miljön och reagera på spelaren.
Animal Prefab
- Importera eller skapa en 3D-modell för djuret (t.ex. ett rådjur).
- Dra modellen in i scenen och placera den i terrängen.
- Högerklicka på modellen i hierarkin och välj
Skapa tom
för att skapa ett överordnat objekt. Döp det tillHjortar
. - Dra 3D-modellen till
Deer
-objektet och återställ dess transformation. - Spara
Deer
-objektet som ett prefab genom att dra det till 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);
}
}
}
- Skapa ett nytt C#-skript med namnet
AnimalAI.cs
i mappenScripts
. - Bifoga
AnimalAI
-skriptet tillDeer
prefab. - Lägg till en
NavMeshAgent
-komponent tillDeer
prefab. - Ställ in waypoints i scenen genom att skapa tomma GameObjects och placera dem efter önskemål. Tilldela dessa waypoints till
waypoints
arrayen iAnimalAI
skriptet.
Lägger till skyttemekanik
Vi kommer att implementera förmågan för spelaren att skjuta på djur.
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);
}
}
}
- Skapa ett nytt C#-skript som heter
PlayerShooting.cs
i mappenScripts
. - Bifoga
PlayerShooting
-skriptet tillPlayer
-objektet. - Skapa en effekteffekt (t.ex. ett partikelsystem) och tilldela den till
impactEffect
-fältet i skriptet.
Konfigurera ett poängsystem
Vi lägger till ett enkelt poängsystem för att spåra spelarens framgångsrika jakter.
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;
}
}
- Skapa ett nytt C#-skript med namnet
ScoreManager.cs
i mappenScripts
. - Bifoga
ScoreManager
-skriptet till ett nytt tomt GameObject som heterGameManager
. - Skapa ett UI-textelement för att visa poängen och tilldela det till
scoreText
-fältet iScoreManager
-skriptet.
Uppdatering av skjutskriptet för att spåra 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);
}
}
Slutsats
Vi har skapat ett grundläggande jaktspel i Unity. Vi satte upp projektet och miljön, skapade spelarkontroller med fysikbaserad rörelse, implementerade djur-AI, lade till skjutmekanik och satte upp ett poängsystem. Denna grundläggande kunskap kan utökas till att omfatta mer komplexa beteenden, ytterligare djur och förfinad spelmekanik för att förbättra ditt jaktspel.