dragonUnreal

Если вы создавали игры в Unreal, есть несколько ключевых отличий, которые вам нужно знать, чтобы начать работу в All Out!


Это руководство предназначено для разработчиков Unreal Engine (Blueprints / C++), переходящих на All Out и CSL (Пользовательский язык сценариев All Out).

Большое изменение (модель мышления)

В Unreal вы часто мыслите в терминах:

  • Акторы в мире (созданные, реплицируемые, принадлежащие)

  • Компоненты прикреплённые к акторам

  • графы Blueprints / C++ управляющие геймплеем

  • RPC + репликация вы описываете явно

В All Out вы обычно мыслите в терминах:

  • Сущности в сцене (с компонентами)

  • Компоненты (предоставленные движком + ваши собственные компоненты CSL)

  • Способности для действий игрока (мобильный UI в приоритете + перезарядка + прицеливание)

  • Геймплей с сервером в роли авторитета где синхронизация состояния выполняется автоматически (для большинства элементов геймплея не нужен свой слой RPC)

Быстрое сопоставление: Unreal → All Out / CSL

Unreal
All Out / CSL
Примечания

UWorld / Level

Сцена

Сущности существуют в сцене; их также можно создавать/удалять во время выполнения.

AActor

Сущность

У сущностей есть трансформации и компоненты.

UActorComponent

Компонент

Вы описываете геймплей, создавая компоненты CSL и прикрепляя их к сущностям.

BeginPlay

ao_start

Точка входа жизненного цикла компонента.

Tick(float DeltaTime)

ao_update(dt) / ao_late_update(dt)

Используйте позднее обновление для шаблонов UI/ввода, используемых движком (например, кнопки способностей).

Графы Blueprint

Код CSL

Текстовый, компилируется как часть вашего проекта.

Pawn/Character

Player_Base подклассы

Логика вашего игрока обычно находится в Player компоненте/классе.

Схемы ввода

Способности + привязки клавиш

Мобильный приоритет: предпочитайте кнопки способностей вместо сырого ввода.

Репликация (Реплицируемые переменные)

Автоматическая синхронизация состояния

Избегайте создания собственных схем репликации/RPC, если они действительно не нужны.

RPC (Сервер, Клиент, NetMulticast)

Обычно не требуется

Используйте средства движка (например, уведомления) вместо разрастания собственных RPC.

Создание актора

Scene.create_entity() / instantiate(Prefab_Asset)

Пресеты — это ассеты, и их можно инстанцировать.

UAsset ссылки

get_asset(...)

Ассеты находятся в /res и на них ссылаются по пути.

Ваш первый файл CSL (импорты)

В CSL используется единая схема импорта “root”: импортируйте в main.cslи не разбрасывайте импорты по каждому файлу.

Сущности и компоненты (в сравнении с акторами и компонентами)

Создание сущности во время выполнения

Добавление и доступ к компонентам

Написание собственного компонента (жизненный цикл)

Итерация по сущностям/компонентам

Действия игрока: используйте Способности (вместо сырого ввода)

Проекты Unreal часто начинают с привязок ввода (Enhanced Input), а затем строят поверх них UI/UX. В All Out, Способности — это стандартный способ реализовывать действия игрока с:

  • Единообразным удобным для мобильных устройств кнопочным UI

  • Перезарядками

  • Опциональным прицеливанием (перетаскивание для прицеливания на мобильных устройствах, прицеливание мышью на ПК)

Рисуйте кнопки способностей из Player.ao_late_update внутри is_local_or_server():

См.: Способности для полного API и шаблонов.

Сеть: «репликация» — не ваша забота (в большинстве случаев)

Что отличается от репликации в Unreal

  • Игровое состояние автоматически синхронизируется с сервера → клиентам.

  • Обычно вы не пишете RPC для стандартных игровых сценариев.

  • Но вам всё равно нужно проектировать с учётом нескольких игроков : избегайте глобального состояния; храните состояние каждого игрока в экземпляре игрока.

Клиентская логика vs серверная/общая логика

Используйте такие паттерны:

  • is_local_or_server() для ввода + игрового UI (работает на сервере + локальном клиенте)

  • is_local() для чисто декоративного UI/эффектов (работает только на локальном клиенте)

Ассеты, пресеты и пути

Метод /res папка

Ассеты находятся в /res. При ссылке на ассеты опускайте /res из пути.

Префабы

Пресеты — это ассеты (папки, оканчивающиеся на .prefab) и их можно инстанцировать:

События столкновений и пересечений (частая ловушка Unreal)

Если вы привыкли к callback'ам пересечения/удара в Unreal (OnComponentBeginOverlap, OnHit), имейте в виду, что в геймплее CSL часто используются запросы вместо callback'ов событий.

Распространённый паттерн: запрашивать близлежащие компоненты и проверять расстояние:

См.: Навмеш и коллизия.

Различия UI (UMG vs CSL UI)

Игры All Out — с приоритетом на мобильные устройства, поэтому не стройте UX только для клавиатуры. Используйте UI-утилиты движка и кнопки способностей.

Если вам нужен собственный UI, обратитесь к документации по UI и следуйте стандартным шаблонам (не придумывайте дерево виджетов, как в UMG, если в документации не сказано иное).

Поток матча, инвентарь, интерактивные объекты

Если вы ищете аналоги распространённых игровых систем Unreal:

Подводные камни при переходе с Unreal на CSL

  • Не стройте собственный слой RPC/репликации: начните с серверно-авторитетной логики и дайте движку синхронизировать состояние.

  • Избегайте глобальных синглтонов для игрового состояния: подключается несколько игроков; храните состояние в игроке или в соответствующем экземпляре компонента.

  • Импорты централизованы: импортируйте папки один раз из main.csl, а не в каждом файле.

  • Предпочитайте Способности для действий: это последовательно решает мобильный UX + перезарядки + прицеливание.

  • Косметика vs геймплей: держите только косметические эффекты локальными; держите игровое состояние под серверным авторитетом.

Следующие шаги

Последнее обновление