Создание 3D шутера в Unity пошаговое руководство

Как сделать шутер на юнити 3д

Содержание статьи

Как сделать шутер на юнити 3д

Unity предоставляет инструменты для разработки полноценного 3D шутера с реалистичной физикой, управлением персонажем и интерактивными объектами. Для работы потребуется версия Unity 2023.2 или выше и установленный пакет 3D Game Kit для ускоренного прототипирования.

Проект начинается с настройки сцены: создание плоской игровой поверхности, добавление Directional Light для освещения и камеры с компонентом Character Controller. Использование стандартного пакета материалов и текстур Unity позволяет сразу увидеть результат без ручной оптимизации.

Управление персонажем строится через Input System, позволяя настроить перемещение, прыжки и стрельбу. Рекомендуется сразу прописывать ограничения на скорость движения и высоту прыжка для соблюдения баланса геймплея.

Создание оружия и стрельбы реализуется через префабы пули с компонентами Rigidbody и Collider. Настройка урона производится через скрипты C#, где каждая пуля взаимодействует с врагами, снижая их здоровье.

Вражеские персонажи оснащаются NavMesh Agent для навигации по сцене и простыми алгоритмами поиска игрока. Для тестирования сцены рекомендуется использовать несколько префабов врагов с разной скоростью и количеством здоровья, чтобы отработать все игровые ситуации.

Финальный этап включает проверку столкновений, баланс оружия и оптимизацию FPS. Экспорт проекта возможен на Windows, macOS и Android без дополнительных изменений кода.

Установка Unity и подготовка проекта

Установка Unity и подготовка проекта

Скачайте Unity Hub версии 3.0 или выше с официального сайта Unity. Через Hub установите Unity Editor 2023.2 LTS, выбрав модули для Windows Build Support и Android Build Support, если планируется экспорт на мобильные устройства.

Создайте новый проект, выбрав шаблон 3D. Название проекта должно отражать игровую механику, например MyShooter3D. Установите директорию с коротким путём для предотвращения проблем с импортом ассетов.

Включите Package Manager и добавьте необходимые пакеты: Cinemachine для камеры, Input System для управления персонажем, Post Processing для визуальных эффектов. Это позволит сразу интегрировать управление и улучшить графику.

Настройте проект под целевую платформу: в меню File → Build Settings выберите Windows, Mac или Android, активируйте Development Build для отладки. Проверьте, что сцена сохранена как MainScene и установлена в списке Scenes In Build.

Создайте базовую игровую сцену с плоской поверхностью и направленным светом. Добавьте камеру с компонентом Character Controller и задайте её стартовые координаты (x=0, y=1.8, z=-5). Это обеспечит корректное отображение сцены с первого запуска.

Создание игровой сцены и настройка камеры

Начните с добавления плоскости (Plane) размером 50×50 единиц в центр сцены для игровой поверхности. Установите Material с диффузной текстурой пола и включите Mesh Collider для корректной физической обработки столкновений.

Разместите Directional Light с углом наклона X=50, Y=-30, Z=0 для имитации солнечного освещения. Включите Shadows → Hard Shadows для объектов, которые будут создавать тени, и уменьшите интенсивность до 0.8 для естественного освещения.

Добавьте камеру с компонентом Camera и настройте её позицию на X=0, Y=1.8, Z=-5. Установите Field of View в 60 градусов и активируйте Clipping Planes от 0.3 до 1000 единиц, чтобы объекты на расстоянии отображались корректно.

Для плавного следования за игроком подключите Cinemachine Virtual Camera. Привяжите её к объекту игрока, задайте Follow и Look At на Player, выставьте Damping по X, Y и Z равным 0.3 для минимизации резких рывков при движении.

Добавьте элементы окружения: стены и препятствия с Box Collider, высотой 3–5 единиц и толщиной 0.5–1 единица. Это обеспечит основу для навигации врагов и построения логики столкновений в игровом процессе.

Импорт и настройка 3D-моделей персонажей

Импорт и настройка 3D-моделей персонажей

Импортируйте модели в форматах FBX или OBJ через меню Assets → Import New Asset. Для персонажей используйте модели с костной структурой (Rig), настроенной на Humanoid в разделе Rig → Animation Type.

После импорта создайте префаб персонажа. Разместите его в сцене на плоскости с координатами X=0, Y=0, Z=0. Убедитесь, что масштаб модели соответствует игровому миру, оптимально 1 единица Unity равна 1 метру персонажа.

