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 mengikat input pengguna ke tindakan kontekstual, atau tindakan yang hanya diaktifkan di bawah beberapa kondisi atau periode waktu.Sebagai contoh, mengizinkan pemain untuk membuka pintu hanya saat dekat.Dalam kode, tindakan hanyalah string (nama action) yang digunakan oleh layanan untuk membedakan antara tindakan unik.String tindakan disediakan ke BindAction dan UnbindAction , di antara fungsi anggota lainnya.Jika dua tindakan terikat pada input yang sama, yang terikat paling baru akan mendapat prioritas.Ketika tindakan terbaru tidak terikat, yang terikat sebelumnya kembali mengambil kendali.Karena layanan ini berurusan dengan input pengguna, Anda hanya dapat menggunakannya di sisi klien LocalScripts .

Konteks dan Tindakan

Sebuah konteks adalah hanya kondisi di mana pemain dapat melakukan beberapa action.Beberapa contoh termasuk memegang Tool , berada seated di dalam mobil atau berdiri dekat pintu.Apapun kasusnya, terserah pada Anda LocalScripts untuk memanggil BindAction ketika konteks dimasukkan dan UnbindAction ketika konteks ditinggalkan.

Sebuah tindakan adalah hanya beberapa input yang dapat dilakukan oleh pemain saat berada dalam konteks itu.Tindakan seperti itu bisa membuka/tutup beberapa menu, memicu tindakan alat sekunder atau mengirim permintaan ke server menggunakan RemoteFunction:InvokeServer() .Tindakan diidentifikasi oleh string unik sebagai parameter pertama dari kedua BindAction dan UnbindAction .String bisa apa saja, tetapi harus mencerminkan tindakan yang dilakukan, bukan input yang digunakan .Misalnya, jangan gunakan "KeyH" sebagai nama tindakan - gunakan "CarHorn" sebagai gantinya.Yang terbaik adalah mendefinisikan tindakan Anda sebagai konstan di bagian atas skrip Anda karena Anda akan menggunakannya di setidaknya tiga tempat berbeda di kode Anda.

Mengikat Aksi Konteksal

Lebih baik menggunakan ContextActionService's BindAction daripada UserInputService.InputBegan untuk sebagian besar kasus.Untuk UserInputService.InputBegan , fungsi terhubung Anda harus memeriksa apakah pemain berada dalam konteks tindakan yang dilakukan.Dalam kebanyakan kasus, ini lebih sulit daripada hanya memanggil fungsi saat konteks dimasukkan/ditinggalkan.Sebagai contoh, jika Anda ingin memiliki tombol H kunci memicu suara klakson mobil saat pemain duduk di dalamnya, pemain mungkin mengetik "halo" di chat atau menggunakan tombol H kunci untuk sesuatu yang lain.Lebih sulit untuk menentukan apakah sesuatu yang lain menggunakan tombol H (seperti obrolan) - mobil mungkin berteriak ketika pemain tidak bermaksud.Jika Anda menggunakan BindAction dan UnbindAction saat pemain memasuki/meninggalkan mobil, ContextActionService akan memastikan bahwa tombol H menekan memicu tindakan honk hanya ketika itu adalah actionyang paling baru terikat.Jika sesuatu yang lain (seperti obrolan) mengambil kendali, Anda tidak perlu khawatir memeriksanya.

Memeriksa Tindakan Terikat

Untuk melihat daftar tindakan dan input terikat mereka, Anda dapat memeriksa tab "Action Bindings" di Konsol Pengembang (F9 saat dalam game).Ini menunjukkan semua binding, termasuk yang dibindungkan oleh skrip inti Roblox dan skrip kamera/kontrol default juga.Ini berguna untuk debugging jika tindakan Anda terikat/dibatalkan pada waktu yang tepat, atau jika tindakan lain mencuri input dari tindakan Anda.Sebagai contoh, jika Anda mencoba untuk mengikat WASD , mungkin kasusnya adalah bahwa skrip gerakan karakter default terikat atas kunci yang sama.Demikian pula, skrip kontrol kamera dapat mencuri input klik kanan jika skrip dijalankan setelah milik Anda.

