Вы можете добавлять в свою игру анимированные интерактивные объекты, используя нашу существующую библиотеку из более чем 50 тысяч ригов Spine.
Spine — это то, как анимированные персонажи и объекты работают в All Out (сундуки, животные, объекты, VFX-ригги и игрок).
Чтобы сделать Spine проще для понимания, держите в голове такую модель:
Spine rig (.spine): «чертёж» (кости + имена анимаций + имена скинов)
Spine_Animator: компонент на сущности, который отрисовывает/обновляет Spine rig в мире
Spine_Instance: базовый экземпляр, которым вы управляете в коде (воспроизводите анимации, переключаете скины и т. д.)
Скины: «одежда/варианты», которые определяют, какие изображения видны
Анимации: именованные таймлайны (например, "idle", "walk", "open")
Когда использовать Spine_Animator vs Spine_Instance
Используйте Spine_Animator для всего, что существует в мире (объекты, NPC, интерактивы).
Используйте Spine_Instance непосредственно, когда вы хотите отрисовать Spine в UI или вам нужен ручной контроль над временем жизни.
Если вы вызываете Spine_Instance.create(), вы должны вызвать instance->destroy() когда закончите (иначе будет утечка).
Справочник API Spine (CSL)
Spine_Animator::class:Component{depth_offset:float;layer:s32;instance:Spine_Instance #read_only;}Spine_Instance_Base::class{// Визуальные параметрыcolor_multiplier:v4;scale:v2;speed_multiplier:float;state_machine:State_Machine #read_only;color_replace_color:Color_Replace_Color #read_only;set_color_replace_color::method(color:Color_Replace_Color);set_material::method(material:Material,transfer_ownership:bool);}Spine_Instance::class:Spine_Instance_Base{create::proc()->Spine_Instance;destroy::method();update::method(dt:float);set_skeleton::method(asset:Spine_Asset);get_skeleton::method()->Spine_Asset;set_animation::method(animation:string,loop:bool,track:s64,speed:float=1);// Скиныset_skin::method(skin:string);enable_skin::method(skin:string);disable_skin::method(skin:string);disable_all_skins::method();refresh_skins::method();get_skins::method()->[]string;// Локальные смещения костей (продвинутый уровень)get_bone_local_position::method(bone_name:string)->v2;set_bone_local_position::method(bone_name:string,position:v2);// Необязательно: управлять анимациями через state machineset_state_machine::method(new_state_machine:State_Machine,transfer_ownership:bool);}
Добавление анимированных объектов в ваш мир
Есть 3 способа добавить анимированные объекты в вашу сцену, и все они создадут компонент Spine_Animator.
Перетащите любой анимированный ассет из Каталог ресурсовв вашу сцену
Создайте новую сущность и добавьте компонент Spine_Animator
Установите поле Skeleton Data Asset на .spine-файл в ваших ассетах
Добавьте spine animator в ваш мир с помощью скриптинга (это рассматривается в примерах)
Если ваш код и Spine_Animator находятся на одной и той же сущности и запускаются одновременно, вызовите spine->awaken() перед обращением к spine.instance.
Примеры
Открываемый сундук
Интерактивный сундук, который проигрывает анимацию «open», а затем остаётся открытым:
Идущая курица
Простой цикл «idle vs walk» на основе движения:
Управляемая машина
Если вам нужно поведение «можно управлять», самый простой подход — управлять движением с помощью собственной игровой логики и управлять анимацией в зависимости от того, движется машина или нет.
Если вы переключаетесь только между двумя зацикленными анимациями, прямые вызовы set_animation обычно проще, чем строить state machine.
Скины (варианты/наряды)
У некоторых spine нет скина по умолчанию. Если ваша сущность «невидима», скорее всего, вам нужно выбрать скин.
Всегда вызывайте refresh_skins() после изменения скинов.
State machine (необязательно, для сложной логики анимации)
Вы можете оставить логику анимаций простой, вызывая set_animation непосредственно. Если у вас много состояний (idle/run/attack/hit/death), State_Machine помогает один раз определить переходы, а затем просто задавать переменные/триггеры.
Ключевая идея: имена состояний должны совпадать с именами анимаций в вашем Spine-файле.
Что делает state machine
Думайте о state machine как о маленьком «контроллере анимаций»:
Вы определяете состояния (имя каждого состояния должно совпадать с именем анимации Spine)
Вы определяете переменные (bool, триггер, int, float)
Вы определяете переходы между состояниями на основе этих переменных
Во время выполнения вы только обновляете переменные (state machine выбирает анимацию)
Минимальный пример: idle/walk + триггер атаки
Если вы передаёте transfer_ownership = true в set_state_machine, Spine_Instance то state machine будет уничтожена автоматически. Иначе вы должны уничтожить её сами.
Поиск и устранение неисправностей
В: Я перетащил spine-ассет в сцену и не вижу никакого объекта, это просто пустая сущность
О: Убедитесь, что нажали «Add Skin» и выбрали вариант spine для применения! У некоторых spine нет скина по умолчанию.
В: Мой скрипт падает, когда я обращаюсь к spine.instance
О: Если ваш скрипт и Spine_Animator запускаются одновременно, вызовите spine->awaken() перед использованием spine.instance.
В: Я сменил скины, но ничего не произошло
О: После любого изменения скина (set_skin, enable_skin, disable_skin, disable_all_skins), нужно вызвать refresh_skins().
Пользовательские скины/анимации игрока
Если вы хотите добавить своему игроку собственные анимации, вы можете сделать это, объединив базовый Spine rig игрока All Out с пользовательским ригом, содержащим дополнительные анимации (мы можем предоставить много таких, просто свяжитесь с намиПоддержка разработчиков)
Формат Spine Rig
Spine rigs состоят из 3 файлов (они автоматически загружаются для вас, когда вы используете Asset Catalog)
Skeleton-файл (.spine) содержит информацию о костях, скинах и структуре вашего анимированного объекта.
Atlas-изображение (.png) содержит реальные текстуры, используемые для отрисовки spine в мире.
Atlas-файл (.atlas) содержит информацию о том, где внутри atlas-изображения .png находится каждая часть анимированного объекта.
Создание собственных анимаций
На данный момент, чтобы создавать собственные анимации или rig'и, вам понадобится копия Esoteric Spine. Однако мы предоставляем огромную библиотеку существующих spine rig'ов и анимаций в составе Каталог ресурсовдля вашего использования, и мы рекомендуем начать именно с этого!
Формат экспорта
Чтобы использовать пользовательский Spine rig в All Out, вам нужно экспортировать стандартный 3-файловый Spine bundle в вашу res папку:
something.spine
something.atlas
something.png (atlas texture)
Если вы не уверены в настройках экспорта, начните с существующего Spine-ассета All Out из Asset Catalog и повторите его структуру или свяжитесь с нами!