學習
引擎類別
ScriptEditorService
無法建立
服務
未複製

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡



API 參考
方法
DeregisterAutocompleteCallback
外掛程式安全性
ScriptEditorService:DeregisterAutocompleteCallback(name:string):()
參數
name:string
返回
()
範例程式碼
取消自動補全回調()
local ScriptEditorService = game:GetService("ScriptEditorService")
-- 取消對 'foo' 的自動補全回調
ScriptEditorService:DeregisterAutocompleteCallback("foo")

DeregisterScriptAnalysisCallback
外掛程式安全性
ScriptEditorService:DeregisterScriptAnalysisCallback(name:string):()
參數
name:string
返回
()
範例程式碼
取消註冊腳本分析回呼()
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:DeregisterScriptAnalysisCallback("foo")

FindScriptDocument
外掛程式安全性
ScriptEditorService:FindScriptDocument(script:LuaSourceContainer):ScriptDocument
參數
範例程式碼
腳本文件:關閉異步
--!nocheck
-- 在命令列中執行以下程式碼
local ScriptEditorService = game:GetService("ScriptEditorService")
local documents = ScriptEditorService:GetScriptDocuments()
local scriptDocument
-- 找到第一個打開的腳本文件
for _, document in documents do
-- 命令列不能關閉,因此不要選擇它
if not document:IsCommandBar() then
scriptDocument = document
break
end
end
if scriptDocument then
local success, err = scriptDocument:CloseAsync()
if success then
print(`已關閉 {scriptDocument.Name}`)
else
warn(`無法 關閉 {scriptDocument.Name} 原因:{err}`)
end
else
print("沒有打開的 腳本")
end
連接到 ScriptDocument.ViewportChanged
--!nocheck
--[[
要運行:
1. 確保輸出視圖已開啟
2. 在命令欄中運行以下代碼
3. 在打開的腳本窗口中上下滾動
來自 ViewportChanged 事件的打印語句將出現在輸出中
]]
local Workspace = game:GetService("Workspace")
local ScriptEditorService = game:GetService("ScriptEditorService")
-- 創建跨越多行的文本
local dummyText = string.rep("-- 假文本\n", 60)
-- 創建一個包含假文本的腳本並打開它
local otherScript = Instance.new("Script")
otherScript.Source = dummyText
otherScript.Parent = Workspace
local success, err = ScriptEditorService:OpenScriptDocumentAsync(otherScript)
if not success then
warn(`無法打開腳本,因為: {err}`)
return
end
-- 獲取對打開的腳本的引用
local scriptDocument = ScriptEditorService:FindScriptDocument(otherScript)
local function onViewportChanged(startLine: number, endLine: number)
print(`腳本視口已變更 - 開始行: {startLine}, 結束行: {endLine}`)
end
-- 連接視口變更事件到上面的函數,該函數打印更新後視口的開始和結束行
scriptDocument.ViewportChanged:Connect(onViewportChanged)

GetEditorSource
外掛程式安全性
ScriptEditorService:GetEditorSource(script:LuaSourceContainer):string
參數
返回

GetScriptDocuments
外掛程式安全性
ScriptEditorService:GetScriptDocuments():{ScriptDocument}
範例程式碼
列印每個腳本的名稱
--!nocheck
-- 在命令欄執行以下代碼
local ScriptEditorService = game:GetService("ScriptEditorService")
local scriptDocuments = ScriptEditorService:GetScriptDocuments()
for _, scriptDocument in scriptDocuments do
-- 列印每個腳本的名稱
if not scriptDocument:IsCommandBar() then
print(scriptDocument.Name)
end
end

