как сделать меню выбора персонажа и его смену в ро...
Created on: June 9, 2025
Created on: June 9, 2025
как сделать меню выбора персонажа и его смену в роблокс студио
Ниже ‒ пошаговый «скелет» системы выбора персонажей в Roblox Studio, рассчитанный на актуальные API (июнь 2025). Код можно копировать прямо в свои объекты; поправьте имена под свою структуру проекта.
Если нужен уникальный риг c скриптами, положите в ту же папку Model c Humanoid-ом внутри.
UIGridLayout
(или UIListLayout
).lua-- StarterGui/CharacterSelect/Frame/LocalScript local RS = game:GetService("ReplicatedStorage") local charsFolder = RS:WaitForChild("Characters") local event = RS:WaitForChild("SelectCharacter") -- RemoteEvent local frame = script.Parent local template = frame:WaitForChild("ButtonTemplate") -- ImageButton for _,desc in ipairs(charsFolder:GetChildren()) do local button = template:Clone() button.Name = desc.Name button.Image = desc:FindFirstChild("Thumbnail") and desc.Thumbnail.Value button.Parent = frame button.Visible = true button.MouseButton1Click:Connect(function() event:FireServer(desc.Name) -- сообщаем серверу end) end template.Visible = false
Идея «кнопка → RemoteEvent:FireServer
» — базовая схема, показанная на DevForum devforum.roblox.com.
lua-- ServerScriptService/CharacterSelectServer local RS = game:GetService("ReplicatedStorage") local players = game:GetService("Players") local event = RS:WaitForChild("SelectCharacter") local chars = RS:WaitForChild("Characters") players.CharacterAutoLoads = false -- чтобы мы контролировали спавн players.PlayerAdded:Connect(function(plr) plr:LoadCharacter() -- первый спавн (стандартный либо дефолт) end) event.OnServerEvent:Connect(function(plr, charName) local asset = chars:FindFirstChild(charName) if not asset then return end -- Вариант A: HumanoidDescription if asset:IsA("HumanoidDescription") then plr:LoadCharacterWithHumanoidDescription(asset) -- API с июня 2024 г. [create.roblox.com](https://create.roblox.com/docs/reference/engine/classes/Player/LoadCharacterWithHumanoidDescription) else -- Вариант B: модель-риг local model = asset:Clone() model.Name = plr.Name model.Parent= workspace plr.Character = model -- «пересаживаем» игрока end end)
LoadCharacterWithHumanoidDescription
безопасно переспавнивает аватар с указанной «одёжкой»; дожидайтесь события Player.CharacterAppearanceLoaded
, прежде чем снова менять персонажа create.roblox.com.
Что сделать | Как |
---|---|
Показывать меню при респавне | Подпишитесь на Player.CharacterAdded в LocalScript и открывайте GUI, скрывайте после выбора. |
Сохранять выбор | Запишите имя персонажа в DataStore и читайте его при PlayerAdded , затем вызовите LoadCharacterWithHumanoidDescription . |
Прелоад иконок | Добавьте ThumbnailCamera к каждой модели или сохраните готовые картинки и подставьте в ImageButton.Image . |
Блокировка выбора в бою | Храните BoolValue CanChangeCharacter у игрока и проверяйте на сервере перед применением. |
Модульный подход | DevForum советует держать общие модули на клиенте, чтобы не клонировать их многократно devforum.roblox.com. |
Character
напрямую с клиента невозможно.LoadCharacterWithHumanoidDescription
дождитесь CharacterAppearanceLoaded
, прежде чем применять эффекты или телепортировать игрока.С этой заготовкой вы получите стабильное меню выбора и моментальную смену аватара без перезагрузки карты. Удачи в разработке!