For the complete documentation index, see llms.txt. This page is also available as Markdown.

Roblox

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

Если вы пришли из Roblox Studio + Lua, эта страница поможет вам перевести вашу ментальную модель на All Out + CSL (язык скриптов All Out).

Главные различия (с первого взгляда)

  • Сущности + компоненты (а не экземпляры + сервисы): миры строятся из сущностей в Иерархия, а поведение возникает при добавлении компонентов (встроенных или скриптовых).

  • Многопользовательский режим «встроен»: CSL спроектирован так, чтобы большую часть игрового кода можно было писать как для одиночной игры, а движок синхронизировал нужное состояние.

  • Работа в редакторе ближе к «редактированию сцены»: вы размещаете сущности, настраиваете их компоненты в Инспектор, и повторно используете группы через Префабы.

  • CSL — статически типизированный: он будет ощущаться ближе к Go/Odin, чем к Lua. (См. Начало работы с CSL.)

  • Преобразования игрового процесса — 2D: позиция и масштаб используют v2, поворот — один угол в градусах, а слои спрайтов управляют порядком отрисовки.


Шпаргалка Roblox → All Out

Понятие Roblox
Понятие All Out / CSL
Примечания

Roblox Studio

Редактор All Out

Вы запускаете его из Creator Portal (см. Запуск редактора).

Плейс / опыт

Проект игры All Out

В вашей локальной папке проекта есть scripts каталог для .csl файлов.

Обозреватель / Рабочее пространство

Иерархия

Иерархия показывает все сущности в текущем мире/сцене.

Экземпляр / Модель / Деталь

Сущность

Организация в стиле «папок» выполняется путем вложения сущностей (см. «Папки» в Иерархия).

Окно свойств

Инспектор

Где вы редактируете поля сущности/компонента и добавляете компоненты.

Атрибуты

Сериализованные поля компонента

Открывайте поля для редактора с помощью @ao_serialize (пример ниже).

CFrame / Vector3

2D-преобразование сущности

Положение и масштаб — это v2; поворот — один угол в градусах.

Clone()

Scene.instantiate

Загрузите Prefab_Asset, затем создайте его экземпляр в сцене.

Повторное использование моделей

Префабы

Связанные экземпляры сохраняют свойства корня, но поля компонентов не являются независимыми переопределениями (см. Префабы).

ProximityPrompt / ClickDetector

Компонент Interactable

Добавьте Interactable-производный компонент и реализуйте can_use/on_interact (см. Интерактивные объекты).

Touched / Region3 / GetPartsInPart

Триггеры / запросы по диапазону

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

Инструменты / способности / мобильные кнопки

Способности

Встроенный UI кнопок, удобный для мобильных устройств и ПК, + шаблоны кулдаунов (см. Способности).

DataStoreService

Системы сохранения + JSON + экономики

ScreenGui / GuiObjects

UI-система All Out


Ваш первый час (рекомендуемый путь)

  1. Пройдите пошаговое руководство по «сбору яблок» в Создание базовой игры.

  2. Пробегите основы CSL в Начало работы с CSL (особенно ao_start, ao_update, и создание компонентов).

  3. Узнайте, как прикреплять ваши новые компоненты к объектам мира через Инспектор.


Ментальная модель скриптинга (Lua → CSL)

В Roblox вы часто пишете Script/LocalScript , который находит объекты (Workspace.Foo.Bar) и подключает события. В All Out обычно вы:

  • Пишете классы компонентов на CSL (поведение).

  • Прикрепляете их к сущностям в редакторе (или создаёте сущности и добавляете компоненты во время выполнения).

  • Храните настраиваемые значения в компоненте с помощью @ao_serialize (чтобы можно было настраивать их отдельно для каждой сущности в инспекторе).

Вот небольшой пример, который ощущается как «Script, прикрепленный к объекту», но выражен как компонент CSL:

Зарегистрируйте Монеты валюту во время настройки сцены перед её начислением. Глобальные процедуры жизненного цикла, такие как ao_start и ao_update выполняются в каждой симуляции сцены; они не только серверные. См. Жизненный цикл игры/кадра.


Взаимодействия, которые вы узнаете (и как они переводятся)

ProximityPrompt → Interactable

Если вы использовали ProximityPrompt.Triggered в Roblox, ближайший аналог — это Interactable-производный компонент. Начните здесь:

Подбор предметов / зоны триггера

Roblox’овский BasePart.Touched — очень распространённый шаблон для подбора предметов, зон урона и контрольных точек. В All Out добавьте включённый коллайдер, установите is_trigger, и назначьте on_trigger_start, on_trigger_stay, или on_trigger_end. Другой коллайдер передаётся в обратный вызов. Объект Movement_Agent не требуется.

Используйте Scene.get_all_components_in_range когда вам нужно широкое обнаружение или проверка расстояния. Сплошная коллизия не предоставляет общего обратного вызова в стиле Roblox, Touched обратного вызова.

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


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

Если вы привыкли к Roblox-скриптам «tool» или самописным системам ввода + кулдауна, используйте Способности вместо этого. Они спроектированы так, чтобы хорошо работать и на мобильных устройствах, и на ПК с единым интерфейсом.


Сохранение данных (DataStoreService → система сохранения)

Для постоянных данных (валюты, разблокировки, прогресс, косметика) начните с:


UI (ScreenGui → UI-система All Out)

Roblox UI часто начинается с ScreenGui и Frame/TextButton иерархий. В All Out начните здесь:

Рисуйте UI игрока в ao_late_update внутри is_local_or_server().


Типичные подводные камни при переносе для Roblox-разработчиков

  • Нет дерева «workspace services»: не ищите ReplicatedStorage/ServerScriptService аналогов — используйте иерархию редактора + scripts папку вашего проекта.

  • Не ограждайте игровой процесс с помощью Game.is_server(): обычный игровой процесс выполняется на предсказывающем клиенте и авторитетном сервере.

  • Поля компонентов Prefab не являются независимыми переопределениями: отвяжите экземпляр или создайте другой префаб, если копиям нужны разные значения компонентов.

  • Думайте «компоненты», а не «теги»: там, где вы бы использовали теги CollectionService, вы часто добавляете вместо этого маркерный/поведенческий компонент.

  • Помните, что сцена 2D: используйте слои рендерера вместо Z-трансформации.


Куда двигаться дальше

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