Roblox - 制作插件
第一次尝试制作插件
2024 年 5 月 16 日
第一次做 Roblox 插件,写点零零散散的
2024 年 11 月 1 日
现在做的插件总有种写期末小学期的既视感,也算是完整的小项目(?
插件使用和显示
插件按钮
在插件导航栏创建按钮,点击按钮实现插件功能或者打开插件窗口
1
2
3
4
5
6
7local 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
11openUIBtn.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
30function 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)