ChangeHistoryService
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
Pengembang plugin harus menggunakan ChangeHistoryService untuk memberi tahu Studio bagaimana membatalkan dan memperbaiki perubahan yang dilakukan oleh plugin mereka kepada pengalaman dengan merekam.Sebelum membuat perubahan, plugin memanggil ChangeHistoryService:TryBeginRecording() , mengingat identifikator yang ditugaskan, lalu setelah membuat perubahan, Plugin memanggil ChangeHistoryService:FinishRecording() untuk menyelesaikan perekaman.
Plugin juga dapat secara programatik memanggil undo atau redo melalui ChangeHistoryService:Undo() atau ChangeHistoryService:Redo() .
ChangeHistoryService tidak diaktifkan saat menjalankan, jadi memanggil metodenya di pengalaman yang berjalan tidak berpengaruh.
Rangkuman
Metode
- FinishRecording(identifier : string,operation : Enum.FinishRecordingOperation,finalOptions : Dictionary?):()
Berkomunikasi ke Studio bahwa rekaman yang diidentifikasi selesai dan untuk mengambil operasi terakhir untuk menyelesaikan rekaman.
Kembalikan apakah ada tindakan yang dapat dilakukan ulang, dan, jika ada, kembalikan yang terakhir dari mereka.
Kembalikan apakah ada tindakan yang dapat dibatalkan, dan, jika ada, kembalikan yang terakhir dari mereka.
Menjalankan tindakan terakhir yang dibatalkan.
Menghapus sejarah, menyebabkan semua titik jalan undo/redo dihapus.
Mengatur apakah atau tidak ChangeHistoryService diaktifkan.
Tetapkan titik jalur baru yang dapat digunakan sebagai titik membatalkan atau mengulangi.
Dimulai melacak perubahan yang dilakukan pada model data ke dalam rekaman.
Membatalkan tindakan terakhir yang diambil, untuk mana ada waypoint.
Acara
- OnRecordingFinished(name : string,displayName : string?,identifier : string?,operation : Enum.FinishRecordingOperation,finalOptions : Dictionary?):RBXScriptSignal
Ditembak ketika pengguna menyelesaikan action. Para meterik berasal dari TryBeginRecording() dan FinishRecording() .
Ditembak ketika pengguna memulai action. Para meterik berasal dari TryBeginRecording() .
Ditembak ketika pengguna membalikkan perintah membatalkan. Waypoint menggambarkan tindakan jenis yang telah diulang.
Ditembak ketika pengguna membatalkan tindakan di studio. Waypoint menggambarkan jenis tindakan yang telah dibatalkan.
Properti
Metode
FinishRecording
Parameter
Mengidentifikasi rekaman dari panggilan sebelumnya ke TryBeginRecording() .Jika operasi adalah Enum.ChangeHistoryService.FinishRecordingOperation.Cancel , nilai ini diabaikan, dan rekaman ditentukan oleh konteks.
Mengidentifikasi operasi yang harus diambil.
Tabel opsional nilai untuk dikirim ke OnFinishRecording .
Memberikan nilai
Contoh Kode
To commit an undo/redo record, you need to first call TryBeginRecording() followed by calling FinishRecording().
local ChangeHistoryService = game:GetService("ChangeHistoryService")
local Selection = game:GetService("Selection")
local toolbar = plugin:CreateToolbar("Example Plugin")
local button = toolbar:CreateButton("Neon it up", "", "")
button.Click:Connect(function()
local parts = {}
for _, part in pairs(Selection:Get()) do
if part:IsA("BasePart") then
parts[#parts + 1] = part
end
end
if #parts < 1 then
-- Nothing to do.
return
end
local recording = ChangeHistoryService:TryBeginRecording("Set selection to neon")
if not recording then
-- Handle error here. This indidcates that your plugin began a previous
-- recording and never completed it. You may only have one recording
-- per plugin active at a time.
return
end
for _, part in pairs(parts) do
part.Material = Enum.Material.Neon
end
ChangeHistoryService:FinishRecording(recording, Enum.FinishRecordingOperation.Commit)
end)
GetCanRedo
Kembalikan apakah ada tindakan yang dapat dilakukan ulang, dan, jika ada, kembalikan yang terakhir dari mereka.
Memberikan nilai
GetCanUndo
Kembalikan apakah ada tindakan yang dapat dibatalkan, dan, jika ada, kembalikan yang terakhir dari mereka.
Memberikan nilai
Redo
Menjalankan tindakan terakhir yang dibatalkan.
Memberikan nilai
ResetWaypoints
Menghapus sejarah, menyebabkan semua titik jalan undo/redo dihapus.
Memberikan nilai
SetEnabled
Mengatur apakah atau tidak ChangeHistoryService diaktifkan.Saat diatur ke false, daftar undo/redo dihapus, dan tidak diisi ulang.Saat diatur ke benar lagi, daftar asli tidak dipulihkan, tetapi operasi lebih lanjut ditambahkan ke daftar sekali lagi
Parameter
Memberikan nilai
SetWaypoint
Metode ini akan dihapuskan segera demi TryBeginRecording() .
ChangeHistoryService melacak sejarah plugin sebagai aliran perubahan properti. SetWaypoint() membuat potongan dalam aliran perubahan properti sehingga tindakan undo dan redo tahu di mana berhenti.
Menurut konvensi, tindakan yang dipanggil oleh pengguna di Studio harus memanggil SetWaypoint()setelah menyelesaikan serangkaian perubahan pada pengalaman.Memanggilnya sebelum sekumpulan perubahan dapat membersihkan plugin lain yang gagal mengatur waypoint, tetapi itu adalah alasan yang buruk untuk membenarkan penggunaan seperti itu di plugin Anda sendiri.
Parameter
Memberikan nilai
Contoh Kode
In order for the waypoints to work correctly, you need to set one both before AND after you perform the action that should be able to be undone.
local ChangeHistoryService = game:GetService("ChangeHistoryService")
local Selection = game:GetService("Selection")
local toolbar = plugin:CreateToolbar("Example Plugin")
local button = toolbar:CreateButton("Neon it up", "", "")
button.Click:Connect(function()
local parts = {}
for _, part in pairs(Selection:Get()) do
if part:IsA("BasePart") then
parts[#parts + 1] = part
end
end
if #parts > 0 then
-- Calling SetWaypoint before the work will not cause any issues, however
-- it is redundant, only the call AFTER the work is needed.
--ChangeHistoryService:SetWaypoint("Setting selection to neon")
for _, part in pairs(parts) do
part.Material = Enum.Material.Neon
end
-- Call SetWaypoint AFTER completing the work
ChangeHistoryService:SetWaypoint("Set selection to neon")
else
-- Nothing to do. You do not need to call SetWaypoint in the case where
-- the action did not end up making any changes to the experience.
end
end)
TryBeginRecording
Metode ini memulai perekaman untuk melacak perubahan pada model data.Anda harus memanggilnya sebelum membuat perubahan untuk menghindari peringatan atau kesalahan di masa depan.
Saat rekaman selesai, Anda memanggil FinishRecording() dengan identifikasi rekaman yang dikembalikan untuk menyelesaikan rekaman dan memperbarui tumpukan undo/redo.
Metode ini akan kembali nil jika gagal memulai perekaman.Perekaman gagal jika plugin sudah memiliki perekaman sedang berlangsung, atau jika pengguna berada dalam mode Jalankan atau Bermain .
Anda dapat menggunakan IsRecordingInProgress() untuk memeriksa status perekaman plugin.
Parameter
Nama tindakan yang dilakukan cocok untuk tujuan pencatatan dan pengkodean.
Nama tindakan yang dilakukan untuk ditampilkan kepada pengguna.
Memberikan nilai
Contoh Kode
To commit an undo/redo record, you need to first call TryBeginRecording() followed by calling FinishRecording().
local ChangeHistoryService = game:GetService("ChangeHistoryService")
local Selection = game:GetService("Selection")
local toolbar = plugin:CreateToolbar("Example Plugin")
local button = toolbar:CreateButton("Neon it up", "", "")
button.Click:Connect(function()
local parts = {}
for _, part in pairs(Selection:Get()) do
if part:IsA("BasePart") then
parts[#parts + 1] = part
end
end
if #parts < 1 then
-- Nothing to do.
return
end
local recording = ChangeHistoryService:TryBeginRecording("Set selection to neon")
if not recording then
-- Handle error here. This indidcates that your plugin began a previous
-- recording and never completed it. You may only have one recording
-- per plugin active at a time.
return
end
for _, part in pairs(parts) do
part.Material = Enum.Material.Neon
end
ChangeHistoryService:FinishRecording(recording, Enum.FinishRecordingOperation.Commit)
end)
Undo
Membatalkan tindakan terakhir yang diambil, untuk mana ada waypoint.
Memberikan nilai
Acara
OnRecordingFinished
Parameter
Nama tindakan yang dilakukan cocok untuk tujuan pencatatan dan pengkodean.
Nama tindakan yang dilakukan untuk ditampilkan kepada pengguna.
Pengenal untuk rekaman.
Tabel opsional dari FinishOperation() .
OnRecordingStarted
Parameter
Nama tindakan yang dilakukan cocok untuk tujuan pencatatan dan pengkodean.
Nama tindakan yang dilakukan untuk ditampilkan kepada pengguna.
OnRedo
Ditembak ketika pengguna membalikkan perintah membatalkan. Waypoint menggambarkan tindakan jenis yang telah diulang.
Parameter
OnUndo
Ditembak ketika pengguna membatalkan tindakan di studio. Waypoint menggambarkan jenis tindakan yang telah dibatalkan.