Створення мисливської гри в Unity
У цьому підручнику ми розповімо про процес створення базової мисливської гри в Unity. Ця гра включатиме такі елементи, як рух гравця, штучний інтелект тварин, механіка стрільби та система підрахунку очок. Ми розглянемо:
- Налаштування проекту та середовища
- Створення елементів керування гравцем
- Впровадження ШІ тварин
- Додавання механіки стрільби
- Налаштування системи підрахунку балів
Налаштування проекту
Давайте почнемо з налаштування нового проекту Unity і створення середовища.
Створення проекту
- Відкрийте Unity і створіть новий 3D-проект.
- Назвіть свій проект
HuntingGame
і натиснітьСтворити
. - У вікні проекту створіть папки з іменами
Scripts
,Prefabs
іMaterials
, щоб упорядкувати свої ресурси.
Налаштування середовища
- В ієрархії клацніть правою кнопкою миші та виберіть
3D Object > Terrain
, щоб створити рельєф. - Налаштуйте рельєф за допомогою
Інструментів рельєфу
, щоб намалювати текстури, додати дерева, розмістити траву чи інші деталі. - Додайте кілька 3D-об’єктів, як-от каміння та дерева, щоб зробити середовище більш реалістичним.
Створення елементів керування гравцем
Далі ми створимо персонажа гравця та запровадимо керування рухом на основі фізики.
Характер гравця
- В ієрархії клацніть правою кнопкою миші та виберіть
3D Object > Capsule
, щоб створити персонаж гравця. - Перейменуйте капсулу на
Гравець
і розмістіть її над місцевістю. - Додайте компонент
Rigidbody
до об’єктаPlayer
для руху на основі фізики. - Додайте
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);
}
}
- Створіть новий сценарій C# під назвою
PlayerMovement.cs
у папціScripts
. - Приєднайте сценарій
PlayerMovement
до об’єктаPlayer
.
Впровадження ШІ тварин
Ми створимо простий тваринний штучний інтелект, який буде блукати оточенням і реагувати на гравця.
Тварини Prefab
- Імпортуйте або створіть 3D-модель тварини (наприклад, оленя).
- Перетягніть модель на сцену та розмістіть її на місцевості.
- Клацніть правою кнопкою миші модель в ієрархії та виберіть
Create Empty
, щоб створити батьківський об’єкт. Назвіть йогоОлень
. - Перетягніть 3D-модель в об’єкт
Deer
і скиньте її трансформацію. - Збережіть об’єкт
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);
}
}
}
- Створіть новий сценарій C# під назвою
AnimalAI.cs
у папціScripts
. - Приєднайте сценарій
AnimalAI
до префабуDeer
. - Додайте компонент
NavMeshAgent
до префабуDeer
. - Налаштуйте маршрутні точки на сцені, створивши порожні 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);
}
}
}
- Створіть новий сценарій C# під назвою
PlayerShooting.cs
у папціScripts
. - Приєднайте сценарій
PlayerShooting
до об’єктаPlayer
. - Створіть ефект удару (наприклад, систему частинок) і призначте його до поля
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;
}
}
- Створіть новий сценарій C# під назвою
ScoreManager.cs
у папціScripts
. - Приєднайте сценарій
ScoreManager
до нового пустого GameObject під назвоюGameManager
. - Створіть текстовий елемент інтерфейсу користувача для відображення рахунку та призначте його до поля
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. Ми налаштували проект і середовище, створили елементи керування гравцем із рухом на основі фізики, реалізували ШІ тварин, додали механіку стрільби та налаштували систему підрахунку очок. Ці базові знання можна розширити, включивши складнішу поведінку, додаткових тварин і вдосконалену ігрову механіку, щоб покращити вашу мисливську гру.