Input Tanpa Keyboard

Layanan ini sangat berguna untuk mendukung gamepad dan input sentuhan.Untuk input gamepad, Anda mungkin memilih untuk mengikat tombol B ke tindakan yang membawa pengguna kembali ke menu sebelumnya saat mereka memasuki menu lain.Untuk sentuhan, tombol sentuhan di layar dapat digunakan sebagai pengganti tombol tekan kunci: tombol-tombol ini hanya ditampilkan saat tindakan dibindungkan, dan posisi, teks, dan/atau gambar tombol-tombol ini dapat di konfigurasi melalui layanan ini.Mereka agak terbatas dalam jumlah kustomisasi yang disediakan oleh layanan ini; biasanya ide yang lebih baik untuk membuat tombol on-screen Anda sendiri menggunakan ImageButton atau TextButton .

Contoh Kode

This example properly shows how to use ContextActionService in binding user input to a contextual action. The context is the tool being equipped; the action is reloading some weapon. Test this code sample by placing it in a LocalScript parented to a Tool. When the Tool is equipped, a "Reload" action is bound, and when the Tool is unequipped the "Reload" action is unbound. When the player presses R with the Tool equipped, the message "Reloading!" will appear.

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

()

Ikatkan tindakan ke input pengguna yang diberikan fungsi penanganan tindakan.Setelah input yang cocok dilakukan, fungsi penangani tindakan akan dipanggil dengan argumen yang terdaftar di bawah ini.Item daftar masuk yang valid termasuk yang berada di dalam mengikuti: Enum.KeyCode , Enum.UserInputType atau Enum.PlayerActions .Panggil fungsi ini ketika pemain memasuki konteks di mana tindakan dapat dilakukan.Ketika pemain meninggalkan konteks, panggil UnbindAction dengan actionName yang sama.Anda dapat secara manual memanggil fungsi penanganan tindakan dari tindakan dengan menggunakan CallFunction .

Sampel kode di bawah ini menunjukkan bagaimana sebuah Sound bisa menjadi played saat tombol kunci ( H ), gamepad, atau tombol layar sentuh ditekan.


local ContextActionService = game:GetService("ContextActionService")
-- Suara klakson 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 Pengelola Tindakan

Fungsi penangani tindakan dipanggil dengan parameter berikut:


<th>Jenis</th>
<th>Deskripsi</th>
</tr>
<tr>
<td>1</td>
<td><code>string</code></td>
<td>String yang sama yang awalnya dikirim ke BindAction†</td>
</tr>
<tr>
<td>2</td>
<td><code>Enum.UserInputState</code></td>
<td>Status input (Mulai, Perubahan, Akhir atau Batalkan)*</td>
</tr>
<tr>
<td>3</td>
<td><code>Objek Masukan</code></td>
<td>Sebuah objek yang berisi informasi tentang input (berbeda tergantung pada UserInputType)</td>
</tr>
#

† Ini memungkinkan satu fungsi untuk menangani banyak tindakan sekaligus, jika diperlukan.:* Batalkan dikirim jika beberapa input sedang dalam progres dan tindakan lain terikat di atas input yang sedang dalam progres, atau jika tindakan terikat dalam progres berada di unbound.

Tumpukan Pengikatan Tindakan

Bindasi tindakan berperilaku seperti tumpukan: jika dua tindakan terikat pada input pengguna yang sama, bindasi tindakan paling baru akan digunakan.Jika penangan tindakan pengembalian Enum.ContextActionResult.Pass , penangan tindakan terikat terbaru berikutnya akan dipanggil, dan seterusnya sampai penangan menenggelamkan input (dengan mengembalikan nil atau Enum.ContextActionResult.Sink ).Ketika UnbindAction dipanggil, penangani tindakan dihapus dari tumpukan.Perilaku tumpukan ini dapat dihapus menggunakan BindActionAtPriority , di mana parameter prioritas tambahan setelah createTouchButton dapat menggantikan urutan di mana tindakan dibindungkan (lebih tinggi sebelum lebih rendah).

