เรียนรู้
Engine Class
ScriptEditorService
ไม่สามารถสร้าง
บริการ
ไม่ซ้ำ

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่


สรุป
สมาชิกที่ได้รับทอด

เอกสารอ้างอิงเกี่ยวกับ API
วิธีการ
DeregisterAutocompleteCallback
การรักษาความปลอดภัยของปลั๊กอิน
ScriptEditorService:DeregisterAutocompleteCallback(name:string):()
พารามิเตอร์
name:string
ส่งค่ากลับ
()
ตัวอย่างโค้ด
DeregisterAutocompleteCallback()
local ScriptEditorService = game:GetService("ScriptEditorService")
-- ยกเลิกการลงทะเบียนฟังก์ชันเรียกกลับการเติมข้อความอัตโนมัติ
ScriptEditorService:DeregisterAutocompleteCallback("foo")

DeregisterScriptAnalysisCallback
การรักษาความปลอดภัยของปลั๊กอิน
ScriptEditorService:DeregisterScriptAnalysisCallback(name:string):()
พารามิเตอร์
name:string
ส่งค่ากลับ
()
ตัวอย่างโค้ด
การยกเลิกการวิเคราะห์สคริปต์ Callback()
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:DeregisterScriptAnalysisCallback("foo")

FindScriptDocument
การรักษาความปลอดภัยของปลั๊กอิน
ScriptEditorService:FindScriptDocument(script:LuaSourceContainer):ScriptDocument
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
เอกสารสคริปต์:CloseAsync
--!nocheck
-- รันโค้ดต่อไปนี้ใน Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
local documents = ScriptEditorService:GetScriptDocuments()
local scriptDocument
-- ค้นหาเอกสารสคริปต์ที่เปิดอยู่แรก
for _, document in documents do
-- Command Bar ไม่สามารถปิดได้ ดังนั้นอย่าเลือกมัน
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. ตรวจสอบให้แน่ใจว่ามีการเปิดมุมมอง Output
2. รันโค้ดด้านล่างใน Command Bar
3. เลื่อนขึ้นและลงในหน้าต่าง Script ที่เปิดอยู่
ข้อความพิมพ์จากเหตุการณ์ ViewportChanged จะแสดงใน Output
]]
local Workspace = game:GetService("Workspace")
local ScriptEditorService = game:GetService("ScriptEditorService")
-- สร้างข้อความที่ยาวหลายบรรทัด
local dummyText = string.rep("-- Dummy Text\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(`Viewport ของสคริปต์เปลี่ยนแปลง - startLine: {startLine}, endLine: {endLine}`)
end
-- เชื่อมต่อเหตุการณ์ ViewportChanged กับฟังก์ชันด้านบนที่พิมพ์บรรทัดเริ่มต้นและบรรทัดสิ้นสุดของ viewport ที่อัปเดต
scriptDocument.ViewportChanged:Connect(onViewportChanged)

GetEditorSource
การรักษาความปลอดภัยของปลั๊กอิน
ScriptEditorService:GetEditorSource(script:LuaSourceContainer):string
พารามิเตอร์
ส่งค่ากลับ

GetScriptDocuments
การรักษาความปลอดภัยของปลั๊กอิน
ScriptEditorService:GetScriptDocuments():{ScriptDocument}
ส่งค่ากลับ
ตัวอย่างโค้ด
พิมพ์ชื่อของสคริปต์ทุกตัว
--!nocheck
-- รันโค้ดต่อไปนี้ใน Command Bar
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"
ส่งค่ากลับ
ตัวอย่างโค้ด
เปิดเอกสารสคริปต์แบบ Asynchronous()
--!nocheck
-- รันโค้ดด้านล่างใน Command Bar
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
ส่งค่ากลับ
()
ตัวอย่างโค้ด
ฟังก์ชัน RegisterAutocompleteCallback() และ DeregisterAutocompleteCallback()
--!nocheck
-- รันโค้ดต่อไปนี้ใน Command Bar
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)
-- หากต้องการยกเลิกการลงทะเบียน callback ให้รันโค้ดต่อไปนี้ใน Command Bar
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
ตัวอย่างโค้ด
บริการแก้ไขสคริปต์: เอกสารข้อความที่เปลี่ยนแปลง
--!nocheck
-- รันโค้ดต่อไปนี้ใน Command Bar
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
ตัวอย่างโค้ด
ScriptEditorService.TextDocumentDidOpen
--!nocheck
-- เรียกใช้โค้ดต่อไปนี้ใน Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidOpen:Connect(function(scriptDocument)
print("เปิดแล้ว", scriptDocument)
end)

©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