Настройте Animator для управления анимациями ходьбы, бега и стрельбы. Подключите контроллер анимации через Animator Controller и задайте переходы между состояниями с условием Speed > 0 для движения и Shoot = true для выстрела.

Добавьте Capsule Collider на весь корпус персонажа с высотой 1.8 единицы и радиусом 0.3, чтобы корректно обрабатывались столкновения. Привяжите компонент Rigidbody с Use Gravity включённым и Constraints → Freeze Rotation X/Y/Z, чтобы персонаж не переворачивался при столкновениях.

Проверяйте импортированные анимации через Preview в Inspector. Для каждой анимации рекомендуется выставить Loop Time при циклических действиях (ходьба, бег) и отключить для одноразовых (выстрел, смерть).

Добавление управления персонажем и движения

Добавление управления персонажем и движения

Установите пакет Input System через Package Manager и активируйте его в настройках проекта. Создайте Input Action Asset с действиями:

  • Move – оси X и Y для горизонтального и вертикального перемещения;
  • Jump – кнопка пробела для прыжка;
  • Sprint – кнопка Shift для ускоренного движения.

Добавьте компонент Character Controller к игроку. Настройте параметры:

  • Height = 1.8, Radius = 0.3, Center Y = 0.9;
  • Step Offset = 0.4 для преодоления небольших препятствий;
  • Min Move Distance = 0.001 для плавного движения.

Создайте C# скрипт PlayerMovement с логикой:

  1. Считывание ввода через Input Action Asset;
  2. Преобразование направления движения относительно камеры;
  3. Применение скорости: Walk = 3 м/с, Sprint = 6 м/с;
  4. Обработка гравитации через Physics.gravity и прыжка с силой JumpForce = 5;
  5. Передвижение через CharacterController.Move() с учетом времени кадра.

Для плавного поворота персонажа используйте Quaternion.Lerp с коэффициентом 10. Проверяйте коллизии с объектами сцены и ограничьте высоту прыжка, чтобы предотвратить прохождение через потолочные поверхности.

Создание оружия и стрельбы

Создание оружия и стрельбы

Создайте префаб оружия, добавив модель пистолета или винтовки в сцену. Разместите его в руках персонажа через пустой объект GunHolder с координатами X=0.3, Y=1.5, Z=0.5 относительно игрока.

Добавьте точку спауна пуль – пустой объект FirePoint на конце ствола оружия. В скрипте стрельбы создайте логику Instantiate пули и применение силы через Rigidbody:

Параметр Рекомендованное значение Описание
BulletSpeed 25 Скорость полёта пули в единицах Unity
FireRate 0.2 Время между выстрелами в секундах
Damage 20 Количество урона, наносимого врагу
LifeTime 3 Время существования пули перед уничтожением

Настройте Rigidbody пули с Use Gravity отключённым и Collision Detection → Continuous. Добавьте Sphere Collider для обработки столкновений. При попадании пули вызывайте метод TakeDamage на враге, передавая параметр Damage.

Для визуальной отдачи оружия используйте небольшой сдвиг позиции оружия при выстреле (Recoil = 0.05 по Z) и таймер возврата. Установите анимацию стрельбы через Animator Controller, синхронизируя её с вызовом Instantiate пули.

Настройка врагов и их поведения

Настройка врагов и их поведения

Импортируйте модели врагов в формате FBX с анимациями ходьбы, атаки и смерти. Создайте префаб и добавьте компоненты:

  • NavMesh Agent с параметрами: Speed = 3, Angular Speed = 120, Stopping Distance = 1.5;
  • Animator для управления анимациями состояния;
  • Capsule Collider с высотой 1.8 и радиусом 0.3;
  • Rigidbody с Use Gravity включённым и Freeze Rotation X/Y/Z.

Создайте скрипт EnemyAI с логикой поведения:

  1. Поиск игрока через Vector3.Distance с радиусом обнаружения 15 единиц;
  2. Патрулирование между точками на сцене при отсутствии игрока;
  3. Следование за игроком при приближении и остановка на Stopping Distance;
  4. Вызов атаки через метод DealDamage с интервалом 1.5 секунды;
  5. Переход в состояние смерти при здоровье ≤ 0 с воспроизведением анимации Death и удалением объекта через 3 секунды.

Для улучшения навигации создайте NavMesh по поверхности сцены. Проверяйте, чтобы препятствия имели NavMesh Obstacle с опцией Carving, иначе враги будут проходить сквозь объекты.