Tombol Sentuh

Selain jenis input, parameter ketiga fungsi ini mengontrol apakah tombol dibuat untuk perangkat TouchEnabled .Setelah kreasitombol sentuhan pertama, tombol ScreenGui bernama "ContextActionGui" ditambahkan ke PlayerGui.Di dalam ScreenGui ada Frame yang disebut "ContextButtonFrame" ditambahkan.Ini adalah dalam bingkai ini di mana ImageButtons untuk tindakan yang terikat dipadati; Anda dapat menggunakan GetButton untuk mengambil kembali tombol seperti itu untuk kustomisasi.

Parameter

actionName: string

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

Nilai Default: ""
functionToBind: function

Fungsi penanganan tindakan, dipanggil dengan parameter berikut saat input terikat diaktifkan: string (actionName), Enum.UserInputState dan sebuah InputObject.

Nilai Default: ""
createTouchButton: boolean

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

Nilai Default: ""
inputTypes: Tuple

Setiap jumlah Enum.KeyCode atau Enum.UserInputType mewakili input yang akan diikat ke action.

Nilai Default: ""

Memberikan nilai

()

Contoh Kode

This example properly shows how to use ContextActionService in binding user input to a contextual action. The context is the tool being equipped; the action is reloading some weapon. Test this code sample by placing it in a LocalScript parented to a Tool. When the Tool is equipped, a "Reload" action is bound, and when the Tool is unequipped the "Reload" action is unbound. When the player presses R with the Tool equipped, the message "Reloading!" will appear.

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)

This code sample uses ContextActionService to bind an action named "BoundAction" to a general action handler function on the F key. Place this in a LocalScript inside StarterPlayerScripts and press F to see the message "Handling action: BoundAction".

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)

This code sample demonstrates how BindAction acts like a stack. It binds two actions, FirstAction (Z, X, and C keys) and SecondAction (Z and X keys) to two action handling functions. The second one will pass on a certain input (the X key).

Both actions use the Z and X keys, however the second handler will pass input only if X is pressed. So, when X is pressed, the second handler is called and then the first. The first action is also bound to the C key, and can be triggered even though the other two inputs are "covered" by the second action.

Test this code out by pasting it into a LocalScript within StarterPlayerScripts, then pressing Z, X and C. Observe which action handlers are called with what actions.

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

()

BindActionAtPriority berperilaku seperti BindAction tetapi juga memungkinkan prioritas untuk ditugaskan ke actionterikat.Jika beberapa tindakan terikat pada input yang sama, fungsi prioritas tertinggi dipanggil terlepas dari urutan di mana tindakan terikat.Dengan kata lain, fungsi ini menggantikan perilaku "stack" normal dari BindAction.

Parameter

actionName: string

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

Nilai Default: ""
functionToBind: function

Fungsi penanganan tindakan, dipanggil dengan parameter berikut saat input terikat diaktifkan: string (actionName), Enum.UserInputState dan sebuah InputObject.

Nilai Default: ""
createTouchButton: boolean

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

Nilai Default: ""
priorityLevel: number

Tingkat prioritas di mana tindakan harus dibindungkan (lebih tinggi dipertimbangkan sebelum lebih rendah).

Nilai Default: ""
inputTypes: Tuple

Setiap jumlah Enum.KeyCode atau Enum.UserInputType yang mewakili input untuk diikat ke action.

Nilai Default: ""

Memberikan nilai

()

Contoh Kode

This code sample demonstrates how ContextActionService:BindActionAtPriority() can be used to bind actions out of order yet still have the same priority levels. Normally, BindAction() would operate on order (last bound action has highest priority), but priority levels override this. You can test this code by pasting it into a Script with RunContext = Client in ReplicatedStorage.

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

()

