Нажми — и деталь появится в мире
- ⏱ Сколько займёт
- 30–50 минут, 5 шагов. Каждый шаг заканчивается результатом на экране.
- 💻 Что нужно
- Компьютер с Windows или macOS. Понадобится Roblox Studio — бесплатная, поставим на первом шаге. С телефона этот квест не проходится.
- ⏸ Если прервёшься
- Ничего не потеряется: прогресс сохраняется на этом устройстве. Вернёшься — продолжишь с того же шага.
- 🎓 Чему научишься
- подмена анимации · Animator и дорожки · оживление NPC
Свой танец вместо стандартного
Вечером у костра команда танцует. Один твой герой стоит столбом и ходит своей стандартной походкой.
«Смени ему шаг, — капитан кивает на огонь. — Игрок не читает описаний. Он смотрит, как ходят».
Своя походка — и персонаж сразу становится собой, а не болванчиком со склада.
Это запись из Roblox Studio: у костра каждый двигается по-своему. Такой же берег ты оживишь сам за этот квест.
Сегодня впервые в этой экспедиции появится скрипт. Совсем короткий.
Хитрость в том, что содержимое этого скрипта можно подменить. Найти внутри него анимацию танца и вписать туда ID своей. Сам Animate появляется только во время игры (Play → Players → твоё имя → Character → Animate): в режиме редактирования его в Explorer нет, поэтому подменять будем скриптом.
- 1ServerScriptService — сюда кладут общий скриптПКМ → Insert Object → Script. Такой скрипт работает на сервере, и его действие видят все игроки.
- 2Скрипт для NPC — внутрь самой моделиТогда
script.Parentи есть персонаж, и танцевать он будет сам по себе. - 3Кнопка Play — проверитьНапиши в чате
/e dance. Если персонаж танцует твоё — подмена сработала. - 4Не работает? Смотри OutputВкладка Script → Output. Красная строка покажет, какой объект скрипт не нашёл.
Пять строк, которые всё меняют
local Players = game:GetService("Players") -- сюда вставь свой Asset ID local NEW_DANCE = "rbxassetid://9093137352" local function onCharacterAdded(character) local animate = character:WaitForChild("Animate") local dance = animate:WaitForChild("dance") for _, clip in ipairs(dance:GetChildren()) do clip.AnimationId = NEW_DANCE end end Players.PlayerAdded:Connect(function(player) player.CharacterAdded:Connect(onCharacterAdded) end)
WaitForChild — «подожди, пока этот объект появится». Аватар собирается не мгновенно, и без ожидания скрипт полез бы в пустоту. rbxassetid:// — приставка перед номером: так Roblox понимает, что это адрес ресурса. Внутри dance лежат три клипа — Animation1, Animation2, Animation3, и /e dance каждый раз берёт случайный. Поэтому меняем все сразу циклом, иначе свой танец покажется в одном случае из трёх. Рядом лежат dance2 и dance3 — это команды /e dance2 и /e dance3, их подменяют так же.Запусти игру и напиши в чат /e dance. Персонаж станцует твоё.
ServerScriptService — скрипты, работающие на сервере: их видят все игроки. StarterPlayerScripts — LocalScript, работающий у каждого игрока отдельно: сюда идёт всё, что связано с клавишами и интерфейсом. StarterGui — интерфейс. Положишь скрипт не туда — он просто не запустится.
- 1Clip Editor — откуда берётся твой Asset IDСвой танец сначала публикуют здесь, и Roblox выдаёт длинное число. Его и подставляют в код с приставкой rbxassetid:// — без приставки Roblox не понимает, что это адрес.
- 2ServerScriptService — сюда кладут DanceChangeНаведи мышь на строку → «+» → Script. Такой скрипт работает на сервере, и подмену танца увидят все. Скрипт для игрока живёт только тут: в StarterGui или Workspace он не запустится.
- 3Workspace — а второй скрипт кладут ВНУТРЬ жителяРазверни Workspace, найди строку своего рига и через «+» на ней вставь Script. Тогда script.Parent — сам персонаж, и он затанцует сам по себе, без всякого игрока.
- 4Синий треугольник ▶ — и напиши в чат /e danceТанцует твоё — подмена сработала. Красный квадрат рядом останавливает тест.
- 5Вкладка Script — тут живёт окно OutputНикакой вкладки View в этой Studio нет, красные строки ищи именно здесь. Если житель стоит столбом и ошибок нет — почти всегда забыт rbxassetid:// или не выставлен Looped.
Это настоящий экран Roblox Studio 2026 — такой же, как у тебя: та же лента вкладок, тот же Explorer со всеми сервисами, та же панель Properties. Нажимай на кружки по порядку: метка покажет место, строка ниже объяснит, зачем оно. Чего на кадре нет — про то честно написано словами. Отмечай пройденное — прогресс сохранится.
Танцующий житель
local rig = script.Parent local humanoid = rig:WaitForChild("Humanoid") local animator = humanoid:FindFirstChildOfClass("Animator") or Instance.new("Animator", humanoid) local anim = Instance.new("Animation") anim.AnimationId = "rbxassetid://9093137352" local track = animator:LoadAnimation(anim) track.Looped = true track:Play()
script.Parent и есть сам персонаж. Instance.new создаёт новый объект прямо из кода. LoadAnimation превращает клип в дорожку, которую можно включить, поставить на паузу или остановить. Строчка FindFirstChildOfClass("Animator") or Instance.new(...) — подстраховка: у ригов из Toolbox Animator иногда отсутствует, и обычный WaitForChild завис бы молча, без единой ошибки.Теперь на твоём острове танцует житель — сам, всё время, без всякого игрока. Такие персонажи оживляют карту сильнее, чем любая декорация.
track:AdjustSpeed(2) и громкость влияния.Три объекта, и все три нужны. Пропустишь LoadAnimation — включать будет нечего.

Походка как характер
По одной ходьбе игрок понимает про персонажа больше, чем из описания: тяжёлый шаг — сильный, семенящий — трусливый, вразвалку — наглый.
В больших играх для каждого героя делают свой набор движений: ходьба, бег, разворот, ожидание. Только на ожидание иногда рисуют несколько вариантов, чтобы персонаж не выглядел куклой.
Приём, который стоит копировать: дай герою одно уникальное движение. Его запомнят.
Когда не работает
Персонаж стоит неподвижно, красных ошибок нет — в Output только предупреждение о неудачной загрузке. Найди строку.
Живой берег
track:Play() поставь task.wait(math.random() * 2). Персонажи рассинхронизируются.Задание Гильдии: сделай анимацию для себя — ту, которую хочется показывать друзьям. Подмени ей стандартный танец и позови кого-нибудь в свою игру.
Поднимай флаг.