Разработка плагинов для Roblox Studio: DockWidget UI и заработок в Creator Store

DopaBrain Game Dev Lab • Обновлено: Сентябрь 2026 • Время чтения: 9 мин

Инструменты логики и мышления

Пока большинство авторов разрабатывают игры для обычных пользователей, опытные инженеры монетизируют инструменты для самих разработчиков. В Roblox Creator Store можно официально продавать плагины для Studio за реальные доллары (USD) и Robux.

Для создания профессионального плагина нужны API, которые не используются в обычных играх: DockWidgetPluginGui для стыкуемых окон, ChangeHistoryService для корректной отмены действий (Ctrl+Z) и Selection API. Этот гайд разбирает разработку от кода до продаж.

1. Архитектура и права плагинов в Studio

Плагины работают с повышенными правами внутри Studio:

2. Создание стыкуемых панелей через DockWidgetPluginGui

Разработка окон интерфейса, которые прикрепляются к панелям Studio:

3. Безопасная отмена через ChangeHistoryService

Главная ошибка любительских плагинов — поломка истории Ctrl+Z:

4. Полный код плагина: оптимизатор выбранных деталей

Готовый скрипт, добавляющий кнопку, окно интерфейса и пакетную оптимизацию моделей:

Полный скрипт плагина Studio (Toolbar & DockWidget)
local ChangeHistoryService = game:GetService("ChangeHistoryService")
local Selection = game:GetService("Selection")

local toolbar = plugin:CreateToolbar("Optimization Tools")
local button = toolbar:CreateButton("Optimizer", "Open Batch Part Optimizer", "rbxassetid://4458901886")

local widgetInfo = DockWidgetPluginGuiInfo.new(
    Enum.InitialDockState.Float,
    false, false, 260, 180, 200, 140
)

local widget = plugin:CreateDockWidgetPluginGui("BatchOptimizerGui", widgetInfo)
widget.Title = "Mesh Optimizer"

local btnOptimize = Instance.new("TextButton")
btnOptimize.Size = UDim2.new(1, -20, 0, 44)
btnOptimize.Position = UDim2.new(0, 10, 0, 10)
btnOptimize.Text = "Оптимизировать детали"
btnOptimize.BackgroundColor3 = Color3.fromRGB(16, 185, 129)
btnOptimize.TextColor3 = Color3.fromRGB(255, 255, 255)
btnOptimize.Parent = widget

button.Click:Connect(function()
    widget.Enabled = not widget.Enabled
end)

btnOptimize.MouseButton1Click:Connect(function()
    local selected = Selection:Get()
    local count = 0
    for _, obj in ipairs(selected) do
        if obj:IsA("BasePart") then
            obj.CastShadow = false
            if obj:IsA("MeshPart") then
                obj.CollisionFidelity = Enum.CollisionFidelity.Box
            end
            count = count + 1
        end
    end
    ChangeHistoryService:SetWaypoint("Optimized " .. count .. " Parts")
end)

Как это работает: Создает кнопку в верхней панели, открывает прикрепляемое окно и оптимизирует коллизии и тени у выделенных мешей с фиксацией точки отмены.

5. Продажа в Creator Store за доллары ($USD)

Как монетизировать плагин на глобальном рынке:

Оцените свои навыки системного мышления

Разработка инструментов требует терпения и структурного подхода. Проверьте свой когнитивный профиль с нашими тестами.

Пройти бесплатный тест на тип мозга

Часто задаваемые вопросы (Разработка плагинов Roblox Studio)

Как тестировать плагин локально без загрузки в интернет?

Сохраните файл в локальную папку плагинов Studio (Плагины > Открыть папку плагинов). Он загрузится мгновенно.

Можно ли продавать плагины за реальные доллары?

Да, верифицированные создатели могут устанавливать цены в USD в Roblox Creator Store.

Зачем обязательно использовать ChangeHistoryService?

Чтобы пользователь мог в любой момент отменить действие плагина нажатием Ctrl+Z.

Как поддержать темную и светлую тему оформления?

С помощью settings().Studio.Theme:GetColor() можно динамически получать актуальные цвета интерфейса.