Crearea unui joc de vânătoare în Unity

În acest tutorial, vom parcurge procesul de creare a unui joc de vânătoare de bază în Unity. Acest joc va include elemente precum mișcarea jucătorului, IA animală, mecanica de tragere și un sistem de scor. Vom acoperi:

  • Infiintarea proiectului si a mediului
  • Crearea comenzilor pentru jucător
  • Implementarea IA animală
  • Adăugarea mecanicii de tragere
  • Configurarea unui sistem de notare

Configurarea Proiectului

Să începem prin a crea un nou proiect Unity și să creăm mediul.

Crearea Proiectului

  1. Deschideți Unity și creați un nou proiect 3D.
  2. Denumiți-vă proiectul HuntingGame și faceți clic pe Create.
  3. În fereastra Proiect, creați foldere numite Scripts, Prefabs și Materials pentru a vă organiza activele.

Configurarea mediului

  1. În Ierarhie, faceți clic dreapta și selectați 3D Object > Terrain pentru a crea un teren.
  2. Personalizați terenul utilizând Terrain Tools pentru a picta texturi, adăuga copaci și plasați iarbă sau alte detalii.
  3. Adăugați câteva obiecte 3D, cum ar fi pietre și copaci, pentru a face mediul mai realist.

Crearea comenzilor pentru jucător

În continuare, vom crea personajul jucătorului și vom implementa controale de mișcare bazate pe fizică.

Personaj jucător

  1. În Ierarhie, faceți clic dreapta și selectați 3D Object > Capsule pentru a crea un personaj jucător.
  2. Redenumiți capsula în Player și poziționați-o deasupra terenului.
  3. Adăugați o componentă Rigidbody la obiectul Player pentru mișcarea bazată pe fizică.
  4. Adăugați o Cameră ca copil al obiectului Player pentru a servi drept punct de vedere al jucătorului.

Script de mișcare a jucătorului

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);
    }
}
  1. Creați un nou script C# numit PlayerMovement.cs în folderul Scripts.
  2. Atașați scriptul PlayerMovement la obiectul Player.

Implementarea Animal AI

Vom crea o IA simplă pentru animale care să cutreiere mediul înconjurător și să reacționeze la jucător.

Animal prefabricat

  1. Importați sau creați un model 3D pentru animal (de exemplu, un căprior).
  2. Trageți modelul în scenă și poziționați-l pe teren.
  3. Faceți clic dreapta pe model în Ierarhie și selectați Creare Empty pentru a crea un obiect părinte. Numele-i Cerbul.
  4. Trageți modelul 3D în obiectul Deer și resetați-i transformarea.
  5. Salvați obiectul Deer ca prefabricat trăgându-l în folderul Prefabs.

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);
        }
    }
}
  1. Creați un nou script C# numit AnimalAI.cs în folderul Scripts.
  2. Atașați scriptul AnimalAI la prefabricatul Deer.
  3. Adăugați o componentă NavMeshAgent la prefabricatul Deer.
  4. Configurați puncte de referință în scenă creând GameObjects goale și poziționându-le după cum doriți. Atribuiți aceste puncte de referință matricei waypoints în scriptul AnimalAI.

Adăugarea mecanicii de fotografiere

Vom implementa capacitatea jucătorului de a trage în animale.

Script de filmare

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);
        }
    }
}
  1. Creați un nou script C# numit PlayerShooting.cs în folderul Scripts.
  2. Atașați scriptul PlayerShooting la obiectul Player.
  3. Creați un efect de impact (de exemplu, un sistem de particule) și atribuiți-l câmpului impactEffect din script.

Configurarea unui sistem de notare

Vom adăuga un sistem simplu de punctare pentru a urmări vânătoarele de succes ale jucătorului.

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;
    }
}
  1. Creați un nou script C# numit ScoreManager.cs în folderul Scripts.
  2. Atașați scriptul ScoreManager la un nou GameObject gol numit GameManager.
  3. Creați un element Text UI pentru afișarea scorului și atribuiți-l câmpului scoreText din scriptul ScoreManager.

Actualizarea scriptului de fotografiere pentru a urmări scorul

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);
    }
}

Concluzie

Am creat un joc de vânătoare de bază în Unity. Am configurat proiectul și mediul, am creat controale pentru jucători cu mișcare bazată pe fizică, am implementat IA pentru animale, am adăugat mecanisme de tragere și am configurat un sistem de punctare. Aceste cunoștințe de bază pot fi extinse pentru a include comportamente mai complexe, animale suplimentare și mecanici de joc rafinate pentru a vă îmbunătăți jocul de vânătoare.