Рекомендуется создавать несколько префабов врагов с разной скоростью и здоровьем для разнообразия геймплея и тестирования систем стрельбы и коллизий.

Реализация системы здоровья и урона

Реализация системы здоровья и урона

Создайте скрипт Health для всех персонажей, включая игрока и врагов. Добавьте переменные:

  • MaxHealth = 100;
  • CurrentHealth = MaxHealth;
  • IsAlive = true.

Для получения урона создайте метод TakeDamage(int amount):

  • Вычитание значения amount из CurrentHealth;
  • Проверка, если CurrentHealth ≤ 0, установка IsAlive = false;
  • Вызов анимации смерти через Animator Controller для врагов;
  • Для игрока – обновление UI Health Bar и вызов эффекта урона.

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

Добавьте визуальную обратную связь: вспышку красного цвета на экране при получении урона и кратковременную вибрацию камеры. Для оптимизации храните ссылки на Animator и UI компоненты при старте объекта, чтобы не искать их каждый кадр.

Для восстановления здоровья используйте метод Heal(int amount), который увеличивает CurrentHealth до MaxHealth, но не выше. Это позволит реализовать аптечки и системы регенерации без ошибок переполнения.

Тестирование, отладка и экспорт игры

Тестирование, отладка и экспорт игры

Запустите сцену в режиме Play и проверьте движение персонажа, стрельбу, анимации и коллизии с объектами. Используйте окно Profiler для контроля FPS, потребления памяти и загрузки процессора. Оптимизируйте тяжёлые ассеты и скрипты, если FPS падает ниже 60.

Для отладки используйте Debug.Log в ключевых методах: TakeDamage, DealDamage, Move. Проверяйте корректность передачи значений и вызова анимаций. При работе с врагами убедитесь, что NavMesh Agents правильно реагируют на препятствия и не застревают.

Тестируйте различные сценарии: множественные враги, быстрые перемещения игрока, одновременные выстрелы. Настройте Development Build и Autoconnect Profiler через Build Settings для выявления ошибок на ранней стадии.

Перед экспортом проверьте настройки платформы в File → Build Settings и установите корректный Target Platform. Для Windows и Mac включите Compression Method → LZ4HC для уменьшения размера сборки. Для Android добавьте IL2CPP и включите ARM64 для совместимости с современными устройствами.

После сборки выполните финальный прогон на целевой платформе. Проверяйте корректность всех систем: движение, стрельба, поведение врагов, систему здоровья, UI. В случае ошибок возвращайтесь к сцене и скриптам, исправляя конкретные элементы, чтобы исключить критические баги перед релизом.

Вопрос-ответ:

Как правильно настроить NavMesh для врагов в Unity?

NavMesh создаётся через меню Window → AI → Navigation. Сначала выделите все объекты сцены, по которым враги должны ходить, и отметьте их как Navigation Static. Вкладка Bake позволяет сформировать навигационную сетку. Для динамических препятствий добавьте NavMesh Obstacle с включённой опцией Carve, чтобы агенты корректно обходили объекты, которые появляются во время игры. После этого враги с NavMesh Agent смогут перемещаться по сцене, избегая коллизий.

Какие параметры Character Controller влияют на точность столкновений?

Основные параметры: Height и Radius, которые задают размеры капсулы персонажа; Step Offset, позволяющий преодолевать небольшие препятствия; и Min Move Distance, определяющий минимальное смещение для движения. Для предотвращения прохождения сквозь объекты важно корректно настроить высоту и радиус, а также не использовать слишком большую скорость перемещения без увеличения частоты обновления физики.

Как реализовать стрельбу с задержкой между выстрелами?

Создайте переменную FireRate, которая хранит интервал между выстрелами, и таймер timeSinceLastShot. В Update проверяйте, если кнопка стрельбы нажата и Time.time — timeSinceLastShot ≥ FireRate, создайте префаб пули через Instantiate и примените силу через Rigidbody. После выстрела обновите таймер. Такой подход предотвращает слишком быструю стрельбу и позволяет задавать разные скорости огня для оружия.

Каким образом реализовать восстановление здоровья у игрока?

Создайте метод Heal(int amount) в скрипте здоровья, который увеличивает текущее здоровье на заданное значение, но не превышает максимальное. Для аптечек разместите триггерный коллайдер на объекте, вызывающий Heal при входе игрока внутрь. Дополнительно можно обновлять индикатор здоровья в UI после каждого восстановления. Это обеспечивает плавную интеграцию с системой урона и предотвращает переполнение значений.

Ссылка на основную публикацию