Ikatkan Enum.KeyCode yang dapat digunakan dengan Enum.UserInputType untuk mengaktifkan ClickDetector peristiwa, Tools , dan GuiButtons .Ketika kunci/tombol yang diberikan ditekan, itu menyebabkan peristiwa Mouse.Button1Down pada mouse yang dikirim ke Tool.Equipped .Ini pada gilirannya memicu acara Tool.Activated jika Tool.ManualActivationOnly tidak ditetapkan ke benar.Untuk input gamepad, fungsi ini dipanggil oleh skrip kontrol default untuk mengikat TombolR2 Enum.KeyCode .

Perhatikan bahwa Enum.UserInputType yang ditentukan harus menjadi Keyboard atau Gamepad1 melalui Gamepad8 untuk menjadi valid.

Parameter

userInputTypeForActivation: Enum.UserInputType

Harus Keyboard atau Gamepad1 melalui Gamepad8.

Nilai Default: ""
keyCodesForActivation: Tuple
Nilai Default: ""

Memberikan nilai

()

GetAllBoundActionInfo

GetAllBoundActioninfo mem返回一個表 yang meng매핑 semua nama tindakan (yang awalnya dikirim ke BindAction ) ke tab yang dikembalikan oleh GetBoundActionInfo ketika dipanggil dengan nama tindakan itu sendiri.Menggunakan fungsi ini, Anda dapat memeriksa semua tindakan yang saat ini terikat.Ini berguna saat mendepbug tingkat prioritas atau perintah tumpukan mereka.


Memberikan nilai

GetBoundActionInfo

GetBoundActionInfo mem返回表 dengan kunci berikut yang menggambarkan tindakan terikat yang diberikan namanya.Untuk mendapatkan informasi yang sama untuk semua tindakan sekaligus, gunakan GetAllBoundActionInfo .


<th>Jenis</th>
<th>Deskripsi</th>
</tr>
<tr>
<td><code>stackOrder</code></td><td>nomor</td>
<td>
Menggambarkan indeks tindakan di atas tumpukan (meningkat)
</td>
</tr>
<tr>
<td><code>prioritasLevel</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>bool</td>
<td>
Menggambarkan apakah tombol sentuh harus dibuat pada <code>Class.UserInputService.TouchEnabled|TouchEnabled</code> perangkat
</td>
</tr>
<tr>
<td><code>jenis input</code></td><td>meja</td>
<td>
Jenis input yang dikirim ke <code>Class.ContextActionService:BindAction()|BindAction</code> untuk mana tindakan ini akan dipicu
</td>
</tr>
<tr>
<td><code>deskripsi</code> †</td><td>string</td>
<td>
Deskripsi tindakan yang 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 sentuhan actionyang ditetapkan oleh <code>Class.ContextActionService:SetImage()|SetImage</code>
</td>
</tr>
Nama

Tingkat prioritas masih akan dimasukkan bahkan jika BindActionAtPriority tidak digunakan - secara default akan menjadi 2000.

† Menunjukkan bahwa bidang ini akan menjadi nil jika metode yang terkait tidak dipanggil untuk actionyang diberikan.

Parameter

actionName: string
Nilai Default: ""

Memberikan nilai

GetCurrentLocalToolIcon

GetCurrentLocalToolIcon akan mengembalikan BackpackItem.TextureId dari Tool saat ini equipped oleh Player , atau nil jika tidak ada Alat seperti itu atau jika pemain kekurangan Character .


Memberikan nilai

Sebuah string konten dari TextureId Alat, atau nil jika tidak dapat ditemukan.

SetDescription

()

SetDescription akan mengatur deskripsi dari tindakan yang dibatasi oleh BindAction .Dalam daftar tindakan yang tersedia, ini akan menjadi teks yang menggambarkan actionyang diberikan.

