Posted on 

Roblox - 制作插件

第一次尝试制作插件

2024 年 5 月 16 日

第一次做 Roblox 插件,写点零零散散的

2024 年 11 月 1 日

现在做的插件总有种写期末小学期的既视感,也算是完整的小项目(?

插件使用和显示

  • 插件按钮

    在插件导航栏创建按钮,点击按钮实现插件功能或者打开插件窗口

    1
    2
    3
    4
    5
    6
    7
    local toorbar = plugin:CreateToolbar("在插件导航栏显示的分区名")
    local Button = toorbar:CreateButton("插件名","插件描述", "rbxassetid://图标Id")

    Button.Click:Connect(function()
    --打开插件UI
    --插件功能
    end)
  • 创建编辑器内插件弹框窗口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    -- 定义窗口信息
    local widgetInfo = DockWidgetPluginGuiInfo.new(
    Enum.InitialDockState.Float, -- 初始窗口是浮动的
    true, -- 可关闭
    true, -- 可初始化
    800, -- 默认宽度
    300, -- 默认高度
    200, -- 最小宽度
    150 -- 最小高度
    )
    -- 创建 DockWidgetPluginGui
    local dockWidget = plugin:CreateDockWidgetPluginGui("PluginTitle", widgetInfo)
    dockWidget.Title = "插件样例"
    dockWidget.Enabled = false
  • 游戏窗口内UI

    • 需要另外制作一个 ScreenGui 放置到插件脚本下面

    • 插件需要发布到 Roblox

    • 当需要 UI 显示时,将这个ScreenGUI 放置到 CoreGui下,不需要 UI 显示的时候,将 ScreenGui 放回插件脚本下面

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      openUIBtn.Click:Connect(function()
      if Gui.Parent == script then
      Gui.Parent = game:WaitForChild("CoreGui")
      elseif Gui.Parent == game:WaitForChild("CoreGui") then
      Gui.Parent = script
      end
      end)

      closeUIBtn.Activated:Connect(function()
      Gui.Parent = script
      end)

一些插件可视化功能

  • 选中物体高光

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    function Select.SelectHightLight()
    local mouse = plugin:GetMouse()
    Select.highlight = Instance.new("Highlight")
    Select.highlight.FillColor = Color3.fromRGB(137, 255, 2)
    Select.highlight.FillTransparency = 0.7
    Select.highlight.Parent = script

    local function UpdateHighlight()
    local target = mouse.Target
    if target and target:IsA("Model") then
    if Select.currentAdornee ~= target then
    Select.highlight.Adornee = target
    end
    else
    if Select.currentAdornee ~= nil then
    Select.highlight.Adornee = nil
    end
    end
    end

    Select.highlightConn = RunService.RenderStepped:Connect(UpdateHighlight)
    end

    function Select.Exit()
    Select.highlight.Adornee = nil
    if Select.highlightConn then
    Select.highlightConn:Disconnect()
    Select.highlightConn = nil
    end
    end

一些踩坑

  • 插件 plugin 全局引用不会传递给插件中的 ModuleScript,除非显式地传递它

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    --ModuleScript
    local plugin

    function ModuleScript.Init(refPlugin)
    plugin = refPlugin
    end

    --Script
    local ModuleScript = require(script.ModuleScript)
    ModuleScript.Init(plugin)


Copyright © 2022 - 2023 BlindArbiter

Powered by Hexo | Theme - Stellar