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

Объекты и компоненты

Игры All Out построены вокруг сущностей (объектов в мире) и компонентов (поведения/данных, прикреплённых к сущностям).

Если вы раньше работали с Unity: думайте «GameObject + Components». Если вы работали с Roblox: думайте «Instance + Scripts/Components». Основная идея та же: вы создаёте игровой процесс, добавляя компоненты к сущностям.

Сущности

Сущности существуют в двух основных вариантах:

  • Размещены в редакторе: они уже находятся в сцене при запуске.

  • Созданы во время выполнения: вы создаёте их из скрипта.

Создание и уничтожение сущностей

entity := Scene.create_entity();
entity.set_local_position({10, 20});
entity.set_local_scale({2.5, 2.5});
entity.set_local_rotation(0);

// Когда закончите:
entity.destroy();

Перебор сущностей

Компоненты

Компоненты — это единицы поведения. Компонент «живет» на сущности и может читать/изменять эту сущность.

Получение и добавление компонентов

Перебор компонентов

Встроенные компоненты, которые вы будете часто использовать

Sprite_Renderer

Префабы (Prefab_Asset)

Префабы нужно создавать в редакторе. В скриптах вы их инстанцируете.

Spine (Spine_Animator)

Если вы используете 2D-анимированных персонажей, вы часто будете работать с Spine_Animator. См. Spine.

Создание собственного компонента

Создавайте новые компоненты в отдельных файлах (например, orbiter.csl) и прикрепляйте их к сущностям либо:

  • Вручную в редакторе, или

  • Во время выполнения с entity.add_component(...)

Компоненты могут реализовывать колбэки жизненного цикла:

  • ao_start()

  • ao_update(dt)

  • ao_late_update(dt) (после всех обновлений)

  • ao_end() (при уничтожении)

Пример:

Методы жизненного цикла для глобальных скриптов (ao_start, ao_update, ...) описаны в Жизненный цикл игры/кадра.

Сериализуемые поля (@ao_serialize)

Используйте @ao_serialize чтобы отобразить поле в Inspector и включить его в сериализацию сцены и JSON.

Триггеры и запросы близости

Коллайдеры-триггеры предоставляют on_trigger_start, on_trigger_stay, а on_trigger_end колбэки. См. Навмеш и столкновения для настройки и сигнатур колбэков.

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

Полезные вспомогательные функции:

Пример:

Лучшие практики

  • Состояние на каждого игрока должно находиться в Player. Избегайте глобальных переменных, которые сломаются при нескольких игроках.

  • Для поведенческой логики игрового процесса предпочитайте компоненты. В итоге у вас получатся переиспользуемые фрагменты, которые можно прикреплять к разным сущностям.

  • Отрисовывайте UI игрока из Player.ao_late_update. Оберните это в is_local_or_server().

  • Используйте is_local() только для визуальных переопределений, специфичных для игрока. Не изменяйте внутри него состояние игрового процесса или UI.

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