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
HuntingGameen klik opCreate. - Maak in het projectvenster mappen met de naam
Scripts,PrefabsenMaterialsom uw assets te ordenen.
De omgeving instellen
- Klik met de rechtermuisknop in de hiërarchie en selecteer
3D-object > Terreinom een terrein te maken. - Pas het terrein aan met de
Terreingereedschappenom 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 > Capsuleom een spelerpersonage te maken. - Hernoem de capsule naar
Speleren plaats deze boven het terrein. - Voeg een
Rigidbody-component toe aan hetPlayer-object voor op natuurkunde gebaseerde bewegingen. - Voeg een
Cameratoe 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.csin de mapScripts. - Koppel het script
PlayerMovementaan 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 Emptyom 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 mapPrefabste 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.csin 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
waypointsarray in hetAnimalAIscript.
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.csin de mapScripts. - Koppel het script
PlayerShootingaan het objectPlayer. - Maak een impacteffect (bijvoorbeeld een deeltjessysteem) en wijs dit toe aan het veld
impactEffectin 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.csin de mapScripts. - Koppel het script
ScoreManageraan een nieuw leeg GameObject met de naamGameManager. - Maak een UI-tekstelement voor het weergeven van de score en wijs dit toe aan het veld
scoreTextin 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.