Meskipun nama mungkin menunjukkan bahwa metode ini terkait dengan keluarga fungsi yang menyesuaikan tombol sentuh untuk tindakan yang membuatnya ( SetTitle , SetImage dan SetPosition ), metode ini tidak mempengaruhi tombol seperti itu.Metode ini hanya menetapkan deskripsi teks dari action, dan tidak lebih.

Parameter

actionName: string

Nama tindakan awalnya dikirim ke BindAction.

Nilai Default: ""
description: string

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

Nilai Default: ""

Memberikan nilai

()

Contoh Kode

This code sample demonstrates binding an "Inspect" action to a touch button created automatically by ContextActionService. The button is customized using SetImage(), SetTitle(), SetDescription() and SetPosition(). The button is further customized by using GetButton() to get a reference to the ImageButton itself and tinting it green by setting ImageButton.ImageColor3.

Paste this code into a LocalScript placed within StarterPlayerScripts to test it. In Studio, be sure to toggle the touch device emulator in order for the button to actually be created.

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

()

Metode ini menetapkan gambar yang ditampilkan di tombol sentuh yang dibuat oleh BindAction().Secara khusus, ia menetapkan properti ImageLabel.Image dari ImageLabel dalam ImageButton yang akan dikembalikan oleh GetButton .Jika tidak ada tindakan terikat seperti itu (misalnyatidak ada yang dikembalikan oleh GetButton), fungsi ini tidak melakukan apa pun dan tidak membuang kesalahan.

Fungsi ini adalah bagian dari keluarga metode yang menyesuaikan tombol sentuh dari action. Lain-lain dalam keluarga ini termasuk SetPosition dan SetTitle .

Parameter

actionName: string

Nama tindakan awalnya dikirim ke BindAction.

Nilai Default: ""
image: string

Nilai yang harus aturke properti Gambar.

Nilai Default: ""

Memberikan nilai

()

Contoh Kode

This code sample demonstrates binding an "Inspect" action to a touch button created automatically by ContextActionService. The button is customized using SetImage(), SetTitle(), SetDescription() and SetPosition(). The button is further customized by using GetButton() to get a reference to the ImageButton itself and tinting it green by setting ImageButton.ImageColor3.

Paste this code into a LocalScript placed within StarterPlayerScripts to test it. In Studio, be sure to toggle the touch device emulator in order for the button to actually be created.

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

()

Metode ini menetapkan posisi tombol sentuh yang dibuat oleh BindAction().Secara khusus, ia menetapkan properti GuiObject.Position dari ImageButton yang akan dikembalikan oleh GetButton .Jika tidak ada tindakan terikat seperti itu (misalnyatidak ada yang dikembalikan oleh GetButton), fungsi ini tidak melakukan apa pun dan tidak membuang kesalahan.

Fungsi ini adalah bagian dari keluarga metode yang menyesuaikan tombol sentuh dari action. Lain-lain dalam keluarga ini termasuk SetImage dan SetTitle .

Parameter

actionName: string

Nama tindakan awalnya dikirim ke BindAction.

Nilai Default: ""
position: UDim2

Posisi dalam Frame Konteks Tombol.

Nilai Default: ""

Memberikan nilai

()

Contoh Kode

This code sample demonstrates binding an "Inspect" action to a touch button created automatically by ContextActionService. The button is customized using SetImage(), SetTitle(), SetDescription() and SetPosition(). The button is further customized by using GetButton() to get a reference to the ImageButton itself and tinting it green by setting ImageButton.ImageColor3.

Paste this code into a LocalScript placed within StarterPlayerScripts to test it. In Studio, be sure to toggle the touch device emulator in order for the button to actually be created.

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

()

SetTitle akan mengatur teks yang ditampilkan pada tombol sentuh yang dibuat oleh BindAction.Secara khusus, ini menetapkan properti TextLabel.Text dari sebuah TextLabel dalam ImageButton yang akan dikembalikan oleh GetButton .Jika tidak ada tindakan terikat seperti itu (misalnyatidak ada yang dikembalikan oleh GetButton), fungsi ini tidak melakukan apa pun dan tidak membuang kesalahan.

