Studio

Анимации персонажа: от редактора до запуска из скрипта

Как записать свою анимацию в Animation Editor, опубликовать её, проиграть по нажатию и не сломать при этом ходьбу. Плюс главное, о чём молчат уроки: приоритеты дорожек и почему чужие анимации не работают.

Средне 24 минуты 6 шагов проверен 42 дня назад

Что понадобится

Roblox Studio, персонаж на площадке (Rig Builder), базовое понимание LocalScript.

Текст гайда «Анимации персонажа: от редактора до запуска из скрипта»

Содержание

Анимация в Roblox — это не видео и не готовый эффект. Это записанная последовательность поз скелета, которую движок проигрывает поверх обычного движения персонажа. Отсюда все особенности: анимации складываются друг с другом, спорят за одни и те же кости и требуют явного указания, кто главнее.

Кому анимировать#

Анимируют не «персонажа», а риг — модель со скелетом. Готовый берётся во вкладке Avatar → Rig Builder. Там же выбирается тип: R6 (шесть частей, простой и старый) или R15 (пятнадцать частей, плавнее и умеет больше). Анимация, записанная для R6, на R15 работать не будет — это разные скелеты.

Тип рига задаётся в настройках игры

Какой скелет получат игроки, решает не риг на площадке, а настройка Game Settings → Avatar → Rig Type. Записал анимацию под R15, а в игре стоит R6 — персонаж просто ничего не сделает. Определись с типом до того, как начнёшь анимировать.

Animation Editor: как записывают позы#

Вкладка Avatar → Animation Editor, щёлкнуть по ригу, задать имя дорожки. Дальше работа идёт кадрами: ставишь ползунок на нужное время, поворачиваешь части тела — редактор сам записывает ключевой кадр.

  1. поставь ползунок в ноль и задай стартовую позу — даже если это обычная стойка
  2. сдвинь ползунок и сделай крайнюю позу движения: замах, приседание, поворот
  3. вернись и добавь промежуточные кадры там, где движение выглядит деревянным
  4. для зацикленных движений скопируй первый кадр в конец, иначе на стыке будет рывок
  5. включи Looped в меню дорожки, если анимация должна повторяться

Три кадра лучше тридцати

Движок сам достраивает движение между ключевыми кадрами. Новички ставят кадр на каждый шаг ползунка и получают дёрганую анимацию. Начни с трёх поз: начало, крайняя точка, возврат. Добавляй кадры только там, где глазом видно проблему.

Приоритет: почему анимация не видна#

Самая частая беда: анимация запускается, а персонаж продолжает бежать как ни в чём не бывало. Причина в приоритете — движок проигрывает несколько дорожек сразу, и побеждает та, у которой приоритет выше.

Приоритеты от низшего к высшему
ЗначениеДля чего
CoreСлужебные анимации платформы
IdleСтойка на месте
MovementХодьба, бег, прыжок
ActionУдар, взмах, использование предмета — то, что должно перебивать бег
Action2 … Action4Когда нужно перебить даже другое действие

Приоритет ставится в самом редакторе (меню дорожки → Set Animation Priority) и сохраняется вместе с анимацией. Правило простое: всё, что игрок делает нарочно, — это Action.

Публикация и id#

Готовую дорожку публикуют: меню редактора → Publish to Roblox. После этого у анимации появляется id, и его вставляют в свойство AnimationId объекта Animation.

Чужая анимация не проиграется

Анимация принадлежит тому, кто её опубликовал. Игра может использовать только анимации своего владельца — свои, если игра личная, или загруженные от имени группы, если игра принадлежит группе. Взял id из чужого урока — получишь неподвижного персонажа и ошибку в Output. Это защита, а не баг.

Запуск из скрипта#

Проигрывает анимацию объект Animator внутри Humanoid. Порядок всегда один: взять Animator, загрузить в него Animation, получить AnimationTrack, вызвать у дорожки Play().

Luau
local players = game:GetService("Players")
local userInput = game:GetService("UserInputService")

local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")

local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://0" -- сюда свой id после публикации

-- Дорожку загружают один раз и держат: LoadAnimation на каждое нажатие
-- плодит объекты и со временем начинает заметно подтормаживать.
local track = animator:LoadAnimation(animation)
track.Priority = Enum.AnimationPriority.Action

userInput.InputBegan:Connect(function(input, processed)
    if processed then
        return -- игрок печатает в чате, а не играет
    end

    if input.KeyCode == Enum.KeyCode.E and not track.IsPlaying then
        track:Play()
    end
end)

Заменить стандартную ходьбу#

Чтобы поменять анимации бега и стойки для всех, не нужен свой скрипт с нуля. Внутри персонажа лежит Animate — обычный скрипт со списком стандартных id. Скопируй его в StarterPlayer → StarterCharacterScripts и подставь свои значения в нужные строки: walk, run, idle, jump.

Где искать Animate

Он появляется только у запущенной игры: нажми Play, найди в Explorer своего персонажа, скопируй оттуда Animate, останови тест и вставь в StarterCharacterScripts. В остановленном редакторе этого скрипта нет.

Что обычно идёт не так#

Симптом и причина
Что видишьСкорее всего
Ничего не происходитНе тот владелец анимации или пустой AnimationId
Анимация проигрывается, но персонаж бежит поверхПриоритет ниже Movement
Дёргается на стыке циклаПервый и последний кадр не совпадают
Работает у автора, не работает у игроковАнимация опубликована от личного аккаунта, а игра принадлежит группе
Со временем начинает тормозитьLoadAnimation вызывается при каждом нажатии

Пошагово

6 шагов
  1. 1

    Поставь риг

    Вкладка Avatar → Rig Builder → выбери тот же тип скелета, что стоит в настройках игры.

  2. 2

    Запиши движение

    Открой Animation Editor, щёлкни по ригу, задай имя. Поставь стартовую позу в нуле, крайнюю — дальше по времени, добавь один-два промежуточных кадра.

    Начни с чего-то короткого: махнуть рукой, присесть, кивнуть.

  3. 3

    Задай приоритет

    Меню дорожки → Set Animation Priority → Action, если анимация должна перебивать бег.

  4. 4

    Опубликуй

    Меню редактора → Publish to Roblox. Скопируй полученный id: он понадобится в скрипте.

  5. 5

    Запусти из скрипта

    Положи LocalScript из гайда в StarterPlayer → StarterCharacterScripts и подставь свой id в AnimationId.

  6. 6

    Проверь в игре

    Нажми Play, побегай и нажми клавишу на бегу. Если анимация не перебивает движение — вернись к приоритету.

Реклама · игра в Telegram Moki Blast — шарики, боссы и дуэли в Telegram Надуй щёки Моки и собери три шара одного цвета Шесть миров: от руин до Золотого города Король обезьян ждёт на 120-м уровне Дуэли с живыми игроками и турниры Играть в Telegram

Обсуждение

Пиши по делу и без личных данных. Ссылки на сторонние сайты, обмен и «бесплатные робуксы» мы скрываем — почему.

Комментарии пишут те, кто вошёл — так спокойнее всем.

Войти

Пока никто ничего не написал. Будь первым.