ContextActionService
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
Kullanıcının yalnızca yakınında bulunduğu durumlarda
Konu ve Eylem
Bir kapsayıcı bir Tool şu anda bir oyuncunun bir aksiyonyapmasına izin veren bir koşul. Birkaç örnek i
Bir eylem basitç
Eylemleri Konteynerle Bağla
Çoğu durumda,
Sınırlı Eylemleri Kontrol
Eylemlerin ve bağlantıların listesini görmek için, "Eylem Bağlantıları" birimini (F9'da oyun içinde) inceleyebilirsiniz. Bu
Klavye Dışındaki Giriş
Bu hizmet, özellikle oyun aracı ve dokunmatik giriş için desteklemek için kullanışlıdır. Oyun aracı için dokunmatik giriş için, kullanıcı başka bir menüye
Kod Örnekleri
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)
Özet
Özellikler
Yöntemler
- BindAction(actionName : string,functionToBind : function,createTouchButton : bool,inputTypes : Tuple):void
Eylem işleyicisi için kullanıcının girdiğini bir eyleme bağlayın.
Class.ContextActionService:BindAction() gibi davranır, ancak ayrıca üstel giriş türleri için bağlantı eylemi için önceliğin atanmasına izin verir (daha yüksek daha düşük).
Bir Enum.KeyCode ile etkinleştirme için özel bir Enum.UserInputType ile bir Tool.Activation ve 1> Class.ClickDetector1> etkinliğini bağlayın.
Tüm bağlantı eylemleri hakkında bir tablo alın (anahtar, BindAction ile verilen isimdir, değer GetBoundActionInfo ile çağrıldığında).
Erişim adının önce BindAction ile geçtiği bağlantı hakkında bilgi alın.
Dokunmatik düğme ile bağlanmış bir eylemin adını verdiğinde, aksiyonaçıklamasını ayarlar.
Eğer actionName tuşu bağlantılı bir aksiyonsahipse, image düğmesinin görüntüsü ayar edilir.
Dokunmatik düğme ile bağlanmış bir eyleğin adını verdiğinde, düğmenin KonteyntButtonFrame içindeki konumunu ayarlar.
Dokunmatik düğme ile bağlanmış bir eylemin ismini verdiğinde, gösterilen metni ayarlar.
Verilen isimden bağlayıcı bir eylemi kaldır.
- UnbindActivate(userInputTypeForActivation : Enum.UserInputType,keyCodeForActivation : Enum.KeyCode):void
Class.Tool.Activation1> ile bağlantı kurarken iletken Enum.UserInputType ile iletken bir Tool.Activation ile bağlantı kurulur.
Tüm bağlı işlevler kaldırılır. Artık bir eylem adı yoktur. Tüm dokunmatik düğmelere erişim kaldırılır.
Yaratılmış bir ImageButton ile bir bound eylemindeki bir Class.ImageButton alınır.
Etkinlikler
Özellikler
Yöntemler
BindAction
Bir eylemi kullanıcının eylem işleme işlevine bağ
Aşağıdaki kod örneği, bir Sound ın bir tuşu (played), oyun padı düğmesi veya dokunmatik ekran düğmesi basılırken nasıl oynanabileceğini gösteriyor.
local ContextActionService = game:GetService("ContextActionService")
-- Bir araba boynuz sesi
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
-- Oyuncu araçta oturduğunda:
ContextActionService:BindAction("HonkHorn", handleAction, true, Enum.KeyCode.H, Enum.KeyCode.ButtonY)
-- Oyuncu dışarı çıktığında:
ContextActionService:UnbindAction("HonkHorn")
Eylem İşleyici Parçaları
Eylem işleyicisi işlevleri aşağıdaki parametrelerle çağrılır:
<tr><td>1</td><td><code>strungu</code></td><td>Eskiden BindAction'a verilen aynı yazılış</td></tr><tr><td>2</td><td><code>Entrüman.KullanıcıGirişiDevleti</code></td><td>Girişin durumu (Başla, Değiştir, Sona Er veya İptal)\*</td></tr><tr><td>3</td><td><code>GirişNesnesi</code></td><td>Giriş hakkında bilgi içeren bir nesne (varsayılan bağlantıya göre UserInputType'a bağlı olarak değişir)</td></tr>
# | Tür | Açıklama |
° Bu, bir işlevin birden fazla eylemi bir anda işleyebilmesini sağlar, gerekirse. *Cancel, bir eylem işlemesi devam ediyorsa veya başka bir eylem bağlandıysa, işlem bağlanmışsa iptal edilir.° Bu, bir işlevin birden fazla eylemi bir anda işleyebilmesini sağlar, gerekirse. *Cancel, bir işlemesi devam ediyorsa veya başka bir eylem bağlandıysa, işlem
Eylem Bağlantıları Yığını
Eylem
Dokunmatik Düğmelere
Giriş tipi dışında, bu işlevin üçüncü parametre kontrolü, bir düğme'nin
Parametreler
Yapılacak eylemi temsil eden bir yol (örneğin "HonkHorn" veya "OpenDoor").
Eylem işleme işlevi, bağlantı girişleri başlatıldığında aşağıdaki parametrelerle çağrılır: string (actionName), Enum.UserInputState ve bir InputObject.
Dokunmatik giriş cihazları için eylem için bir GUI düğmesi oluşturulmalı mıdır.
Eyleme bağlanan girdilerin herhangi bir sayısı. Amount.Code veya Enum.UserInputType
Dönüşler
Kod Örnekleri
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, BindAction gibi davranır, ancak ayrıca bağlanan aksiyonbir öncelik atanabilir. Eğer eylemlerin bağlandığı sırayla düzenlenmişse, yüksek öncelik işlevi BindAction'ın normal "stacks" davranışını geçersiz kılar. Diğer bir deyişle, bu işlev BindAction'ı
Parametreler
Yapılacak eylemi temsil eden bir yol (örneğin "HonkHorn" veya "OpenDoor").
Eylem işleme işlevi, bağlantı girişleri başlatıldığında aşağıdaki parametrelerle çağrılır: string (actionName), Enum.UserInputState ve bir InputObject.
Dokunmatik giriş cihazları için eylem için bir GUI düğmesi oluşturulmalı mıdır.
Eylemin bağlanması gereken öncelik seviyesi (daha düşük seviyede daha yüksek düşünülür).
aksiyonbağlanacak girdileri temsil eden herhangi bir sayıda Enum.KeyCode veya Enum.UserInputType.
Dönüşler
Kod Örnekleri
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
Bir Enum.KeyCode bağlayıcıyı kullanarak bir Enum.UserInputType ile etkinleştirilen ClickDetector etkinliğini etkinleştirir. Bu
Not edin ki Enum.UserInputType belirleneninin Keyboard veya Gamepad1 ile iletişim kurduğu 1> Gamepad81> aracılığıyla geçerli olması gerekir.
Parametreler
Gamepad8'den Keyboard veya Gamepad1 olmalıdır.
Dönüşler
GetAllBoundActionInfo
GetAllBindActioninfo, tüm eylemlerin isimlerini (sorunluk olarak Class.ContextActionService:BindAction()|BindAction) haritasını içeren bir tabloyu Class.ContextActionService:GetBoundActionInfo()|GetBoundActionInfo) çağrıldığında Class.ContextActionService:GetBindActionInfo()|GetBoundActionInfo ile birlikte içeriyor.
Dönüşler
GetBoundActionInfo
GetBoundActionInfo, ismini belirten bağlantı eylemiyle ilgili aşağıdaki anahtarları içeren bir tabloyu döndürür. Tüm eylemler için aynı bilgiyi birden fazla almak için şunları kullanın: GetAllBoundActionInfo .
<tr><td><code>stackOrder</code></td><td>sayı</td><td>Eylemin oluğundaki eylem indeksini açıklar (artırıyor)</td></tr><tr><td><code>öncelikSeviyesi</code> \*</td><td>sayı</td><td>Eylemin <code>Class.ContextActionService:BindActionAtPriority()|öncelik</code> seviyesini açıklar</td></tr><tr><td><code>touchButton oluştur</code></td><td>boolean</td><td>Class.UserInputService.TouchEnabled|TouchEnabled cihazlarında dokunmatik düğme oluşturulup oluşturulmadığını açıklar</td></tr><tr><td><code>输入类型</code></td><td>masa</td><td>Bu eylemi başlatmak için <code>Class.ContextActionService:BindAction()|BindAction</code> ile geçen giriş tipi</td></tr><tr><td><code>açıklama</code> ^</td><td>dizi</td><td>Eylem setinin açıklaması <code>Class.ContextActionService:SetDescription()|SetDescription</code> tarafından ayarlanır</td></tr><tr><td><code>unvan</code> ^</td><td>dizi</td><td>Eylem setinin <code>Class.ContextActionService:SetTitle()|SetTitle</code></td></tr><tr><td><code>görüntü</code> †</td><td>dizi</td><td>aksiyondokunmatik düğmesinin ekran görüntüsü <code>Class.ContextActionService:SetImage()|SetImage</code> tarafından ayarlanır</td></tr>
İsim | Tür | Açıklama |
Görünüm olarak kullanılmazsa bile öncelik seviyesi hala dahil edilir - varsayılan olarak 2000'dir.
° Ayrıntılı yöntem çağrılmadığında bu alanın nil olacağını gösterir.
Parametreler
Dönüşler
GetCurrentLocalToolIcon
GetCurrentLocalToolIcon şu anda BackpackItem.TextureId olan Tool ile iletişim kurar veya equipped eğer öyle bir Alet veya oyuncu eksikse 2>Class.Player2> ile iletişim kurar.
Dönüşler
Araç'ın TextureId'inden bir içerik kaydırma yoksa, biri bulamadıysa.
SetDescription
SetDescription, BindAction ile bağlantılı eylemin açıklamasını ayarlar. Bir listede mevcut eylemlerin açıklaması, verilen aksiyonaçıklayan metin olur.
İsmi, bu yöntemin bir düğmeyi oluşturan işlevlerin ailesine ilişkin olduğunu gösterebilir ( SetTitle , SetImage ve SetPosition ). Bu
Parametreler
Eylemin orijinal olarak BindAction'a verilen adı.
Eylemin bir metin açıklaması, "Arabanın kornasını çal" veya "envanteraç" gibi.
Dönüşler
Kod Örnekleri
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
Bu yöntem, BindAction() tarafından oluşturulan dokunmatik düğme görüntüsünü ayarlar. Özellikle, ImageLabel.Image ö
Bu işlev, aksiyondokunmatik düğmesinin etkinleştirilmesinde kullanılan bir dizi yöntemin bir parçasıdır. Bu ailenin diğer üyeleri aşağıda listelenmiştir. SetPosition ve SetTitle .
Parametreler
Eylemin orijinal olarak BindAction'a verilen adı.
Görüntü özelliğinin ayarlanacağı değer.
Dönüşler
Kod Örnekleri
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
Bu yöntem, BindAction() tarafından oluşturulan bir dokunmatik düğmenin pozisyonunu ayarlar. Özellikle, GuiObject.Position özelliğini, ImageButton 'in oluştur
Bu işlev, aksiyondokunmatik düğmesini özelleştiren bir dizi metodun bir parçasıdır. Bu ailenin diğer üyeleri aşağıda belirtilmiştir. SetImage ve SetTitle .
Parametreler
Eylemin orijinal olarak BindAction'a verilen adı.
Konuşma Kutusu'nun içindeki pozisyon.
Dönüşler
Kod Örnekleri
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, BindAction özelliğini TextLabel.Text içindeki TextLabel özelliğini belirtir. Özellikle, bu, 1>Class.TextLabel1> içindeki
Bu işlev, aksiyondokunmatik düğmesini özelleştiren bir dizi metodun bir parçasıdır. Bu ailenin diğer üyeleri aşağıda belirtilmiştir SetImage ve SetPosition .
Parametreler
Eylemin orijinal olarak BindAction'a verilen adı.
Butonun gösterileceği yazı.
Dönüşler
Kod Örnekleri
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, kullanıcı girdilerinden isim olarak bir eylemi yeniden bağlayacak, böylece eylem elleyici işlevi artık uygulanabilir. Kullanıcı arayüzünü kapatmak gibi bazı eylemlerin iç konteynerini yeniden bağlayın veya Class.Tool.Unequ
Bu işlev olmazsa bir hata atmaz verilen yol bağlantısıyla bağlanmış diziyoksa. GetAllBoundActionInfo veya Geliştirici Konsol'un "Eylem Bağlantıları" tabunda bulabilirsiniz hangi eylemler mevcut.
Parametreler
Dönüşler
Kod Örnekleri
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 unbind'leri bir Enum.KeyCode ile etkinleştirme için kullanılan bir Enum.UserInputType ile bağlantı keser. Bu işlev aslında bu işlevin yapılmasını sağlar. Bu işlevin yapılmasında yapılan eylemleri ger
Parametreler
Eski UserInputType, BindActivate'a gönderildiği gibi gönderildi.
Eskiden BindActivate'a gönderilen aynı KeyCode.
Dönüşler
UnbindAllActions
Bağlanan tüm işlevler kaldırılır. Artık bir eylem adı kalmaz. Tüm dokunmatik düğmelere erişim kaldırılır. Eğer bir düğme manuel olarak değiştirilmişse, temizlenmesi garanti edilmez.
Dönüşler
GetButton
GetButton, ImageButton を oluşturduğu BindAction ile birlikte geri çağırır, eğer cihazın üçüncü parametresi doğruysa ve cihaz TouchEnabled ise. Bu işlevin tek parametri, aksiyonun orijinal olarak BindAction'a g
Eğer böyle bir eylem bağlanmadıysa veya düğme oluşturulmadıysa, bu işlev nil döndürür.
Parametreler
Eylemin orijinal olarak BindAction'a verilen adı.
Dönüşler
BindAction tarafından oluşturulan bir ImageButton.