Fungsi ini adalah bagian dari keluarga metode yang menyesuaikan tombol sentuh dari action. Lain-lain dalam keluarga ini termasuk SetImage dan SetPosition .

Parameter

actionName: string

Nama tindakan awalnya dikirim ke BindAction.

Nilai Default: ""
title: string

Teks yang akan ditampilkan di tombol.

Nilai Default: ""

Memberikan nilai

()

Contoh Kode

This code sample demonstrates binding an "Inspect" action to a touch button created automatically by ContextActionService. The button is customized using SetImage(), SetTitle(), SetDescription() and SetPosition(). The button is further customized by using GetButton() to get a reference to the ImageButton itself and tinting it green by setting ImageButton.ImageColor3.

Paste this code into a LocalScript placed within StarterPlayerScripts to test it. In Studio, be sure to toggle the touch device emulator in order for the button to actually be created.

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

()

UnbindAction akan melepaskan tindakan dengan nama dari input pengguna sehingga fungsi penangani tindakan tidak lagi dipanggil.Panggil fungsi ini ketika konteks untuk beberapa tindakan tidak lagi berlaku, seperti menutup antarmuka pengguna, keluar dari mobil atau unequipping keluar dari Tool.Lihat BindAction untuk informasi lebih lanjut tentang bagaimana tindakan terikat beroperasi.

Fungsi ini tidak akan melempar kesalahan jika tidak ada tindakan seperti itu yang terikat dengan string yang diberikan.Menggunakan GetAllBoundActionInfo atau tab "Action Bindings" di Konsol Pengembang, Anda dapat mengetahui tindakan apa yang saat ini terikat.

Parameter

actionName: string
Nilai Default: ""

Memberikan nilai

()

Contoh Kode

This example properly shows how to use ContextActionService in binding user input to a contextual action. The context is the tool being equipped; the action is reloading some weapon. Test this code sample by placing it in a LocalScript parented to a Tool. When the Tool is equipped, a "Reload" action is bound, and when the Tool is unequipped the "Reload" action is unbound. When the player presses R with the Tool equipped, the message "Reloading!" will appear.

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

()

UnbindAktifkan melepaskan ikatan Enum.KeyCode yang digunakan dengan Enum.UserInputType untuk mengaktifkan Tool (atau HopperBin ) menggunakan BindActivate .Fungsi ini pada dasarnya membatalkan tindakan yang dilakukan oleh fungsi itu.

Parameter

userInputTypeForActivation: Enum.UserInputType

Jenis Input Pengguna yang sama awalnya dikirim ke BindActivate.

Nilai Default: ""
keyCodeForActivation: Enum.KeyCode

KeyCode yang sama awalnya dikirim ke BindActivate.

Nilai Default: "Unknown"

Memberikan nilai

()

UnbindAllActions

()

Menghapus semua fungsi yang terikat.Tidak ada nama tindakan yang akan tetap.Semua tombol sentuh akan dihapus.Jika tombol dimanipulasi secara manual tidak ada jaminan itu akan dibersihkan.


Memberikan nilai

()

GetButton

Hasil

GetButton mengembalikan ImageButton yang dibuat oleh BindAction jika parameter ketiga adalah benar dan perangkat adalah TouchEnabled .Satunya parameter untuk fungsi ini harus persis cocok dengan nama tindakan yang awalnya dikirim ke BindAction.

Jika tidak ada tindakan seperti itu yang terikat atau jika tombol tidak dibuat, fungsi ini akan mengembalikan nil .

Parameter

actionName: string

Nama tindakan awalnya dikirim ke BindAction.

Nilai Default: ""

Memberikan nilai

Tombol Gambar yang dibuat oleh BindAction.

Acara

LocalToolEquipped

Memicu ketika pemain saat ini memperlengkapi Tool .

Parameter

toolEquipped: Instance

LocalToolUnequipped

Melepaskan api saat pemain saat ini melepaskan Tool .

Parameter

toolUnequipped: Instance