Баннер записи 'Система катсцен | Девблог 2 часть | Eclipse Of Energy'

Система катсцен | Девблог 2 часть | Eclipse Of Energy

Что за система такая?

Катсцена (или cinematic) — это управляемая игрой последовательность событий, во время которой игрок временно теряет контроль над персонажем: камера и герой «играют» сценарий, показывается диалог, появляются и уходят NPC.

В нашей игре катсцены решают сразу несколько задач:

  • Сюжетная подача - Создание интро, катсцен, диалоги с НПС
  • Динамичные сцены — спавн персонажей «на глазах» у игрока, их перемещение по сцене, появление и исчезновение.
  • Игровой прогресс — прямо из катсцены можно выдать предмет, добавить квест, завершить его или вручить оружие.

Как все устроено?

Система построена на трёх слоях:

Действия - CutsceneAction

  Базовый «кирпичик» — это ресурс CutsceneAction с полем type (enum). Каждое действие описывает одно атомарное событие сцены:  

Код
enum ActionType {
	WAIT,
	MOVE_ACTOR,
	CALL_METHOD,
	SHOW_TEXT_OVER_ACTOR,
	MOVE_ACTOR_BY_POINTS,
	SPAWN_ACTOR,
	REMOVE_ACTOR,
	ADD_ITEM,
	ADD_QUEST,
	COMPLETE_QUEST,
	GIVE_WEAPON
}
#ДействиеНазначениеКлючевые поля
0WAITПауза в N секундduration
1MOVE_ACTORДвижение актёра вдоль Path2Dactor_pathpath_nodemove_speed
2CALL_METHODВызов любого метода на узлеtarget_pathmethod_nameargswait_for_signal
3SHOW_TEXT_OVER_ACTORПоказать реплику над актёромtext_actor_pathtext_to_showwait_for_completion
4MOVE_ACTOR_BY_POINTSДвижение по списку точекactor_pathpointspoints_speed
5SPAWN_ACTORСоздать NPC/объектspawn_idscene_pathspawn_positionparent_pathskin
6REMOVE_ACTORУдалить актёраremove_target
7ADD_ITEMВыдать предмет в инвентарьitem_resource_pathitem_amount
8ADD_QUESTДобавить квестquest_resource_path
9COMPLETE_QUESTЗавершить квест с наградойcomplete_quest_id
10GIVE_WEAPONВыдать оружие в слотweapon_resource_pathweapon_slot

Действия можно хранить двумя способами:

  • Инлайн — прямо в файле катсцены как sub_resource;
  • Отдельным .tres — как переиспользуемый блок (в проекте есть Wait(4).tresMove_Player1.tresSet_Skin(No_Suit).tres). Это удобно, когда один и тот же кусок нужен в нескольких сценах.

Данные сцены — CutsceneData

Ресурс, который собирает сцену в одно целое:

Это упорядоченный список действий плюс флаги показа кинематографических полос.

Исполнитель — CutsceneManager (автозагрузка)

CutsceneManager — глобальный синглтон (autoload). Он:

  1. Блокирует игрока — отключает can_move и переводит в режим управления катсценой (set_is_controlled(true)).
  2. Показывает кинематографические полосы (если включено).
  3. Последовательно исполняет каждое действие — await-ит их завершение, поэтому сцена строго линейна.
  4. В конце прячет полосы, разблокирует игрока и эмитит сигнал cutscene_finished.
  5. Движение реализовано отдельным классом ActorFollower (PathFollow2D): он ведёт актёра по кривой Path2D (или по массиву точек), синхронизируя анимацию, скорость шагов и направление персонажа.

    Зависимости менеджер получает «на лету» перед запуском: игрока — из Global.player(глобальный скрипт), диалоговый менеджер и полосы — через Global.npc(тот же глобальный скрипт). Это значит, что катсцена умеет «понимать» текущую сцену, не будучи привязанной к одной конкретной.

    Как этим пользоваться?

    Для того чтобы создать свою катсцену, необходимо сделать несколько шагов:

    • Шаг 1. Создайте ресурс катсцены. Создайте новый CutsceneData (например Cutscene1.tres) и заполните actions в порядке, в котором события должны идти.
    • Шаг 2. Соберите действия Для каждого события создайте CutsceneAction, выберите type и заполните его поля. Пример из Cutscene1.tres (сцена интро):

    WAIT → пауза 2.5 с
    CALL_METHOD → set_skin("suit") на игроке
    SHOW_TEXT_OVER_ACTOR → «Сегодня мое вступление в элитную группу.»
    SHOW_TEXT_OVER_ACTOR → «Я так долго этого ждал...»
    SPAWN_ACTOR → создать "Soldier" у точки (1729, 1505)
    MOVE_ACTOR_BY_POINTS → солдат подходит к игроку
    SHOW_TEXT_OVER_ACTOR → «Номер 574, вас вызывают на главный мостик.»
    REMOVE_ACTOR → убрать "Soldier"
    ADD_QUEST → добавить квест Quest_CutScene1

    • Шаг 3. Запустите катсцену из любого места
    • CutsceneManager — глобальный, поэтому вызывать можно откуда угодно одной командой:
    Код
    cutscene_manager.play_cutscene(preload("res://project/data/Resources/Cut-Scenes/Cutscene1.tres"))

    Итог

    Главный плюс системы — разделение «что показать» и «как показать». Нарратив собирается в редакторе из готовых действий, а исполнение берёт на себя один стабильный менеджер. Хотим новое действие — добавляем один enum в CutsceneAction и один match-кейс в менеджере, и оно сразу доступно всем катсценам проекта. Так сюжетные сцены пишутся быстро, читаются легко и не дублируют код.

      Если возникнут вопросы или вы хотите получить готовые скрипты с системой катсцен, то можете писать мне в ТГ(@printNam) или в комменты моего ТГК

Комментарии (0)

Войдите, чтобы написать комментарий

Войти
Large Spinner
Eclipse Of Energy
Версия 0.0.1
4
0
0
1
Жанр
Движок
Не указано
Платформа
Не указано
Язык
Время игровой сессии
до 10 мин.
Дата публикации игры
07.03.2026
Дата обновления игры
07.03.2026
Игра не опубликована