Een jachtspel maken in Unity
In deze tutorial doorlopen we het proces van het maken van een basisjachtspel in Unity. Dit spel bevat elementen zoals spelerbeweging, dierlijke AI, schietmechanismen en een scoresysteem. We behandelen:
- Het project en de omgeving opzetten
- Spelerbedieningen maken
- Implementatie van dierlijke AI
- Schietmechanismen toevoegen
- Een puntensysteem opzetten
Het project opzetten
Laten we beginnen met het opzetten van een nieuw Unity-project en het creëren van de omgeving.
Het project creëren
- Open Unity en maak een nieuw 3D-project.
- Geef je project de naam
HuntingGame
en klik opCreate
. - Maak in het projectvenster mappen met de naam
Scripts
,Prefabs
enMaterials
om uw assets te ordenen.
De omgeving instellen
- Klik met de rechtermuisknop in de hiërarchie en selecteer
3D-object > Terrein
om een terrein te maken. - Pas het terrein aan met de
Terreingereedschappen
om texturen te schilderen, bomen toe te voegen en gras of andere details te plaatsen. - Voeg een paar 3D-objecten toe, zoals rotsen en bomen, om de omgeving realistischer te maken.
Spelerbedieningen maken
Vervolgens creëren we het personage van de speler en implementeren we op fysica gebaseerde bewegingsbesturingen.
Speler Karakter
- Klik met de rechtermuisknop in de hiërarchie en selecteer
3D-object > Capsule
om een spelerpersonage te maken. - Hernoem de capsule naar
Speler
en plaats deze boven het terrein. - Voeg een
Rigidbody
-component toe aan hetPlayer
-object voor op natuurkunde gebaseerde bewegingen. - Voeg een
Camera
toe als onderliggend object van hetPlayer
-object dat als het gezichtspunt van de speler dient.
Speler Beweging 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);
}
}
- Maak een nieuw C#-script met de naam
PlayerMovement.cs
in de mapScripts
. - Koppel het script
PlayerMovement
aan het objectPlayer
.
Implementatie van dierlijke AI
We creëren een eenvoudige dierlijke AI die door de omgeving kan bewegen en op de speler kan reageren.
Prefab voor dieren
- Importeer of maak een 3D-model van het dier (bijvoorbeeld een hert).
- Sleep het model naar de scène en positioneer het op het terrein.
- Klik met de rechtermuisknop op het model in de hiërarchie en selecteer
Create Empty
om een bovenliggend object te maken. Noem hetDeer
. - Sleep het 3D-model naar het
Deer
-object en reset de transformatie. - Sla het
Deer
-object op als een prefab door het naar de mapPrefabs
te slepen.
Dierlijk 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);
}
}
}
- Maak een nieuw C#-script met de naam
AnimalAI.cs
in de mapScripts
. - Koppel het
AnimalAI
-script aan deDeer
-prefab. - Voeg een
NavMeshAgent
-component toe aan deDeer
-prefab. - Stel waypoints in de scène in door lege GameObjects te maken en deze naar wens te positioneren. Wijs deze waypoints toe aan de
waypoints
array in hetAnimalAI
script.
Schietmechanismen toevoegen
We gaan de mogelijkheid voor de speler implementeren om op dieren te schieten.
Schietscript
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);
}
}
}
- Maak een nieuw C#-script met de naam
PlayerShooting.cs
in de mapScripts
. - Koppel het script
PlayerShooting
aan het objectPlayer
. - Maak een impacteffect (bijvoorbeeld een deeltjessysteem) en wijs dit toe aan het veld
impactEffect
in het script.
Een scoresysteem opzetten
We voegen een eenvoudig puntensysteem toe om de succesvolle jachten van de speler bij te houden.
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;
}
}
- Maak een nieuw C#-script met de naam
ScoreManager.cs
in de mapScripts
. - Koppel het script
ScoreManager
aan een nieuw leeg GameObject met de naamGameManager
. - Maak een UI-tekstelement voor het weergeven van de score en wijs dit toe aan het veld
scoreText
in het scriptScoreManager
.
Het opnamescript bijwerken om de score bij te houden
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);
}
}
Conclusie
We hebben een basisjachtspel gemaakt in Unity. We hebben het project en de omgeving opgezet, spelerbesturingen gemaakt met op fysica gebaseerde bewegingen, dierlijke AI geïmplementeerd, schietmechanismen toegevoegd en een scoresysteem opgezet. Deze basiskennis kan worden uitgebreid met complexere gedragingen, extra dieren en verfijnde spelmechanismen om je jachtspel te verbeteren.