Unity Шутер: Стрельба, Анимации и Освещение

Настройка освещения и пространства цветов

Переключение на Linear Space в настройках проекта (File > Build Settings > Player Settings > Color Space) улучшило визуальное восприятие сцены, сделав её более реалистичной. Была решена проблема с тенями, возникавшая из-за наличия двух камер.

Управление оружием (FPS контроллер)

Основной скрипт, отвечающий за стрельбу, — FPS контроллер. Он использует вектор для перемещения пули. Логика создания и перемещения пули описана в отдельном видеоуроке «Как сделать реалистичную стрельбу». В сцене присутствуют «следы» от пули.

Эффекты попадания

При попадании пули в объект создаётся плоскость с текстурой и частицы, имитирующие разлёт материала. Ориентация плоскости рассчитывается по нормали поверхности в точке попадания.

Скрипт AK-12: автоматическая стрельба

Скрипт AK-12 использует переменные состояний, хранящиеся в виде хэшей. Он использует аниматор (Animator) и его слои (Base Layer). Код требует рефакторинга, но его структура понятна.

Важные переменные:

  • Состояния оружия: Хранятся с помощью хэшей.
  • firePoint: Точка выстрела (корень объекта оружия).
  • Аудиоклипы: Для выстрелов и перезарядки.
  • ammo: Патроны в магазине.
  • magCount: Количество магазинов.
  • magSize: Размер магазина.
  • Shoot Effect: Эффект выстрела (частицы).
  • Impacts: Эффект попадания (не используется).
  • Компонент Animator: Получается с помощью GetComponent.

Логика стрельбы

Скрипт отслеживает нажатие левой кнопки мыши и состояние оружия. При наличии патронов происходит выстрел; при их отсутствии — перезарядка. Состояние оружия обновляется с помощью GetAnimatorStateInfo.

Методы стрельбы и перезарядки вызываются через события.

  • Shoot(): Отнимает патрон, воспроизводит звук и эффект выстрела, создаёт пулю в точке firePoint с разбросом по осям Y и X. Разброс задаётся случайным углом от -π/2 до π/2.
  • Reload(): Воспроизводит звук перезарядки, обновляет количество патронов и магазинов.

Стрельба запускается после события Shot в анимации, обеспечивая синхронизацию.

Прицел и вывод информации

Скрипт отображает прицел и количество патронов на экране.

Задача для зрителей

Добавьте автоматическую стрельбу. Решение разместите в комментариях.

Дальнейшее развитие

Планируется добавление новых фич: AI, инвентарь, покупка оружия.

Что будем искать? Например,программа