Продолжаем разработку нашей 3D-игры по архитектуре MVC (Model-View-Controller)! В этом, пятом уроке, мы вводим в игру первый элемент опасности — Противников (Enemies). Мы сфокусируемся на том, как правильно интегрировать ИИ противника в нашу существующую архитектуру, обеспечивая чистоту кода и лёгкость масштабирования. Что вы освоите в этом уроке: Создание ИИ Патрулирования: Разработка врага, который хаотично движется и автоматически обходит препятствия, используя Raycasting.
Синхронизация вращения: Обеспечение того, что противник всегда смотрит в направлении своего движения.
Механика Урона: Реализация публичного метода Die(), который позволяет внешним объектам (например, взрывам) уничтожить противника.
Архитектурная чистота: Чёткое разделение ответственности между Моделью, Представлением (View) и Контроллером (Controller) для ИИ.
Приготовьтесь сделать ваш мир живым и опасным! 🔧 Что вам понадобится
Unity (рекомендуется LTS версия).
Настроенная сцена из предыдущих уроков (игрок, окружение).
Скрипты EnemyModel.cs, EnemyView.cs, EnemyController.cs.
LayerMask для препятствий.
Rigidbody на вражеском объекте (для лучшей физики).
📝 Краткий конспект урока
1. Архитектурное разделение для AI
EnemyModel: Содержит логические данные: CurrentDirection, DirectionTimer, IsDead.
EnemyView: Отвечает за визуализацию и взаимодействие с физикой: Move(), RotateToFace(), CheckObstacles() (Raycasting).
EnemyController: Управляет таймерами, принимает решение о смене направления (логика патрулирования) и вызывает методы в View.
2. Логика Патрулирования
Случайное направление: Выбирается случайный вектор в плоскости XZ.
Таймер: Враг движется в одном направлении до истечения maxTimeInDirection.
Обход препятствий: Используется Physics.Raycast для проверки наличия стены на пути. При обнаружении препятствия (CheckObstacles возвращает true), Контроллер немедленно выбирает новое направление.
3. Обеспечение “Лицом к направлению”
Вращение синхронизируется с вектором движения с помощью Quaternion.Slerp в RotateToFace(), обеспечивая плавный поворот в новом направлении.
4. Введение Смерти
Добавлен метод ApplyDamage() в Контроллере.
Враг реагирует на тег «Explosion» во время OnTriggerEnter.
При получении урона (ApplyDamage() вызывается), Контроллер устанавливает флаг IsDead = true и командует View выполнить ExecuteDeath() (спаун эффекта и уничтожение объекта). Другие каналы: KNL Games Boosty
https://boosty.to/knlgames KNL Games Rutube
rutube.ru/channel/30608816 KNL Games VK
vk.com/video/@club227263013 KNL Games ЯндексДзен
dzen.ru/id/66e2e8f9cb03ea2636273428 KNL Games Telegram
t.me/ Ts7KHl4AWuw4NTc6 KNL Games TikTok
tiktok.com/@knlgames?is_from_webapp=1&sender_device=pc KNL Games YouTube
www.youtube.com/@KNL_Games






































