cubesСущности и компоненты

Все игры 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();
circle-exclamation

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

Компоненты

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

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

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

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

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() (при уничтожении)

Пример:

circle-info

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

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

Используйте @ao_serialize чтобы сделать поле доступным в редакторе (и часто для включения сохранения/постоянства, где это применимо).

Поиск близлежащих компонентов (запросы по близости)

В CSL нет обратных вызовов коллизий. Распространенный шаблон — «запросить близлежащие компоненты и проверить расстояние».

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

Пример:

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

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

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

  • Держите косметическую работу локальной. UI/частицы обычно должны выполняться за is_local() проверки.

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