dragonUnreal

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


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

Большой сдвиг (ментальная модель)

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

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

  • Компоненты присоединены к акторам

  • графы Blueprint / C++ управляют игровым процессом

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

В All Out вы обычно будете думать в терминах:

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

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

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

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

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

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

UWorld / Level

Сцена

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

AActor

Сущность

Сущности имеют трансформации и компоненты.

UActorComponent

Component

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

BeginPlay

ao_start

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

Tick(float DeltaTime)

ao_update(dt) / ao_late_update(dt)

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

Графы Blueprint

Код CSL

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

Pawn/Character

Player_Base подклассы

Ваша логика игрока обычно живёт в Player компоненте/классе.

Сопоставления ввода

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

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

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

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

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

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

Обычно не нужны

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

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

Scene.create_entity() / instantiate(Prefab_Asset)

Префабы являются ассетами и могут быть инстанцированы.

UAsset ссылки

get_asset(...)

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

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

CSL использует единую «корневую» схему импорта: импортируйте в main.csl, и не разбрасывайте импорты по каждому файлу.

Сущности и компоненты (в отличие от Actors & Components)

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

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

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

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

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

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

  • Последовательным удобным для мобильных интерфейсом кнопок

  • Временами восстановления

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

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

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

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

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

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

  • Как правило, вы не пишете RPC для стандартных игровых сценариев.

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

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

Используйте эти шаблоны:

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

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

Ассеты, префабы и пути

Папка /res Assets находятся в

. При обращении к ассетам, /resопустите из пути. /res button := get_asset(Texture_Asset, "ui/button.png");

Префабы

.prefab ) и могут быть инстанцированы:prefab := get_asset(Prefab_Asset, "Enemies/Slime.prefab");

Если вы привыкли к колбэкам пересечений/попаданий Unreal (

OnComponentBeginOverlapOnHit, ), учтите, что игровой процесс в CSL часто используетзапросы вместо обработчиков событий. Распространённый шаблон: запрашивать близлежащие компоненты и проверять расстояние:

Scene.get_all_components_in_range(player_pos, 2.0, ref nearby);

См.: Отличия UI (UMG vs CSL UI).

Игры All Out ориентированы на

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

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

Если вы ищете эквиваленты общих игровых систем Unreal:

Интерактивные объекты

Не строите кастомный слой RPC/репликации

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

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

  • : импортируйте папки один раз из, а не в каждом файле. main.cslПредпочитайте Способности для действий

  • : это последовательно решает мобильный UX + время восстановления + прицеливание.Косметика vs игровой процесс

  • : держите чисто косметические эффекты локальными; держите состояние игрового процесса под контролем сервера.Следующие шаги

Читать

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