Разработка механики переключения камеры и персонажа в Heavenly Albion
🎯 Что хотел получить
В основе проекта Heavenly Albion лежит идея: игрок управляет не только персонажем, но и летающей камерой, которая может исследовать мир независимо. Эта механика необходима для:
Фото режим
Режим создания фотографий и запись видео в файл
Осмотра локаций с разных ракурсов
Кинематографичных моментов
Будущих систем наблюдения и разведки
Использование нескольких камер для ведения наблюдения и записи
🧱 На чём основано решение
За основу взят ассет Game Animation Sample (GAS) от Epic Games — 500+ примеров игровой анимации с готовой системой движения, прыжков, приседаний и сетевой репликации.
Архитектура:
SandboxCharacter_CMC (базовый персонаж GAS) → BP_GAS_57 (наш персонаж)
PC_Sandbox (базовый контроллер GAS) → PC_GAS_57 → GAS_PlayerController (C++)
GM_Sandbox (базовый Game Mode) → GM_GAS_57 → GAS_GameMode (C++)
Ключевое решение: новый C++ класс FlyingCamera (летающая камера) со своей системой управления: WASD, мышь, крен Q/E, сброс крена R, регулировка скорости колёсиком мыши, рывок вверх пробелом.
🐛 С какими проблемами столкнулись
1️⃣ Ошибка наследования: C++ не может наследоваться от Blueprint
Проблема: Попытка написать class AGAS_PlayerController : public APC_Sandbox (где PC_Sandbox — Blueprint).
Решение: Наследоваться от базовых C++ классов: APlayerController, AGameModeBase, ACharacter.
2️⃣ Файлы не перемещались через Visual Studio
Проблема: Перетаскивание файлов в Solution Explorer не меняло их физическое расположение на диске.
Решение: Перемещение через Total Commander/проводник с последующей перегенерацией проекта (Generate Visual Studio project files).
3️⃣ Камера спавнилась, но управление не переключалось
Проблема: После нажатия Tab камера появлялась, но персонаж продолжал двигаться — контроллер оставался привязан к нему.
Решение: Добавлен вызов Possess(CurrentFlyingCamera) и UnPossess() для персонажа.
4️⃣ Камера "улетала" и зависала при удалении
Проблема: Таймер удаления камеры срабатывал хаотично, иногда удалял самого персонажа.
Решение: Внедрена система ID камеры (уникальный идентификатор) и чёткая логика таймера:
Таймер запускается только при переключении с камеры на персонажа
Таймер сбрасывается при переключении обратно на камеру
Камера удаляется только если она неактивна более 20 секунд
5️⃣ Конфликты с родительским управлением GAS
Проблема: Колёсико мыши управляло Zoom'ом камеры от третьего лица, что мешало управлению скоростью летающей камеры.
Решение: Отключение ненужных Input Actions в BP_GAS_57.
⏱️ Сколько времени заняло
Этап Время
Анализ структуры GAS и написание документации 2 дня
Создание C++ классов и настройка структуры папок 1 день
Перенос логики FlyingCamera 1 день
Настройка переключения между персонажем и камерой 2 дня
Отладка таймеров и ID камеры 1 день
Компиляция и исправление ошибок 1 день
Итого: ~9 дней активной разработки
✅ Что получилось в итоге
🎮 Управление персонажем
WASD — движение
Пробел — прыжок
C — приседание
J - телепортация по прямой
L.Ctrl - идти пешком
L.Shift - быстрый бег
Мышь — поворот
📷 Управление камерой
Действие Клавиша
Движение вперёд/назад W / S
Движение влево/вправо A / D
Подъём / спуск Shift / Ctrl
Поворот мышью Mouse X / Y
Крен Q / E
Сброс крена R
Рывок вверх Пробел
Скорость Колёсико мыши
Переключение на/с камеры Tab
Принудительное удаление камеры 0
🔧 Технические характеристики
✅ Уникальный ID камеры (готовность к сети)
✅ Таймер автоматического удаления (20 секунд бездействия при переключении на персонажа)
✅ Принудительное удаление по кнопке
✅ Полное переключение управления (Possess/UnPossess)
✅ Сохранение позиции и вращения персонажа
✅ Полная совместимость с GAS (движение, прыжки, анимации)
📊 Текущий статус
Механика Статус
Движение персонажа ✅
Движение камеры ✅
Переключение Tab ✅
Крен Q/E ✅
Сброс крена R ✅
Скорость колёсиком ✅
Авто-удаление камеры ✅
Принудительное удаление (0) ✅
Уникальный ID камеры ✅
Подготовка к сетевой игре ⏳
🚀 Что дальше
Подключение к MySQL и сайту
Система авторизации
Создание комнат (до 64 игроков)
Множественные камеры (до 5 штук)
UI интерфейс со списком камер
ссылка на мини видео обзор механики
https://youtu.be/6vslakZZJ4I
ссылка на видео на ВК
https://vkvideo.ru/video-177404869_456239204