Створення мисливської гри в Unity

У цьому підручнику ми розповімо про процес створення базової мисливської гри в Unity. Ця гра включатиме такі елементи, як рух гравця, штучний інтелект тварин, механіка стрільби та система підрахунку очок. Ми розглянемо:

  • Налаштування проекту та середовища
  • Створення елементів керування гравцем
  • Впровадження ШІ тварин
  • Додавання механіки стрільби
  • Налаштування системи підрахунку балів

Налаштування проекту

Давайте почнемо з налаштування нового проекту Unity і створення середовища.

Створення проекту

  1. Відкрийте Unity і створіть новий 3D-проект.
  2. Назвіть свій проект HuntingGame і натисніть Створити.
  3. У вікні проекту створіть папки з іменами Scripts, Prefabs і Materials, щоб упорядкувати свої ресурси.

Налаштування середовища

  1. В ієрархії клацніть правою кнопкою миші та виберіть 3D Object > Terrain, щоб створити рельєф.
  2. Налаштуйте рельєф за допомогою Інструментів рельєфу, щоб намалювати текстури, додати дерева, розмістити траву чи інші деталі.
  3. Додайте кілька 3D-об’єктів, як-от каміння та дерева, щоб зробити середовище більш реалістичним.

Створення елементів керування гравцем

Далі ми створимо персонажа гравця та запровадимо керування рухом на основі фізики.

Характер гравця

  1. В ієрархії клацніть правою кнопкою миші та виберіть 3D Object > Capsule, щоб створити персонаж гравця.
  2. Перейменуйте капсулу на Гравець і розмістіть її над місцевістю.
  3. Додайте компонент Rigidbody до об’єкта Player для руху на основі фізики.
  4. Додайте Camera як дочірній об’єкт Player, щоб служити точкою зору гравця.

Сценарій руху гравця

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. Створіть новий сценарій C# під назвою PlayerMovement.cs у папці Scripts.
  2. Приєднайте сценарій PlayerMovement до об’єкта Player.

Впровадження ШІ тварин

Ми створимо простий тваринний штучний інтелект, який буде блукати оточенням і реагувати на гравця.

Тварини Prefab

  1. Імпортуйте або створіть 3D-модель тварини (наприклад, оленя).
  2. Перетягніть модель на сцену та розмістіть її на місцевості.
  3. Клацніть правою кнопкою миші модель в ієрархії та виберіть Create Empty, щоб створити батьківський об’єкт. Назвіть його Олень.
  4. Перетягніть 3D-модель в об’єкт Deer і скиньте її трансформацію.
  5. Збережіть об’єкт Deer як префаб, перетягнувши його в папку Prefabs.

Сценарій ШІ тварин

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. Створіть новий сценарій C# під назвою AnimalAI.cs у папці Scripts.
  2. Приєднайте сценарій AnimalAI до префабу Deer.
  3. Додайте компонент NavMeshAgent до префабу Deer.
  4. Налаштуйте маршрутні точки на сцені, створивши порожні GameObjects і розташувавши їх за бажанням. Призначте ці шляхові точки до масиву waypoints у сценарії AnimalAI.

Додавання механіки стрільби

Реалізуємо гравцеві можливість стріляти по тваринам.

Сценарій зйомки

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. Створіть новий сценарій C# під назвою PlayerShooting.cs у папці Scripts.
  2. Приєднайте сценарій PlayerShooting до об’єкта Player.
  3. Створіть ефект удару (наприклад, систему частинок) і призначте його до поля impactEffect у скрипті.

Налаштування системи підрахунку балів

Ми додамо просту систему підрахунку балів, щоб відстежувати успішні полювання гравця.

Скрипт Score Manager

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. Створіть новий сценарій C# під назвою ScoreManager.cs у папці Scripts.
  2. Приєднайте сценарій ScoreManager до нового пустого GameObject під назвою GameManager.
  3. Створіть текстовий елемент інтерфейсу користувача для відображення рахунку та призначте його до поля scoreText у сценарії ScoreManager.

Оновлення сценарію зйомки для відстеження результатів

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

Висновок

Ми створили базову мисливську гру Unity. Ми налаштували проект і середовище, створили елементи керування гравцем із рухом на основі фізики, реалізували ШІ тварин, додали механіку стрільби та налаштували систему підрахунку очок. Ці базові знання можна розширити, включивши складнішу поведінку, додаткових тварин і вдосконалену ігрову механіку, щоб покращити вашу мисливську гру.