ContextActionService

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tidak Dapat Dibuat
Layanan

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

ContextActionService Tool Reload

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

Acara

Properti

Metode

BindAction

void

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>
bantuanJenisDeskripsi

^ 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

actionName: string

Sebuah string mewakili tindakan yang dilakukan (contohnya "HonkHorn" atau "OpenDoor").

functionToBind: function

Fungsi pengolahan tindakan, yang disebut dengan parameter berikut saat input terikat dipicu: string (actionName), Enum.UserInputState dan sebuah Object Masukan.

createTouchButton: bool

Apakah tombol GUI harus dibuat untuk tindakan pada perangkat masuk sentuh.

inputTypes: Tuple

Apa pun antara Enum.KeyCode atau Enum.UserInputType mewakili input untuk dibindakan ke action.


Memberikan nilai

void

Contoh Kode

ContextActionService Tool Reload

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)
General Action Handler

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)
Stacked Action Handlers

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

void

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

actionName: string

Sebuah string mewakili tindakan yang dilakukan (contohnya "HonkHorn" atau "OpenDoor").

functionToBind: function

Fungsi pengolahan tindakan, yang disebut dengan parameter berikut saat input terikat dipicu: string (actionName), Enum.UserInputState dan sebuah Object Masukan.

createTouchButton: bool

Apakah tombol GUI harus dibuat untuk tindakan pada perangkat masuk sentuh.

priorityLevel: number

Tingkat prioritas di mana tindakan harus dibatasi (lebih tinggi dianggap sebelum lebih rendah).

inputTypes: Tuple

Apa pun jumlah Enum.KeyCode atau Enum.UserInputType mewakili input untuk dibindakan ke action.


Memberikan nilai

void

Contoh Kode

ContextActionService BindAction Priorities

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

void

I

Catat bahwa Enum.UserInputType yang ditentukan harus menjadi Keyboard atau Gamepad1 melalui 1>Gamepad81> untuk menjadi valid.

Parameter

userInputTypeForActivation: Enum.UserInputType

Harus melalui Keyboard atau Gamepad1 melalui Gamepad8.

keyCodesForActivation: Tuple

Memberikan nilai

void

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>
NamaJenisDeskripsi

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

actionName: string

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

void

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

actionName: string

Nama aksi asli yang diteruskan ke BindAction.

description: string

Deskripsi teks dari action, seperti "Honk bel pintu mobil" atau "Buka inventaris".


Memberikan nilai

void

Contoh Kode

ContextActionService Touch Button

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

void

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

actionName: string

Nama aksi asli yang diteruskan ke BindAction.

image: string

Nilai yang harus aturuntuk PROPS Gambar.


Memberikan nilai

void

Contoh Kode

ContextActionService Touch Button

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

void

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

actionName: string

Nama aksi asli yang diteruskan ke BindAction.

position: UDim2

Posisi di dalam ContextButtonFrame.


Memberikan nilai

void

Contoh Kode

ContextActionService Touch Button

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

void

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

actionName: string

Nama aksi asli yang diteruskan ke BindAction.

title: string

Teks untuk ditampilkan pada tombol.


Memberikan nilai

void

Contoh Kode

ContextActionService Touch Button

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

void

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

actionName: string

Memberikan nilai

void

Contoh Kode

ContextActionService Tool Reload

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

void

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

userInputTypeForActivation: Enum.UserInputType

Jenis UserInput yang sama sebelumnya dikirim ke BindActivate.

keyCodeForActivation: Enum.KeyCode

Kode Kunci yang sama asli dikirim ke BindActivate.

Nilai Default: "Unknown"

Memberikan nilai

void

UnbindAllActions

void

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

void

GetButton

Hasil

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

actionName: string

Nama aksi asli yang diteruskan ke BindAction.


Memberikan nilai

Sebuah ImageButton dibuat oleh BindAction.

Acara

LocalToolEquipped

Dibakar saat pemain saat ini melengkapi Class.Tool .

Parameter

toolEquipped: Instance

LocalToolUnequipped

Berapi-api saat pemain saat ini melepaskan peralatan Tool .

Parameter

toolUnequipped: Instance