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
HuntingGameoch klicka påCreate. - I projektfönstret skapar du mappar med namnet
Scripts,PrefabsochMaterialsför att organisera dina tillgångar.
Ställa in miljön
- I hierarkin högerklickar du och väljer
3D-objekt > Terrängför att skapa en terräng. - Anpassa terrängen genom att använda
Terrängverktygenfö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 > Kapselför att skapa en spelarkaraktär. - Byt namn på kapseln till
Playeroch placera den ovanför terrängen. - Lägg till en
Rigidbody-komponent tillPlayer-objektet för fysikbaserad rörelse. - Lägg till en
Camerasom 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.csi 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 tomfö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.csi mappenScripts. - Bifoga
AnimalAI-skriptet tillDeerprefab. - Lägg till en
NavMeshAgent-komponent tillDeerprefab. - Ställ in waypoints i scenen genom att skapa tomma GameObjects och placera dem efter önskemål. Tilldela dessa waypoints till
waypointsarrayen iAnimalAIskriptet.
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.csi 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.csi 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.