Создание игры об охоте в Unity
В этом уроке мы рассмотрим процесс создания базовой игры-охоты в Unity. Эта игра будет включать такие элементы, как движение игрока, искусственный интеллект животных, механика стрельбы и система подсчета очков. Мы рассмотрим:
- Настройка проекта и среды
- Создание элементов управления проигрывателем
- Внедрение искусственного интеллекта животных
- Добавление механики стрельбы
- Создание системы подсчета очков
Настройка проекта
Начнем с создания нового проекта Unity и среды.
Создание проекта
- Откройте Unity и создайте новый 3D-проект.
- Назовите свой проект
HuntingGameи нажмитеСоздать. - В окне проекта создайте папки с именами
Scripts,PrefabsиMaterialsдля организации ваших ресурсов.
Настройка окружающей среды
- В иерархии щелкните правой кнопкой мыши и выберите
3D-объект > Рельеф, чтобы создать рельеф. - Настройте ландшафт, используя
Инструменты ландшафта, чтобы рисовать текстуры, добавлять деревья и размещать траву или другие детали. - Добавьте несколько 3D-объектов, таких как камни и деревья, чтобы сделать окружающую среду более реалистичной.
Создание элементов управления проигрывателем
Далее мы создадим персонажа игрока и реализуем управление движением на основе физики.
Персонаж игрока
- В иерархии щелкните правой кнопкой мыши и выберите
3D Object > Capsule, чтобы создать персонажа игрока. - Переименуйте капсулу в
Playerи расположите ее над ландшафтом. - Добавьте компонент
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.
Внедрение искусственного интеллекта животных
Мы создадим простой искусственный интеллект животных, который будет перемещаться по окружающей среде и реагировать на игрока.
Префаб животных
- Импортируйте или создайте 3D-модель животного (например, оленя).
- Перетащите модель на сцену и разместите ее на местности.
- Щелкните правой кнопкой мыши модель в Иерархии и выберите
Создать пустой, чтобы создать родительский объект. Назовите егоОлень. - Перетащите 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в скрипте.
Настройка системы подсчета очков
Мы добавим простую систему подсчета очков для отслеживания успешных охот игрока.
Скрипт менеджера очков
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к новому пустому игровому объекту с именем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. Мы настроили проект и среду, создали элементы управления игроком с физическим движением, внедрили искусственный интеллект животных, добавили механику стрельбы и настроили систему подсчета очков. Эти фундаментальные знания можно расширить, включив более сложное поведение, дополнительных животных и усовершенствованную игровую механику, чтобы улучшить вашу игру-охоту.