OpenScriptDocumentAsync
暫停
外掛程式安全性
ScriptEditorService:OpenScriptDocumentAsync(
參數
options:Dictionary
預設值:"nil"
返回
範例程式碼
開啟腳本文檔異步()
--!nocheck
-- 在命令列中運行以下代碼
local ScriptEditorService = game:GetService("ScriptEditorService")
local Workspace = game:GetService("Workspace")
local newScript = Instance.new("Script")
newScript.Parent = Workspace
local success, err = ScriptEditorService:OpenScriptDocumentAsync(newScript)
if success then
print("已打開腳本文件")
else
print(`打開腳本文件失敗:{err}`)
end

RegisterAutocompleteCallback
外掛程式安全性
ScriptEditorService:RegisterAutocompleteCallback(
name:string, priority:number, callbackFunction:function
):()
參數
name:string
priority:number
callbackFunction:function
返回
()
範例程式碼
註冊自動完成功能() 和 取消註冊自動完成功能()
--!nocheck
-- 在命令欄中運行以下代碼
local ScriptEditorService = game:GetService("ScriptEditorService")
type Request = {
position: {
line: number,
character: number,
},
textDocument: {
document: ScriptDocument?,
script: LuaSourceContainer?,
},
}
type Response = {
items: {
{
label: string,
kind: Enum.CompletionItemKind?,
tags: { Enum.CompletionItemTag }?,
detail: string?,
documentation: {
value: string,
}?,
overloads: number?,
learnMoreLink: string?,
codeSample: string?,
preselect: boolean?,
textEdit: {
newText: string,
replace: {
start: { line: number, character: number },
["end"]: { line: number, character: number },
},
}?,
}
},
}
local autocompleteCallback = function(request: Request, response: Response): Response
local item = {
label = "foo",
preselect = true,
}
table.insert(response.items, item)
return response
end
ScriptEditorService:RegisterAutocompleteCallback("foo", 1, autocompleteCallback)
-- 若要註銷回調,請在命令欄中運行以下代碼
ScriptEditorService:DeregisterAutocompleteCallback("foo")

RegisterScriptAnalysisCallback
外掛程式安全性
ScriptEditorService:RegisterScriptAnalysisCallback(
name:string, priority:number, callbackFunction:function
):()
參數
name:string
priority:number
callbackFunction:function
返回
()
範例程式碼
註冊腳本分析回調()
type Request = {
["script"]: LuaSourceContainer,
}
type Response = {
diagnostics: {
{
range: {
start: {
line: number,
character: number,
},
["end"]: {
line: number,
character: number,
},
},
code: string?,
message: string,
severity: Enum.Severity?,
codeDescription: { href: string }?,
}
},
}
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:RegisterScriptAnalysisCallback("foo", 1, function(Req: Request): Response
local response = {
diagnostics = {},
}
local lineNo = 1
-- 逐行迭代
for text, newline in Req.script.Source:gmatch("([^\r\n]*)([\r\n]*)") do
local startIndex, endIndex = string.find(text, "Foo")
if startIndex and endIndex then
table.insert(response.diagnostics, {
range = {
["start"] = {
line = lineNo,
character = startIndex,
},
["end"] = {
line = lineNo,
character = endIndex,
},
},
code = "FooFinder",
message = "在這裡找到 Foo!",
severity = Enum.Severity.Warning,
})
end
lineNo = lineNo + #newline:gsub("\n+", "\0%0\0"):gsub(".%z.", "."):gsub("%z", "")
end
return response
end)

UpdateSourceAsync
暫停
外掛程式安全性
ScriptEditorService:UpdateSourceAsync(
script:LuaSourceContainer, callback:function
):()
參數
callback:function
返回
()

活動
TextDocumentDidChange
外掛程式安全性
ScriptEditorService.TextDocumentDidChange(
document:ScriptDocument, changesArray:Variant
參數
changesArray:Variant
範例程式碼
ScriptEditorService.文本文件已變更
--!nocheck
-- 在命令欄中運行以下代碼
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidChange:Connect(function(scriptDocument, changes)
print("已變更", scriptDocument, changes)
end)

TextDocumentDidClose
外掛程式安全性
ScriptEditorService.TextDocumentDidClose(oldDocument:ScriptDocument):RBXScriptSignal
參數
oldDocument:ScriptDocument
範例程式碼
腳本編輯器服務. 文檔關閉
--!nocheck
-- 在命令欄中運行以下代碼
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidClose:Connect(function(scriptDocument)
print("已關閉", scriptDocument)
end)

TextDocumentDidOpen
外掛程式安全性
ScriptEditorService.TextDocumentDidOpen(newDocument:ScriptDocument):RBXScriptSignal
參數
newDocument:ScriptDocument
範例程式碼
腳本編輯器服務. 文檔已打開
--!nocheck
-- 在命令欄中運行以下代碼
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidOpen:Connect(function(scriptDocument)
print("已打開", scriptDocument)
end)

©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。