ContextActionService
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
Memungkinkan pengalaman untuk menyambungkan masukan pengguna ke tindakan konteks,
Konтеks dan Tindakan
Sebuah konteks adalah hanya kondisi di mana seorang pemain dapat melakukan beberapa action. Beberapa contoh termasuk menahan Tool
Sebuah tindakan adal
Mengikat Tindakan Secara Kontekstual
Sebaiknya menggunakan ContextActionService's Class. ContextActionService:BindAction()|BindAction
Menginspeksi Tindakan Batas
Untuk melihat daftar tindakan dan input yang terikat, Anda dapat menginspeksi tab "Aksi Bindings" di Developer Console (F9 saat berada di game). Ini menunjukkan
Masukan Tanpa Keyboard
Layanan ini sangat berguna untuk mendukung gamepad dan input sentuh. Untuk gamepad input, Anda mungkin memilih untuk menautkan tombol B ke tindakan yang mengembalikan pengguna ke menu sebelumnya saat mereka memasuki menu l
Contoh Kode
local ContextActionService = game:GetService("ContextActionService")
local ACTION_RELOAD = "Reload"
local tool = script.Parent
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_RELOAD and inputState == Enum.UserInputState.Begin then
print("Reloading!")
end
end
tool.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_RELOAD, handleAction, true, Enum.KeyCode.R)
end)
tool.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_RELOAD)
end)
Rangkuman
Metode
- BindAction(actionName : string,functionToBind : function,createTouchButton : bool,inputTypes : Tuple):void
Ikat masukan pengguna ke tindakan yang diberikan fungsi pemrosesan tindakan.
Bersikap seperti BindAction tetapi juga mengizinkan prioritas untuk diberikan kepada tindakan yang terikat untuk jenis masukan yang saling bertentangan (lebih tinggi dari lebih rendah).
Ikat Class.Tool.Activation dengan Class.UserInputType khusus untuk menetapkan pengikat 4>Class.Tool.Activation4> dan 7>Class.ClickDetector7> ke acara.
Dapatkan tabel informasi tentang semua tindakan yang terikat (kunci adalah nama yang diterima dari BindAction , nilai adalah tabel dari GetBoundActionInfo saat dipanggil dengan unit).
Dapatkan tabel informasi tentang tindakan yang terikat yang diberi nama asli kepada BindAction .
Kembalikan BackpackItem.TextureId dari Class.Tool saat ini Tool oleh equipped.
Mengingat nama aksi yang terikat dengan tombol sentuh, menetapkan deskripsi action.
Jika actionName kunci berisi tindakan yang dibindakan, maka image ditetapkan sebagai gambar tombol sentuh.
Mengingat nama aksi yang terikat dengan tombol sentuh, menetapkan posisi tombol dalam ContextButtonFrame.
Mengingat nama aksi yang terikat dengan tombol sentuh, menetapkan teks yang ditunjukkan di tombol.
Batalkan tautan tindakan dari masukan yang diberikan namanya.
- UnbindActivate(userInputTypeForActivation : Enum.UserInputType,keyCodeForActivation : Enum.KeyCode):void
Non-bind a Enum.KeyCode dengan spesifik Enum.UserInputType dari mengaktifkan Tool.Activation saat dibind dengan 1> Class.Tool.Activation()1> .
Hapus semua fungsi yang terikat. Tidak ada nama tindakan yang tersisa. Semua tombol sentuh akan dihapus.
Mengambil ImageButton dari aksi bound yang memiliki tombol masuk sentuh yang dibuat.
Acara
Dibakar saat pemain saat ini melengkapi Class.Tool .
Berapi-api saat pemain saat ini melepaskan peralatan Tool .
Properti
Metode
BindAction
Ikatkan tindakan ke pengguna input yang diberikan fungsi pemrosesan t
Sampel kode di bawah ini menunjukkan cara sebuah Sound dapat menjadi played sementara tombol kunci ( H ) , tombol game pad, atau tombol layar sentuh.
local ContextActionService = game:GetService("ContextActionService")
-- Suara kentang mobil
local honkSound = Instance.new("Sound", workspace)
honkSound.Looped = true
honkSound.SoundId = "rbxassetid://9120386436"
local function handleAction(actionName, inputState, inputObject)
if actionName == "HonkHorn" then
if inputState == Enum.UserInputState.Begin then
honkSound:Play()
else
honkSound:Pause()
end
end
end
-- Ketika pemain duduk di kendaraan:
ContextActionService:BindAction("HonkHorn", handleAction, true, Enum.KeyCode.H, Enum.KeyCode.ButtonY)
-- Ketika pemain keluar:
ContextActionService:UnbindAction("HonkHorn")
Parameter Penangani Tindakan
Fungsi pengelola tindakan dapat dipanggil dengan parameter berikut:
<tr><td>1</td><td><code>string</code></td><td>String yang sama yang awalnya diberikan kepada BindAction</td></tr><tr><td>2</td><td><code>enum.UserInputState</code></td><td>Status masukan (Mulai, Perubah, Akhir atau Batalkan)\*</td></tr><tr><td>3</td><td><code>Objek Masukan</code></td><td>Objek yang berisi informasi tentang masukan (berbeda tergantung pada UserInputType)</td></tr>
bantuan | Jenis | Deskripsi |
^ Ini memungkinkan satu fungsi untuk menangani banyak tindakan sekaligus, jika perlu. * Batal dikirim jika beberapa input sedang berlangsung dan tindakan lainnya terikat di atas input sedang berlangsung, atau jika tindakan terikat adalah unbound .
Tumpukan Ikat Tindakan
Ikatan
Tombol Sentuh
Selain jenis input, parameter ketiga fungsi ini mengontrol apakah tombol dibuat untuk Class.UserInputService.
Parameter
Sebuah string mewakili tindakan yang dilakukan (contohnya "HonkHorn" atau "OpenDoor").
Fungsi pengolahan tindakan, yang disebut dengan parameter berikut saat input terikat dipicu: string (actionName), Enum.UserInputState dan sebuah Object Masukan.
Apakah tombol GUI harus dibuat untuk tindakan pada perangkat masuk sentuh.
Apa pun antara Enum.KeyCode atau Enum.UserInputType mewakili input untuk dibindakan ke action.
Memberikan nilai
Contoh Kode
local ContextActionService = game:GetService("ContextActionService")
local ACTION_RELOAD = "Reload"
local tool = script.Parent
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_RELOAD and inputState == Enum.UserInputState.Begin then
print("Reloading!")
end
end
tool.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_RELOAD, handleAction, true, Enum.KeyCode.R)
end)
tool.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_RELOAD)
end)
local ContextActionService = game:GetService("ContextActionService")
local function handleAction(actionName, inputState, inputObj)
if inputState == Enum.UserInputState.Begin then
print("Handling action: " .. actionName)
print(inputObj.UserInputType)
end
-- Since this function does not return anything, this handler will
-- "sink" the input and no other action handlers will be called after
-- this one.
end
ContextActionService:BindAction("BoundAction", handleAction, false, Enum.KeyCode.F)
local ContextActionService = game:GetService("ContextActionService")
-- Define an action handler for FirstAction
local function actionHandlerOne(actionName, inputState, _inputObj)
if inputState == Enum.UserInputState.Begin then
print("Action Handler One: " .. actionName)
end
-- This action handler returns nil, so it is assumed that
-- it properly handles the action.
end
-- Binding the action FirstAction (it's on the bottom of the stack)
ContextActionService:BindAction("FirstAction", actionHandlerOne, false, Enum.KeyCode.Z, Enum.KeyCode.X, Enum.KeyCode.C)
-- Define an action handler for SecondAction
local function actionHandlerTwo(actionName, inputState, inputObj)
if inputState == Enum.UserInputState.Begin then
print("Action Handler Two: " .. actionName)
end
if inputObj.KeyCode == Enum.KeyCode.X then
return Enum.ContextActionResult.Pass
else
-- Returning nil implicitly Sinks inputs
return Enum.ContextActionResult.Sink
end
end
-- Binding SecondAction over the first action (since it bound more recently, it is on the top of the stack)
-- Note that SecondAction uses the same keys as
ContextActionService:BindAction("SecondAction", actionHandlerTwo, false, Enum.KeyCode.Z, Enum.KeyCode.X)
BindActionAtPriority
BindActionAtPriority bertindak seperti BindAction tetapi juga mengizinkan prioritas untuk ditetapkan ke actionyang dibindakan. Jika lebih dari satu tindakan dibindakan ke input yang sama, fungsi prioritas tinggi dianggap tanpa pedoman dalam urutan tindakan yang dibindakan. Dengan kata lain, fungsi ini mengalahkan perilaku
Parameter
Sebuah string mewakili tindakan yang dilakukan (contohnya "HonkHorn" atau "OpenDoor").
Fungsi pengolahan tindakan, yang disebut dengan parameter berikut saat input terikat dipicu: string (actionName), Enum.UserInputState dan sebuah Object Masukan.
Apakah tombol GUI harus dibuat untuk tindakan pada perangkat masuk sentuh.
Tingkat prioritas di mana tindakan harus dibatasi (lebih tinggi dianggap sebelum lebih rendah).
Apa pun jumlah Enum.KeyCode atau Enum.UserInputType mewakili input untuk dibindakan ke action.
Memberikan nilai
Contoh Kode
local ContextActionService = game:GetService("ContextActionService")
local INPUT_KEY1 = Enum.KeyCode.Q
local INPUT_KEY2 = Enum.KeyCode.E
local function handleThrow(actionName: string, inputState: Enum.UserInputState, inputObject: InputObject)
if inputState ~= Enum.UserInputState.Begin then
return Enum.ContextActionResult.Pass
end
print(`Action [{actionName}] occurred. KeyCode [{inputObject.KeyCode}] pressed.`)
return Enum.ContextActionResult.Sink
end
local function handlePunch(actionName: string, inputState: Enum.UserInputState, inputObject: InputObject)
if inputState ~= Enum.UserInputState.Begin then
return Enum.ContextActionResult.Pass
end
print(`Action [{actionName}] occurred. KeyCode [{inputObject.KeyCode}] pressed.`)
return Enum.ContextActionResult.Sink
end
-- Without specifying priority, the most recently bound action is called first,
-- so pressing INPUT_KEY1 prints "Punch" and then sinks the input.
ContextActionService:BindAction("DefaultThrow", handleThrow, false, INPUT_KEY1)
ContextActionService:BindAction("DefaultPunch", handlePunch, false, INPUT_KEY1)
-- Here we bind both functions in the same order as above, but with explicitly swapped priorities.
-- That is, we give "Throw" a higher priority of 2 so it will be called first,
-- despite "Punch" still being bound more recently.
-- Pressing INPUT_KEY2 prints "Throw" and then sinks the input.
ContextActionService:BindActionAtPriority("PriorityThrow", handleThrow, false, 2, INPUT_KEY2)
ContextActionService:BindActionAtPriority("PriorityPunch", handlePunch, false, 1, INPUT_KEY2)
BindActivate
I
Catat bahwa Enum.UserInputType yang ditentukan harus menjadi Keyboard atau Gamepad1 melalui 1>Gamepad81> untuk menjadi valid.
Parameter
Harus melalui Keyboard atau Gamepad1 melalui Gamepad8.
Memberikan nilai
GetAllBoundActionInfo
GetAllboundActioninfo mengembalikan tabel yang menggabungkan semua nama aksi (yang awalnya ditransmisikan ke Class.ContextActionService:BindAction()|BindAction) ke tabel yang dikembalikan oleh Class.ContextActionService:GetBoundActionInfo()|GetBoundAction ketika dipanggil dengan nama aksi itu sendiri. Menggunakan fungsi in
Memberikan nilai
GetBoundActionInfo
GetboundActionInfo mengembalikan tabel dengan kunci berikut yang menggambarkan tindakan berdasarkan nama yang diberikan. Untuk mendapatkan informasi yang sama untuk semua tindakan sekaligus, gunakan GetAllBoundActionInfo .
<tr><td><code>urutan pila</code></td><td>nomor</td><td>Menggambarkan indeks tindakan di stack (meningkat)</td></tr><tr><td><code>prioritasTingkat</code> \*</td><td>nomor</td><td>Menggambarkan tingkat <code>Class.ContextActionService:BindActionAtPriority() | priority</code> dari action</td></tr><tr><td><code>buatTombolSentuh</code></td><td>boolean</td><td>Mendefinisikan apakah tombol sentuh harus dibuat di <code>Class.UserInputService.TouchEnabled|TouchEnabled</code> perangkat</td></tr><tr><td><code>masukkan jenis-jenis ini</code></td><td>tabel</td><td>Jenis masukan yang diterima <code>Class.ContextActionService:BindAction() | BindAction</code> untuk which action ini akan mengaktifkan</td></tr><tr><td><code>deskripsi</code> ^</td><td>string</td><td>Deskripsi tindakan ditetapkan oleh <code>Class.ContextActionService:SetDescription() | SetDescription</code></td></tr><tr><td><code>judul</code> ^</td><td>string</td><td>Judul tindakan yang ditetapkan oleh <code>Class.ContextActionService:SetTitle()|SetTitle</code></td></tr><tr><td><code>gambar</code> ^</td><td>string</td><td>Gambar tombol sentuh actionyang ditetapkan oleh <code>Class.ContextActionService:SetImage() | SetImage</code></td></tr>
Nama | Jenis | Deskripsi |
Tingkat prioritas masih akan diperhatikan bahkan jika BindActionAtPriority tidak digunakan - secara default itu akan menjadi 2000.
^ Menunjukkan bahwa field ini akan menjadi nil jika metode yang diasosiasikan tidak dipanggil untuk actionyang diberikan.
Parameter
Memberikan nilai
GetCurrentLocalToolIcon
GetCurrentLocalToolIcon akan mengembalikan BackpackItem.TextureId dari Class.Tool saat ini Tool oleh equipped , atau 1> nil1> jika tidak ada alat seperti itu atau jika pemain kek
Memberikan nilai
Sebuah string konten dari Tool's TextureId, atau nol jika tidak bisa ditemukan.
SetDescription
SetDescription akan menetapkan deskripsi tindakan yang dibindungi oleh BindAction . Dalam daftar tindakan yang tersedia, ini akan menjadi teks yang menggambarkan actionyang diberikan.
Meskipun nama ini mungkin menunjukkan bahwa metode ini terkait dengan keluarga fungsi yang menyesuaikan tombol sentuh untuk actionyang membuat mereka ( SetTitle , SetImage dan Class.ContextActionService
Parameter
Nama aksi asli yang diteruskan ke BindAction.
Deskripsi teks dari action, seperti "Honk bel pintu mobil" atau "Buka inventaris".
Memberikan nilai
Contoh Kode
local ContextActionService = game:GetService("ContextActionService")
local ACTION_INSPECT = "Inspect"
local INPUT_INSPECT = Enum.KeyCode.E
local IMAGE_INSPECT = "rbxassetid://1826746856" -- Image of a speech bubble with ? in it
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_INSPECT and inputState == Enum.UserInputState.End then
print("Inspecting")
end
end
-- For touch devices, a button is created on-screen automatically via the 3rd parameter
ContextActionService:BindAction(ACTION_INSPECT, handleAction, true, INPUT_INSPECT)
-- We can use these functions to customize the button:
ContextActionService:SetImage(ACTION_INSPECT, IMAGE_INSPECT)
ContextActionService:SetTitle(ACTION_INSPECT, "Look")
ContextActionService:SetDescription(ACTION_INSPECT, "Inspect something.")
ContextActionService:SetPosition(ACTION_INSPECT, UDim2.new(0, 0, 0, 0))
-- We can manipulate the button directly using ContextActionService:GetButton
local imgButton = ContextActionService:GetButton(ACTION_INSPECT)
if imgButton then -- Remember: non-touch devices won't return anything!
imgButton.ImageColor3 = Color3.new(0.5, 1, 0.5) -- Tint the ImageButton green
end
SetImage
Metode ini menetapkan gambar yang ditunjukkan di tombol sentuh yang dibuat oleh BindAction() . Secara khusus, itu menetapkan ImageLabel.Image properti d
Fungsi ini adalah bagian dari keluarga metode yang menyesuaikan tombol sentuh action. Yang lain dalam keluarga ini termasuk SetPosition dan SetTitle .
Parameter
Nama aksi asli yang diteruskan ke BindAction.
Nilai yang harus aturuntuk PROPS Gambar.
Memberikan nilai
Contoh Kode
local ContextActionService = game:GetService("ContextActionService")
local ACTION_INSPECT = "Inspect"
local INPUT_INSPECT = Enum.KeyCode.E
local IMAGE_INSPECT = "rbxassetid://1826746856" -- Image of a speech bubble with ? in it
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_INSPECT and inputState == Enum.UserInputState.End then
print("Inspecting")
end
end
-- For touch devices, a button is created on-screen automatically via the 3rd parameter
ContextActionService:BindAction(ACTION_INSPECT, handleAction, true, INPUT_INSPECT)
-- We can use these functions to customize the button:
ContextActionService:SetImage(ACTION_INSPECT, IMAGE_INSPECT)
ContextActionService:SetTitle(ACTION_INSPECT, "Look")
ContextActionService:SetDescription(ACTION_INSPECT, "Inspect something.")
ContextActionService:SetPosition(ACTION_INSPECT, UDim2.new(0, 0, 0, 0))
-- We can manipulate the button directly using ContextActionService:GetButton
local imgButton = ContextActionService:GetButton(ACTION_INSPECT)
if imgButton then -- Remember: non-touch devices won't return anything!
imgButton.ImageColor3 = Color3.new(0.5, 1, 0.5) -- Tint the ImageButton green
end
SetPosition
Metode ini menetapkan posisi tombol sentuh yang dibuat oleh BindAction() . Secara khusus, itu menetapkan GuiObject.Position properti dari ImageButton yang akan dikembalikan oleh 1>
Fungsi ini adalah bagian dari keluarga metode yang menyesuaikan tombol sentuh action. Yang lain dalam keluarga ini termasuk SetImage dan SetTitle .
Parameter
Nama aksi asli yang diteruskan ke BindAction.
Posisi di dalam ContextButtonFrame.
Memberikan nilai
Contoh Kode
local ContextActionService = game:GetService("ContextActionService")
local ACTION_INSPECT = "Inspect"
local INPUT_INSPECT = Enum.KeyCode.E
local IMAGE_INSPECT = "rbxassetid://1826746856" -- Image of a speech bubble with ? in it
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_INSPECT and inputState == Enum.UserInputState.End then
print("Inspecting")
end
end
-- For touch devices, a button is created on-screen automatically via the 3rd parameter
ContextActionService:BindAction(ACTION_INSPECT, handleAction, true, INPUT_INSPECT)
-- We can use these functions to customize the button:
ContextActionService:SetImage(ACTION_INSPECT, IMAGE_INSPECT)
ContextActionService:SetTitle(ACTION_INSPECT, "Look")
ContextActionService:SetDescription(ACTION_INSPECT, "Inspect something.")
ContextActionService:SetPosition(ACTION_INSPECT, UDim2.new(0, 0, 0, 0))
-- We can manipulate the button directly using ContextActionService:GetButton
local imgButton = ContextActionService:GetButton(ACTION_INSPECT)
if imgButton then -- Remember: non-touch devices won't return anything!
imgButton.ImageColor3 = Color3.new(0.5, 1, 0.5) -- Tint the ImageButton green
end
SetTitle
SetTitle akan menetapkan teks yang ditunjukkan oleh tombol sentuh yang dibuat oleh BindAction . Secara khusus, ini menetapkan properti TextLabel.Text
Fungsi ini adalah bagian dari keluarga metode yang menyesuaikan tombol sentuh action. Yang lain dalam keluarga ini termasuk SetImage dan SetPosition .
Parameter
Nama aksi asli yang diteruskan ke BindAction.
Teks untuk ditampilkan pada tombol.
Memberikan nilai
Contoh Kode
local ContextActionService = game:GetService("ContextActionService")
local ACTION_INSPECT = "Inspect"
local INPUT_INSPECT = Enum.KeyCode.E
local IMAGE_INSPECT = "rbxassetid://1826746856" -- Image of a speech bubble with ? in it
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_INSPECT and inputState == Enum.UserInputState.End then
print("Inspecting")
end
end
-- For touch devices, a button is created on-screen automatically via the 3rd parameter
ContextActionService:BindAction(ACTION_INSPECT, handleAction, true, INPUT_INSPECT)
-- We can use these functions to customize the button:
ContextActionService:SetImage(ACTION_INSPECT, IMAGE_INSPECT)
ContextActionService:SetTitle(ACTION_INSPECT, "Look")
ContextActionService:SetDescription(ACTION_INSPECT, "Inspect something.")
ContextActionService:SetPosition(ACTION_INSPECT, UDim2.new(0, 0, 0, 0))
-- We can manipulate the button directly using ContextActionService:GetButton
local imgButton = ContextActionService:GetButton(ACTION_INSPECT)
if imgButton then -- Remember: non-touch devices won't return anything!
imgButton.ImageColor3 = Color3.new(0.5, 1, 0.5) -- Tint the ImageButton green
end
UnbindAction
UnbindAction akan menghapus nama aksi dari input pengguna sehingga fungsi pengelola aksi tidak lagi dianggap. Panggil fungsi ini ketika konteks untuk beberapa aksi tidak lagi berlaku, seperti menutup UI pengguna, keluar dari mobil, atau Class.Tool.Unequipped|unequipping
Fungsi ini tidak akan menghasilkan kesalahan jika tidak ada tindakan terkait dengan string yang diberikan. Menggunakan GetAllBoundActionInfo atau tab "Aksi Bindings" di Konsol Pengembang, Anda dapat mengetahui apa tindakan yang saat ini terikat.
Parameter
Memberikan nilai
Contoh Kode
local ContextActionService = game:GetService("ContextActionService")
local ACTION_RELOAD = "Reload"
local tool = script.Parent
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_RELOAD and inputState == Enum.UserInputState.Begin then
print("Reloading!")
end
end
tool.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_RELOAD, handleAction, true, Enum.KeyCode.R)
end)
tool.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_RELOAD)
end)
UnbindActivate
UnbindActivate menyetel ulang ikatan Class.Tool (atau Class.HopperBin) menggunakan Class.Tool() | Class.UserInputType untuk mengeksekusi Class.Tool (atau 1> Class.HopperBin1> ) menggunakan 4> Class.ContextActionService:BindActivate()
Parameter
Jenis UserInput yang sama sebelumnya dikirim ke BindActivate.
Kode Kunci yang sama asli dikirim ke BindActivate.
Memberikan nilai
UnbindAllActions
Menghapus semua fungsi yang terikat. Tidak ada nama tindakan yang tersisa. Semua tombol sentuh akan dihapus. Jika tombol dibuat secara manual, tidak ada jaminan bahwa itu akan dibersihkan.
Memberikan nilai
GetButton
GetButton mengembalikan ImageButton yang dibuat oleh BindAction jika parameter ketiga itu benar dan perangkat adalah TouchEnabled . Satu-satunya parameter untuk fungsi ini harus sama persis dengan nama aksi yang sebenarnya dikirim ke BindAction.
Jika tidak ada tindakan seperti itu ditautkan atau jika tombol tidak dibuat, fungsi ini mengembalikan nil .
Parameter
Nama aksi asli yang diteruskan ke BindAction.
Memberikan nilai
Sebuah ImageButton dibuat oleh BindAction.