Создание игры об охоте в Unity

В этом уроке мы рассмотрим процесс создания базовой игры-охоты в Unity. Эта игра будет включать такие элементы, как движение игрока, искусственный интеллект животных, механика стрельбы и система подсчета очков. Мы рассмотрим:

  • Настройка проекта и среды
  • Создание элементов управления проигрывателем
  • Внедрение искусственного интеллекта животных
  • Добавление механики стрельбы
  • Создание системы подсчета очков

Настройка проекта

Начнем с создания нового проекта Unity и среды.

Создание проекта

  1. Откройте Unity и создайте новый 3D-проект.
  2. Назовите свой проект HuntingGame и нажмите Создать.
  3. В окне проекта создайте папки с именами Scripts, Prefabs и Materials для организации ваших ресурсов.

Настройка окружающей среды

  1. В иерархии щелкните правой кнопкой мыши и выберите 3D-объект > Рельеф, чтобы создать рельеф.
  2. Настройте ландшафт, используя Инструменты ландшафта, чтобы рисовать текстуры, добавлять деревья и размещать траву или другие детали.
  3. Добавьте несколько 3D-объектов, таких как камни и деревья, чтобы сделать окружающую среду более реалистичной.

Создание элементов управления проигрывателем

Далее мы создадим персонажа игрока и реализуем управление движением на основе физики.

Персонаж игрока

  1. В иерархии щелкните правой кнопкой мыши и выберите 3D Object > Capsule, чтобы создать персонажа игрока.
  2. Переименуйте капсулу в Player и расположите ее над ландшафтом.
  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.

Внедрение искусственного интеллекта животных

Мы создадим простой искусственный интеллект животных, который будет перемещаться по окружающей среде и реагировать на игрока.

Префаб животных

  1. Импортируйте или создайте 3D-модель животного (например, оленя).
  2. Перетащите модель на сцену и разместите ее на местности.
  3. Щелкните правой кнопкой мыши модель в Иерархии и выберите Создать пустой, чтобы создать родительский объект. Назовите его Олень.
  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 в скрипте.

Настройка системы подсчета очков

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

Скрипт менеджера очков

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 к новому пустому игровому объекту с именем 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. Мы настроили проект и среду, создали элементы управления игроком с физическим движением, внедрили искусственный интеллект животных, добавили механику стрельбы и настроили систему подсчета очков. Эти фундаментальные знания можно расширить, включив более сложное поведение, дополнительных животных и усовершенствованную игровую механику, чтобы улучшить вашу игру-охоту.