UserInputService
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
UserInputService bir kullanıcının cihazında mevcut farklı giriş türlerini tespit etmek ve yakalamak için kullanılan bir hizmettir.
Bu hizmetin ana amaçları, deneyimlerin mevcut giriş biçimleriyle ortak çalışmasını sağlamak, bunların sayısını artırmak ve bunların her biriyle ilgili en iyi deneyimi sağlamak içindir. Bunun için bir LocalScript ortak işlevleri yerine getirir ve son kullanıcı için en iyi deneyimi sağlar.
Bu hizmetin bazı kullanımları, kullanıcıların GUI'leri, araçları ve diğer oyun instansları ile etkileşim kurarken kullanıcı girdisini tespit etmektir. Kullanıcı girdisini tespit etmek için hizmet, bir servis etkinliği arayüzü g
Bu hizmet sadece kullanıcı tarafından sağlanan hizmetleri içerir, bu nedenle sadece bir LocalScript veya bir ModuleScript gerektiren bir LocalScript kullanıldığında çalışacaktır. KullanıcıInputService sadece kullanıcının kendi girişini - diğ
Ayrıca bakınız ContextActionService, bir hizmet kişilerin birden fazla girişine işlevler bağlayabilir.
Kod Örnekleri
-- We must get the UserInputService before we can use it
local UserInputService = game:GetService("UserInputService")
-- A sample function providing one usage of InputBegan
local function onInputBegan(input, _gameProcessed)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed!")
end
end
UserInputService.InputBegan:Connect(onInputBegan)
Özet
Özellikler
Kullanıcının cihazının hızlandırıcıya sahip olup olmadığını açıklar.
Bir kullanıcının kullandığı cihazın mevcut bir oyun cihazı olup olmadığını açıklar.
Kullanıcının cihazının bir giroskopa sahip olup olmadığını açıklar.
Kullanıcının cihazının klavye'ye sahip olup olmadığını açıklar.
Kullanıcının fareninin özgür olarak hareket edebileceğini veya kilitli kalabileceğini belirler.
Kullanıcının Mouse 'inin çıkışını ölçeği artırır.
Kullanıcının cihazının bir fare'i olup olmadığını açıklar.
Kullanıcı mouse ikonü olarak kullanılan görüntünün içeriği ID.
Mouse simgesinin görünür olup olmadığını belirler.
Ekran üzerindeki klavyenin konumunu belirler.
Ekran üzerindeki klavyenin boyutunu belirler.
Mevcut bir on-screen klavyenin kullanıcının ekranında görünüp görünmediğini açıklar.
Kullanıcının mevcut cihazının dokunmatik bir ekrana sahip olup olmadığını açıklar.
Kullanıcının bir sanal gerçeklik kulaklıkkullanıyor olup olmadığını gösterir.
Yöntemler
Sunulan Enum.UserInputType oyun konsolunun, verilen Enum.KeyCode ile eşleşen bir düğmeyi desteklediğini döndürür.
Mevcut olarak bağlantıda olan Enum.UserInputType oyun panolarının bir matrisi iade eder.
cihazmevcut hızlandırmasını açıklayan bir InputObject döndürür.
cihazmevcut yer çekimi vektörünü açıklayan bir InputObject döndürür.
Aktif döndürme vektörünü açıklayan bir InputObject ve bir CFrame döndürme ekranı içerir.
Mevcut olarak TextBox olan kliğin odaklandığı yeri içeriği döndürür.
Sunulan Enum.UserInputType "gamepadNum" oyun konsolu ile bağlantı kurulup kurtulduğunu gösterir.
Verilen oyun konsolündeki tüm mevcut girişler için bir InputObjects matrisi döndürür, her girişin son giriş devletini temsil eder.
İstek edilen Enum.KeyCode için bir görüntü döndürür.
Şu anda basılı olan keys ile ilgili bir dizi döndürür.
En son girişle ilgili Enum.UserInputType adlı kullanıcının en son girişine bağlı olanı döndürür.
Mevcut olarak tutulan fare düğmeleriyle eşleşen bir InputObjects diziyi döndürür.
oyuncuMouse ının son render kareindeki pozisyonunu değiştirir. Sadece fare kilitliysa çalışır.
oyuncuMouse ile ilgili mevcut ekran konumunu ekranın sol üst kısmına için döndürür.
GUI navigatori olarak kullanılan gamepads bağlantısını ve etkinleştirilmesini sağlar.
Bir kullanıcının belirli bir Enum.KeyCode 'i girmesi için tıklamalı olan bir dizi döndürür.
Oyunpad ile ilgili <a href="/reference/engine/datumspeicher-keycode.md">Verilen</a> Enum.UserInputType bir matematiksel kodu içerir.
Belirli bir oyun oynatıcında belirli bir düğmeye basıldığını belirler.
Verilen key 'in şu anda basılı tutulup tutulmadığını döndürür.
Verilen mouse button düğmesinin şu anda basılı tutulup tutulmadığını döndürür.
Belirlenen Enum.UserInputType oyunpadının navigasyonu kontrol etmesine izin verildiğinde geri döndürür.
VR kulaklığının kullanıcı tarafından takılan mevcut yönlendirmeye göre CFrame görünümünü gösterir.
Belirli Gamepad navigatorunu hareket edebileceğini ayarlar.
Etkinlikler
Bir kullanıcı bir hızlandırma modülüne sahip bir cihazı hareket ettirdiğinde ateşlendi. Roblox oyununda gerçek dünya cihaz hareketini izlemek için kullanılır.
Açık hızlandırıcıyı olan bir cihazda yer çekiminin gücü değiştiğinde başlatılır - böylece bir mobil cihaz.
Bir kullanıcı döner bir cihazın termometresine sahip bir cihazı döndüğünde ateş edilir.
Bir oyun cihazı klijite bağlandığında ateşlenir. Bağlantıda olan oyun cihazının "gamepadNum"'ini geçer.
Bir oyun cihazından bağlantı kesildiğinde ateşlenir. Bağlantı kesilen oyun cihazının Enum.UserInputType 'ini geçer.
Bir kullanıcı, bir Human-Computer Interface cihazı aracılığıyla etkileşime geçmeye başladığında ateşlenir - bir fare veya oyun konsolu gibi.
Bir kullanıcı, insan-bilgisayar arayüzü cihazı aracılığıyla nasıl etkileşime geçtiğini değiştirdiğinde ateşlendi.
Bir kullanıcının Bir İnsan-Bilgisayar Arayüzü cihazı aracılığıyla etkileşimini durdurduğunda ateşlenir.
Karakterlerinin atlaması için istediğinde her zaman zıplamaeder.
Klientin Enum.UserInputType değiştirildiğinde ateşlenir.
- PointerAction(wheel : number,pan : Vector2,pinch : number,gameProcessedEvent : bool):RBXScriptSignal
Kullanıcının belirli bir işaret eylemi yaptığında ateşlenir (tekerlek, döndür, tabağının üstüne bas).
Class.Toolbar kaybettiğinde kaydedildi.
Class. Hud bir nesneye odaklandığında oluşturulur.
Bir kullanıcının TouchEnabled cihazındaki ekrinden parmaklarını serbest bıraktığında başlatılır - böylece bir mobil cihazın ekranı gibi.
- TouchLongPress(touchPositions : Array,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Kullanıcının aynı ekran pozisyonunda aynı anda en az bir parmak için yaklaşık bir süre tutmasıyla başlatıldı - cep cihazekranı gibi.
Bir kullanıcının parmaklarını bir Dokunmatik cihazda hareket ettirdiğinde ateşlenir - örneğin Apple iPad'i veya iPhone'u veya Google Android telefonu ekranı gibi.
- TouchPan(touchPositions : Array,totalTranslation : Vector2,velocity : Vector2,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Bir kullanıcının bir TouchEnabled cihazında en az bir parmak üzerinde sürüklemesiyle çıktı - örneğin bir mobil cihazın ekranı gibi.
- TouchPinch(touchPositions : Array,scale : number,velocity : number,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Bir kullanıcının parmaklarını bir TouchEnabled cihazına ısırdığında - cep telefonunun ekranı gibi.
- TouchRotate(touchPositions : Array,rotation : number,velocity : number,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Bir kullanıcının iki parmaklarını bir TouchEnabled cihazında döndüğünde ateş eder - bir cep telefonunun ekranı gibi.
Bir kullanıcının parmaklarını bir Dokunmatik cihazda - Apple iPad'i veya iPhone'u veya Google Android telefonu gibi ekranında yerleştirdiğinde ateşlenir.
- TouchSwipe(swipeDirection : Enum.SwipeDirection,numberOfTouches : number,gameProcessedEvent : bool):RBXScriptSignal
Bir kullanıcının parmaklarını bir TouchEnabled cihazında hareket ettirdiğinde ateşlendi - cep telefonunun ekranı gibi.
Bir kullanıcının bir TouchEnabled cihazına dokunduğunda ateşlenir - cep telefonunun ekranı gibi.
Bir kullanıcının bir TouchEnabled cihazına dokunarak oyun dünyasına dokunmasından sonra ateşlenir - bir mobil cihazın ekranı gibi.
Roblox istemcisi'nin penceresinin kullanıcının ekranına odaklanmasını kaybettiğinde ateş eder.
Roblox istemcisi'nin penceresi kullanıcının ekranına odaklanınca ateş eder.
Özellikler
AccelerometerEnabled
Bu özellik, kullanıcının cihazının hızlandırıcıya sahip olup olmadığını açıklar
İvmeölçer, hızı değiştiren çoğu cihazda bulunan bir bileşendir.
Örneğin, aşağıdaki kod özelliği, kullanıcının cihazının hızlandırıcıya sahip olup olmadığını nasıl test edileceğini gösterir.
local UserInputService = game:GetService("UserInputService")local accelerometerEnabled = UserInputService.AccelerometerEnabledif accelerometerEnabled thenprint("Accelerometer enabled!")elseprint("Accelerometer not enabled!")end
Cihazın etkin bir hızlandırıcıya sahipse, onu kullanarak cihaznın hızlandırmasını elde edebilirsiniz UserInputService:GetDeviceAcceleration() işlevini veya UserInputService.DeviceAccelerationChanged etkinliği kullanarak cihazın hızlandırmasını değiştirerek.
As UserInputService sadece kullanıcı tarafındadır, bu özellik sadece bir LocalScript içinde kullanılabilir.
Kod Örnekleri
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local camera = workspace.CurrentCamera
local currentRotation = camera.CFrame -- CFrame.new(Vector3.new(0,0,0), Vector3.new(0,0,0))
local lastInputFrame = nil
local upsideDown = false
task.wait()
local orientationSet = false
local function GravityChanged(gravity)
if not orientationSet then
upsideDown = (gravity.Position.X < -0.5 or gravity.Position.Z > 0.5)
orientationSet = true
end
end
local function RotationChanged(_rotation, rotCFrame)
if orientationSet then
if not lastInputFrame then
lastInputFrame = rotCFrame
end
local delta = rotCFrame * lastInputFrame:inverse()
local x, y, z = delta:ToEulerAnglesXYZ()
if upsideDown then
delta = CFrame.Angles(-x, y, z)
else
delta = CFrame.Angles(x, -y, z)
end
currentRotation = currentRotation * delta
lastInputFrame = rotCFrame
end
end
local function HideCharacter()
for _, limb in pairs(character:GetChildren()) do
if limb:IsA("Part") then
limb.Transparency = 1
end
end
end
if UserInputService.GyroscopeEnabled then
UserInputService.DeviceGravityChanged:Connect(GravityChanged)
UserInputService.DeviceRotationChanged:Connect(RotationChanged)
HideCharacter()
RunService:BindToRenderStep("Camera", Enum.RenderPriority.Camera.Value, function()
camera.CFrame = CFrame.new(head.Position - Vector3.new(0, 8, 10)) * currentRotation
camera.Focus = CFrame.new(currentRotation * Vector3.new(0, 0, -10))
end)
end
GamepadEnabled
Bu özellik, bir kullanıcının kullandığı cihazın bir mevcut oyun cihazı olup olmadığını açıklar. Eğer oyun cihazları mevcutsa, UserInputService:GetConnectedGamepads() kullanarak bağlantılı oyun cihazlarının bir listesini alabilirsiniz.
As UserInputService sadece kullanıcı tarafındadır, bu özellik sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local function getActiveGamepad()
local activeGamepad = nil
local connectedGamepads = UserInputService:GetConnectedGamepads()
if #connectedGamepads > 0 then
for _, gamepad in connectedGamepads do
if activeGamepad == nil or gamepad.Value < activeGamepad.Value then
activeGamepad = gamepad
end
end
end
if activeGamepad == nil then -- Nothing is connected; set up for "Gamepad1"
activeGamepad = Enum.UserInputType.Gamepad1
end
return activeGamepad
end
if UserInputService.GamepadEnabled then
local activeGamepad = getActiveGamepad()
print(activeGamepad)
end
GyroscopeEnabled
Bu özellik, kullanıcının cihazının bir giroskopa sahip olup olmadığını açıklar.
Bir giroskop, yön ve dönme hızını algılayan çoğu cep telefonunun içinde bulunan bir bileşendir.
Bir kullanıcının cihazında bir giroskop varsa, Class.UserInputService:GetDeviceRotation() fonksiyonunu ve Class.UserInputService.DeviceRotationChanged etkinliğini kullanarak oyununuza entegre edebilirsiniz.
local UserInputService = game:GetService("UserInputService")local gyroIsEnabled = UserInputService.GyroscopeEnabledif gyroIsEnabled thenprint("Gyroscope is enabled!")elseprint("Gyroscope is not enabled!")end
As UserInputService sadece kullanıcı tarafındadır, bu özellik sadece bir LocalScript içinde kullanılabilir.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local camera = workspace.CurrentCamera
local currentRotation = camera.CFrame -- CFrame.new(Vector3.new(0,0,0), Vector3.new(0,0,0))
local lastInputFrame = nil
local upsideDown = false
task.wait()
local orientationSet = false
local function GravityChanged(gravity)
if not orientationSet then
upsideDown = (gravity.Position.X < -0.5 or gravity.Position.Z > 0.5)
orientationSet = true
end
end
local function RotationChanged(_rotation, rotCFrame)
if orientationSet then
if not lastInputFrame then
lastInputFrame = rotCFrame
end
local delta = rotCFrame * lastInputFrame:inverse()
local x, y, z = delta:ToEulerAnglesXYZ()
if upsideDown then
delta = CFrame.Angles(-x, y, z)
else
delta = CFrame.Angles(x, -y, z)
end
currentRotation = currentRotation * delta
lastInputFrame = rotCFrame
end
end
local function HideCharacter()
for _, limb in pairs(character:GetChildren()) do
if limb:IsA("Part") then
limb.Transparency = 1
end
end
end
if UserInputService.GyroscopeEnabled then
UserInputService.DeviceGravityChanged:Connect(GravityChanged)
UserInputService.DeviceRotationChanged:Connect(RotationChanged)
HideCharacter()
RunService:BindToRenderStep("Camera", Enum.RenderPriority.Camera.Value, function()
camera.CFrame = CFrame.new(head.Position - Vector3.new(0, 8, 10)) * currentRotation
camera.Focus = CFrame.new(currentRotation * Vector3.new(0, 0, -10))
end)
end
KeyboardEnabled
Bu özellik, kullanıcının cihazının bir klavye'i olup olmadığını açıklar. Bu özellik, kullanıcının cihazının bir klavye'i olduğunda true ve olmadığında false dir.
Kullanıcının mevcut bir klavye sahip olup olmadığını belirlemek için kullanılabilir - bu önemli olabilir, eğer UserInputService:IsKeyDown() veya UserInputService:GetKeysPressed() kullanımını kontrol etmek için klavye girişini kontrol etmek için kullanılabilir.
As UserInputService sadece kullanıcı tarafındadır, bu özellik sadece bir LocalScript içinde kullanılabilir.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
if UserInputService.KeyboardEnabled then
print("The user's device has an available keyboard!")
else
print("The user's device does not have an available keyboard!")
end
MouseBehavior
Bu özellik, kullanıcının fare davranışını Enum.MouseBehavior Envanterine göre ayarlar.Varsayılan değer Ennum.MouseBehavior.Default'dir.
Üç değere ayarlanabilir:
- Varsayılan : Farenin kullanıcının ekranında özgürce hareket etmesine izin verir.
- Kilit Merkeziyesi : Farenin kilitli ve merkezi, kullanıcının ekranının merkezinden hareket edemez.
- LockCurrentPosition : Farenin kilitli olduğu için, kilitlenen pozisyondan hareket edemez ve kullanıcının ekranındaki mevcut pozisyonda kilitlenmiş olarak tutulur.
Bu öğenin değeri, etkinliği takip etmeyi sağlayan etkinliğin hassasiyetini etkilemez. Örneğin, GetMouseDelta aynı Vector2 ekran pozisyonunu piksel olarak, kamera kilitlenipya da hareket edilebilir olup olmadığını kontrol eden
Bu özellik, GuiButton ile Modal aktif olup GuiButton.Visible değilse oyuncunun sağ fare düğmesi aşağıda değilse.
Not et ki, eğer mouse kilitliyse, UserInputService.InputChanged hala oyuncu mouse'ı hareket ettirince ateşlenecek ve oyunun mouse'ını hareket ettirmeye çalıştığı yönüde geçişle olacaktır. Ayrıca, oyuncu oyundan atıldıysa, mouse zorla açılacaktır.
As UserInputService sadece kullanıcı tarafındadır, bu özellik sadece bir LocalScript içinde kullanılabilir.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head", false)
local mouse = player:GetMouse()
local zoomed = false
local camera = game.Workspace.CurrentCamera
local target = nil
local originalProperties = {
FieldOfView = nil,
_CFrame = nil,
MouseBehavior = nil,
MouseDeltaSensitivity = nil,
}
local AngleX, TargetAngleX = 0, 0
local AngleY, TargetAngleY = 0, 0
-- Reset camera back to CFrame and FieldOfView before zoom
local function ResetCamera()
target = nil
camera.CameraType = Enum.CameraType.Custom
camera.CFrame = originalProperties._CFrame
camera.FieldOfView = originalProperties.FieldOfView
UserInputService.MouseBehavior = originalProperties.MouseBehavior
UserInputService.MouseDeltaSensitivity = originalProperties.MouseDeltaSensitivity
end
local function ZoomCamera()
-- Allow camera to be changed by script
camera.CameraType = Enum.CameraType.Scriptable
-- Store camera properties before zoom
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Zoom camera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Lock and slow down mouse
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Reset zoom angles
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Toggle camera zoom/unzoom
local function MouseClick()
if zoomed then
-- Unzoom camera
ResetCamera()
else
-- Zoom in camera
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- anything higher would make looking up and down harder; recommend anything between 0~1
local smoothness = 0.05 -- recommend anything between 0~1
local delta = Vector2.new(input.Delta.x / sensitivity, input.Delta.y / sensitivity) * smoothness
local X = TargetAngleX - delta.y
local Y = TargetAngleY - delta.x
TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X
TargetAngleY = (Y >= 80 and 80) or (Y <= -80 and -80) or Y
AngleX = AngleX + (TargetAngleX - AngleX) * 0.35
AngleY = AngleY + (TargetAngleY - AngleY) * 0.15
camera.CFrame = CFrame.new(head.Position, target)
* CFrame.Angles(0, math.rad(AngleY), 0)
* CFrame.Angles(math.rad(AngleX), 0, 0)
end
end
local function InputBegan(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
MouseClick()
end
end
local function InputChanged(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseMovement then
MouseMoved(input)
end
end
if UserInputService.MouseEnabled then
UserInputService.InputBegan:Connect(InputBegan)
UserInputService.InputChanged:Connect(InputChanged)
end
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end
MouseDeltaSensitivity
Bu özellik, kullanıcının Mouse 'sensitivity'ini belirler.
Hassasiyet, fiziksel mouse hareketinin oyun içindeki mouse hareketine ne kadar çok çevirildiğini belirler. Bu, oyun içindeki fare hareketi izleme etkinliği, örneğin GetMouseDelta gibi fare hareketine kadar hassas olmayı ayarlar.
Bu özellik, fare simgesinin hareketini etkilemez. Ayrıca, Kamerası Hassasiyeti ayarının bulunduğu AyarlarAyarlar menüsündeki 2>Kamera Hassasiyeti2> ayarını da etkilemez, bu da fare hareketinin hassasiyetini ayarlar.
Bu özelliklerin maksimum değeri 10'dur ve minimum değeri 0'dur. Daha düşük bir değer daha düşük hassasiyete eşittir ve daha yüksek bir değer daha yüksek hassasiyete eşittir.
Hassasiyet 0 olduğunda, farenin hareketini izleyen olaylar hala ateşlenir, ancak değişiklik konumunu gösteren tüm parametreler ve özellikler Vector2.new() veya Vector3.new()
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head", false)
local mouse = player:GetMouse()
local zoomed = false
local camera = game.Workspace.CurrentCamera
local target = nil
local originalProperties = {
FieldOfView = nil,
_CFrame = nil,
MouseBehavior = nil,
MouseDeltaSensitivity = nil,
}
local AngleX, TargetAngleX = 0, 0
local AngleY, TargetAngleY = 0, 0
-- Reset camera back to CFrame and FieldOfView before zoom
local function ResetCamera()
target = nil
camera.CameraType = Enum.CameraType.Custom
camera.CFrame = originalProperties._CFrame
camera.FieldOfView = originalProperties.FieldOfView
UserInputService.MouseBehavior = originalProperties.MouseBehavior
UserInputService.MouseDeltaSensitivity = originalProperties.MouseDeltaSensitivity
end
local function ZoomCamera()
-- Allow camera to be changed by script
camera.CameraType = Enum.CameraType.Scriptable
-- Store camera properties before zoom
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Zoom camera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Lock and slow down mouse
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Reset zoom angles
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Toggle camera zoom/unzoom
local function MouseClick()
if zoomed then
-- Unzoom camera
ResetCamera()
else
-- Zoom in camera
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- anything higher would make looking up and down harder; recommend anything between 0~1
local smoothness = 0.05 -- recommend anything between 0~1
local delta = Vector2.new(input.Delta.x / sensitivity, input.Delta.y / sensitivity) * smoothness
local X = TargetAngleX - delta.y
local Y = TargetAngleY - delta.x
TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X
TargetAngleY = (Y >= 80 and 80) or (Y <= -80 and -80) or Y
AngleX = AngleX + (TargetAngleX - AngleX) * 0.35
AngleY = AngleY + (TargetAngleY - AngleY) * 0.15
camera.CFrame = CFrame.new(head.Position, target)
* CFrame.Angles(0, math.rad(AngleY), 0)
* CFrame.Angles(math.rad(AngleX), 0, 0)
end
end
local function InputBegan(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
MouseClick()
end
end
local function InputChanged(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseMovement then
MouseMoved(input)
end
end
if UserInputService.MouseEnabled then
UserInputService.InputBegan:Connect(InputBegan)
UserInputService.InputChanged:Connect(InputChanged)
end
MouseEnabled
Bu özellik, kullanıcının cihazının bir fare'i olup olmadığını açıklar. Bu özellik, kullanıcının cihazına bir fare'i sahip olduğunda true ve sahip olmadığında false dir.
local UserInputService = game:GetService("UserInputService")if UserInputService.MouseEnabled thenprint("The user's device has an available mouse!")elseprint("The user's device does not have an available mouse!")end
Class.UserInputService fare işlevlerini kullanmadan önce bunu kontrol etmek önemlidir.
As UserInputService sadece kullanıcı tarafındadır, bu özellik sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head", false)
local mouse = player:GetMouse()
local zoomed = false
local camera = game.Workspace.CurrentCamera
local target = nil
local originalProperties = {
FieldOfView = nil,
_CFrame = nil,
MouseBehavior = nil,
MouseDeltaSensitivity = nil,
}
local AngleX, TargetAngleX = 0, 0
local AngleY, TargetAngleY = 0, 0
-- Reset camera back to CFrame and FieldOfView before zoom
local function ResetCamera()
target = nil
camera.CameraType = Enum.CameraType.Custom
camera.CFrame = originalProperties._CFrame
camera.FieldOfView = originalProperties.FieldOfView
UserInputService.MouseBehavior = originalProperties.MouseBehavior
UserInputService.MouseDeltaSensitivity = originalProperties.MouseDeltaSensitivity
end
local function ZoomCamera()
-- Allow camera to be changed by script
camera.CameraType = Enum.CameraType.Scriptable
-- Store camera properties before zoom
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Zoom camera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Lock and slow down mouse
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Reset zoom angles
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Toggle camera zoom/unzoom
local function MouseClick()
if zoomed then
-- Unzoom camera
ResetCamera()
else
-- Zoom in camera
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- anything higher would make looking up and down harder; recommend anything between 0~1
local smoothness = 0.05 -- recommend anything between 0~1
local delta = Vector2.new(input.Delta.x / sensitivity, input.Delta.y / sensitivity) * smoothness
local X = TargetAngleX - delta.y
local Y = TargetAngleY - delta.x
TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X
TargetAngleY = (Y >= 80 and 80) or (Y <= -80 and -80) or Y
AngleX = AngleX + (TargetAngleX - AngleX) * 0.35
AngleY = AngleY + (TargetAngleY - AngleY) * 0.15
camera.CFrame = CFrame.new(head.Position, target)
* CFrame.Angles(0, math.rad(AngleY), 0)
* CFrame.Angles(math.rad(AngleX), 0, 0)
end
end
local function InputBegan(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
MouseClick()
end
end
local function InputChanged(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseMovement then
MouseMoved(input)
end
end
if UserInputService.MouseEnabled then
UserInputService.InputBegan:Connect(InputBegan)
UserInputService.InputChanged:Connect(InputChanged)
end
MouseIcon
MouseIcon özelliği, İşaretleyici olarak kullanılan görüntüyü belirler. Eğer boşsa, varsayılan bir ok kullanılır. Bir Class.ImageButton , ImageButton , TextButton veya 2> Class.ProximityPrompt2> ile ilgili baz
Tüm kurumsal gizlemek için, değil ** bir透明 görüntüyü kullanın. Onun yerine, UserInputService.MouseIconEnabled 'ı false ayarlayın.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
-- In order to restore the cursor to what it was set to previously, it will need to be saved to a variable
local savedCursor = nil
local function setTemporaryCursor(cursor: string)
-- Only update the saved cursor if it's not currently saved
if not savedCursor then
savedCursor = UserInputService.MouseIcon
end
UserInputService.MouseIcon = cursor
end
local function clearTemporaryCursor()
-- Only restore the mouse cursor if there's a saved cursor to restore
if savedCursor then
UserInputService.MouseIcon = savedCursor
-- Don't restore the same cursor twice (might overwrite another script)
savedCursor = nil
end
end
setTemporaryCursor("http://www.roblox.com/asset?id=163023520")
print(UserInputService.MouseIcon)
clearTemporaryCursor()
print(UserInputService.MouseIcon)
MouseIconEnabled
Bu özellik, Mouse simgesinin görünür olup olmadığını belirler. true fare'ın simgesi görünür olduğunda, false olmadığında.
Örneğin, aşağıdaki kod kısmı, fare'nin simgegizlemektedir.
local UserInputService = game:GetService("UserInputService")UserInputService.MouseIconEnabled = false
As UserInputService sadece kullanıcı tarafındadır, bu özellik sadece bir LocalScript içinde kullanılabilir.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local mouseInput = {
Enum.UserInputType.MouseButton1,
Enum.UserInputType.MouseButton2,
Enum.UserInputType.MouseButton3,
Enum.UserInputType.MouseMovement,
Enum.UserInputType.MouseWheel,
}
local keyboard = Enum.UserInputType.Keyboard
local function toggleMouse(lastInputType)
if lastInputType == keyboard then
UserInputService.MouseIconEnabled = false
return
end
for _, mouse in pairs(mouseInput) do
if lastInputType == mouse then
UserInputService.MouseIconEnabled = true
return
end
end
end
UserInputService.LastInputTypeChanged:Connect(toggleMouse)
OnScreenKeyboardPosition
Bu özellik, ekran üzerindeki klavyenin piksel olarak konumunu tanımlar. Klavyenin konumu Vector2.new(0, 0) olurken görünmez.
As UserInputService sadece kullanıcı tarafından kullanılabilir, bu özellik sadece bir LocalScript veya Script ile, 1> Class.BaseScript.RunContext|RunContext1> olarak ayarlandığında kullanılabilir.
Ayrıca bakın OnScreenKeyboardVisible ve OnScreenKeyboardSize .
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
print(UserInputService.OnScreenKeyboardPosition)
OnScreenKeyboardSize
Bu özellik, ekranda klavye boyutunu piksel olarak açıklar. Klavyenin boyutu Vector2.new(0, 0) olurken görünmez.
As UserInputService sadece kullanıcı tarafından kullanılabilir, bu özellik sadece bir LocalScript veya Script ile, 1> Class.BaseScript.RunContext|RunContext1> olarak ayarlandığında kullanılabilir.
Ayrıca bakın OnScreenKeyboardVisible ve OnScreenKeyboardPosition .
OnScreenKeyboardVisible
Bu özellik, kullanıcının ekranında mevcut bir on-screen klavye olup olmadığını açıklar.
As UserInputService sadece kullanıcı tarafından kullanılabilir, bu özellik sadece bir LocalScript veya Script ile, 1> Class.BaseScript.RunContext|RunContext1> olarak ayarlandığında kullanılabilir.
Ayrıca bakın OnScreenKeyboardSize ve OnScreenKeyboardPosition .
TouchEnabled
Bu özellik, kullanıcının mevcut cihazının dokunmatik bir ekrana sahip olup olmadığını açıklar.
Özellik, kullanıcının cihazının bir dokunmatik ekrana sahip olup olmadığını belirlemek için kullanılır, böylece dokunmatik etkinlikleri başlatılır. Eğer TouchEnabled açıksa, kullanıcının cihazının dokunmatik ekranına dokunmasını etkinleştiren Class.UserInputService.
Aşağıdaki kod kısmı, kullanıcının cihazının bir dokunmatik ekrana sahip olup olmadığını yazıyor.
local UserInputService = game:GetService("UserInputService")if UserInputService.TouchEnabled thenprint("The user's device has a touchscreen!")elseprint("The user's device does not have a touchscreen!")end
Ayrıca bakınız:
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end
VREnabled
Bu özellik, kullanıcının bir sanal gerçeklik (VR) cihazını kullandığını mı yoksa kullanmadığını mı açıklar?
VR cihazı etkinleştirilmişse, konumunu ve hareketini Class.UserInputService:GetUserCFrame() gibi işlevler aracılığıyla etkileşim kurabilirsiniz. Ayrıca, VR cihazı hareketini kullanarak Class.UserInputService.UserCFrameChanged etkinliğine de reaktebilirsiniz.
local UserInputService = game:GetService("UserInputService")local isUsingVR = UserInputService.VREnabledif isUsingVR thenprint("User is using a VR headset!")elseprint("User is not using a VR headset!")end
As UserInputService sadece kullanıcı tarafındadır, bu özellik sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Kod Örnekleri
local VRService = game:GetService("VRService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local function TrackHead(inputType, value)
if inputType == Enum.UserCFrame.Head then
head.CFrame = value
end
end
if VRService.VREnabled then
-- Set the initial CFrame
head.CFrame = VRService:GetUserCFrame(Enum.UserCFrame.Head)
-- Track VR headset movement and mirror for character's head
VRService.UserCFrameChanged:Connect(TrackHead)
end
Yöntemler
GamepadSupports
Bu işlev, Enum.UserInputType oyun konsoluğunun verilen Enum.KeyCode ile eşleşen bir düğmeyi desteklediğini gösterir. Bu işlev kullanılır görüntülenen oyun konsoluğunun girişlerini doğrulamak için kullanılır.
Hangi Class.UserInputService:GetConnectedGamepads() oyun패드ları bağlı olduğunu belirlemek için, kullanın Class.UserInputService:GetConnectedGamepads() .
As UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Oyunpad'in Enum.UserInputType 'i.
Sorulan düğmenin Enum.KeyCode kodu.
Dönüşler
Sunulan oyun konsolunun, verilen Enum.KeyCode ile eşleşen bir düğmeyi desteklediği.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local ContextActionService = game:GetService("ContextActionService")
local controller = Enum.UserInputType.Gamepad1
local buttonX = Enum.KeyCode.ButtonX
local function isSupported(gamepad, keycode)
return UserInputService:GamepadSupports(gamepad, keycode)
end
local function action()
print("Action")
end
if isSupported(controller, buttonX) then
ContextActionService:BindAction("sample action", action, false, buttonX)
end
GetConnectedGamepads
Bu işlev, mevcut bağlantılı Enum.UserInputType oyun panlarının bir listesini içerir. Eğer oyun panları bağlanmış değilse, bu işlev boş bir işaretleyici olacaktır. Ayrıca, sadece oyun panlarının oyun panları olmasını sağlayan bir Klavye nesnesi de dönecektir. durum, bu etkinliği b
Örneğin, aşağıdaki kod parçası, bağlantılı oyun panolarını alır ve onları connectedGamepads adında bir değişkende saklar.
local UserInputService = game:GetService("UserInputService")local connectedGamepads = UserInputService:GetConnectedGamepads()
Belirli bir oyun cihazının bağlı olduğunu kontrol etmek için UserInputService:GetGamepadConnected() kullanın.
As UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Dönüşler
Kullanıcının cihazına bağlanan oyun panolarıyla eşleşen bir UserInputTypes matrisi.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local function getActiveGamepad()
local activeGamepad = nil
local connectedGamepads = UserInputService:GetConnectedGamepads()
if #connectedGamepads > 0 then
for _, gamepad in connectedGamepads do
if activeGamepad == nil or gamepad.Value < activeGamepad.Value then
activeGamepad = gamepad
end
end
end
if activeGamepad == nil then -- Nothing is connected; set up for "Gamepad1"
activeGamepad = Enum.UserInputType.Gamepad1
end
return activeGamepad
end
if UserInputService.GamepadEnabled then
local activeGamepad = getActiveGamepad()
print(activeGamepad)
end
GetDeviceAcceleration
GetDeviceAcceleration işlevi, kullanıcının cihazının mevcut hızlandırmasını belirler. Aktuel hızlandırmanın açıklamasını içeren bir InputObject döndürür.
Bunun işlemesi için, kullanıcının cihazında etkinleştirilmiş bir hızlandırıcı olmalıdır. Kullanıcının cihazında etkinleştirilmiş bir hızlandırıcı olup olmadığını kontrol etmek için UserInputService.AccelerometerEnabled özelliğini kontrol edebilirsiniz.
Eğer kullanıcının cihazının hızlandırmasını takip etmek istiyorsanız, UserInputService.DeviceAccelerationChanged etkinliğini kullanabilirsiniz.
Yalnızca yerel olarak çalıştığından, sadece bir LocalScript içinde kullanılabilir.
Dönüşler
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local accelerometerEnabled = UserInputService.AccelerometerEnabled
if accelerometerEnabled then
local acceleration = UserInputService:GetDeviceAcceleration().Position
print(acceleration)
else
print("Cannot get device acceleration because device does not have an enabled accelerometer!")
end
GetDeviceGravity
Bu işlev, InputObject ile cihazın mevcut yer çekimi vektörünü açıklar.
Yer çekimi vektörü, cihazın gerçek dünya çekimi gücüne kıyasla cihazın yönünü belirler. durum, bir cihaz mükemmel olarak dik (portre) ise, kıyaslama kuvveti Datatype.Vector3|Vector3
Bu işlev, kullanıcının cihazını etkileme veya kontrol etme için oyun içindeki çekim veya kontrolü etkilemek veya bir top gibi oyun içindeki nesneleri hareket ettirmek için kullanılabilir.
Yer çekimi sadece etkin bir giroskop sahip olan oyuncular için izlenir - böylece bir mobil cihaz.
Bir kullanıcının cihazının düzenli olarak kullanılabilir bir giroskopa sahip olup olmadığını kontrol etmek için, UserInputService.GyroscopeEnabled değerine bakın. Eğer giroskopa sahipse, kullanıcının cihazındaki yer çekimi gücü değiştiğinde kullanıcıyı izley
As UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Dönüşler
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local bubble = script.Parent:WaitForChild("Bubble")
local camera = workspace.CurrentCamera
camera.CameraType = Enum.CameraType.Scriptable
camera.CFrame = CFrame.new(0, 20, 0) * CFrame.Angles(-math.pi / 2, 0, 0)
if UserInputService.GyroscopeEnabled then
-- Bind event to when gyroscope detects change
UserInputService.DeviceGravityChanged:Connect(function(accel)
-- Move the bubble in the world based on the gyroscope data
bubble.Position = Vector3.new(-8 * accel.Position.X, 1.8, -8 * accel.Position.Z)
end)
end
GetDeviceRotation
Bu işlev bir InputObject ve bir CFrame döndürücü vektörü olarak geri döndürür.
Bu bir İçe aktarma nesnesi ile başlatılır. Pozisyon özelliği, giriş nesnesinin Enum.InputType.Gyroscope ı, her yerel cihaz eksenindeki toplam dönmeyi takib eden bir En.InputType|En.InputType.Gyroscope ın bir parçasıdır.
Cihaz dönme sadece gyroscope ile takip edilebilir.
Bu işlev yerel olarak çalıştığından sadece bir LocalScript içinde kullanılabilir.
Dönüşler
İki özelliği olan bir tupla:
- Delta özelliği, son olarak gerçekleşen dönme miktarını açıklar
- CFrame, cihazın varsayılan referans çerçevesiyle ilgili mevcut dönme eğrisidir.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local gyroEnabled = UserInputService:GyroscopeEnabled()
if gyroEnabled then
local _inputObj, cframe = UserInputService:GetDeviceRotation()
print("CFrame: {", cframe, "}")
else
print("Cannot get device rotation because device does not have an enabled gyroscope!")
end
GetFocusedTextBox
Bu işlev, TextBox ile ilgili olarak, mevcut olarak odaklanan klienin üzerinde duranır. Bir TextBox, kullanıcı tarafından manuel olarak seçilebilir veya seçim zorunludur kullanılır TextBox:CaptureFocus() işlevi. Eğer hiçbir TextBox seçilmezse, bu işlev nil ile dönecektir.
As UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Dönüşler
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local jumpKey = Enum.KeyCode.J
local isJumping = false
local function InputBegan(input, _gameProcessedEvent)
local TextBoxFocused = UserInputService:GetFocusedTextBox()
-- Ignore input event if player is focusing on a TextBox
if TextBoxFocused then
return
end
-- Make player jump when user presses jumpKey Key on Keyboard
if input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == jumpKey then
if not isJumping then
isJumping = true
humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
end
end
local function StateChanged(_oldState, newState)
-- Prevent player from jumping again using jumpKey if already jumping
if newState == Enum.HumanoidStateType.Jumping then
isJumping = true
-- Allow player to jump again after landing
elseif newState == Enum.HumanoidStateType.Landed then
isJumping = false
end
end
UserInputService.InputBegan:Connect(InputBegan)
humanoid.StateChanged:Connect(StateChanged)
GetGamepadConnected
Bu işlev, Enum.UserInputType ile sağlanan bir oyun cihazının müşteriye bağlı olup olmadığını döndürür.
Bu, 'Gamepad1' gibi belirli bir oyun cihazının kliğe bağlı olduğunu kontrol etmek için kullanılabilir.
Tüm bağlantılı oyun panolarının bir listesini almak için şunu kullanın: UserInputService:GetConnectedGamepads() .
As UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Oyunpadının Enum.UserInputType kısmı.
Dönüşler
Entrance Paneli ile eşleşen bir oyun cihazının bağlantılı olup olmadığı.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local isConnected = UserInputService:GetGamepadConnected(Enum.UserInputType.Gamepad1)
if isConnected then
print("Gamepad1 is connected to the client")
else
print("Gamepad1 is not connected to the client")
end
GetGamepadState
Bu işlev, InputObjects verilen Enum.UserInputType oyun konsolündeki tüm mevcut girişler için bir matris döndürür, her girişin son giriş devletini temsil eder.
Bağlantılı oyun panolarının UserInputTypes 'ini bulmak için kullanın UserInputService:GetConnectedGamepads() .
Bu işlev yalnızca yerel olarak çalıştığından sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Oyunpad ile eşdeğer olan Enum.UserInputType .
Dönüşler
Class.InputObject|InputObjects ile verilen oyunpad için mevcut tüm girişlerin durumunu temsil eden bir matris.
GetImageForKeyCode
Bu yöntem istenen Enum.KeyCode alır ve mevcut olarak bağlantılı oyunpad cihazı için ilişkili görüntüyü gösterir (Xbox, PlayStation ve Windows için sınırlıdır). Bu, bağlantı kontrolcüsü bir Xbox One kontrolcüsü ise kullanı
Parametreler
İlişkili görüntü alınacak Enum.KeyCode için.
Dönüşler
Döndürülen görüntü varlık kimliği.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local imageLabel = script.Parent
local key = Enum.KeyCode.ButtonA
local mappedIconImage = UserInputService:GetImageForKeyCode(key)
imageLabel.Image = mappedIconImage
GetKeysPressed
Bu işlev, InputObjects ile ilgili bir dizi göndermeyi içerir.
Bu matris bir dizi içinde gezinti yaparak, şu anda hangi tuşların basıldığını belirlemek için InputObject.KeyCode değerleri kullanılabilir.
Belirli bir tuşa basıldığını kontrol etmek için UserInputService:IsKeyDown() kullanın.
As UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Dönüşler
Mevcut anahtarlarla bağlantılı InputObjects bir matrisi.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local actionKey = Enum.KeyCode.LeftShift
local canJump = true
local canDoubleJump = false
local function jumpRequest()
local keysPressed = UserInputService:GetKeysPressed()
for _, key in ipairs(keysPressed) do
if key.KeyCode == actionKey and canJump then
canJump = false
canDoubleJump = true
end
end
end
local function stateChanged(oldState, newState)
-- Double jump during freefall if able to
if oldState == Enum.HumanoidStateType.Jumping and newState == Enum.HumanoidStateType.Freefall and canDoubleJump then
canDoubleJump = false
task.wait(0.2)
humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
-- Allow player to jump again after they land
if oldState == Enum.HumanoidStateType.Freefall and newState == Enum.HumanoidStateType.Landed then
canJump = true
end
end
UserInputService.JumpRequest:Connect(jumpRequest)
humanoid.StateChanged:Connect(stateChanged)
GetLastInputType
Bu işlev, kullanıcının en son girdi ile ilgili 'Radius.UserInputType'i döndürür.
Örneğin, kullanıcının önceki girişi boşluk çubuğuna basıyorsa, Enum.UserInputType döndürülecekti.
Class.UserInputService.LastInputTypeChanged etkinliği, kullanıcının kullandığı son Enum.UserInputType 'in değiştirilmiş olduğunu takip etmek için kullanılabilir.
As UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Dönüşler
En son girişle ilgili Enum.UserInputType kullanıcının.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local lastInput = UserInputService:GetLastInputType()
if lastInput == Enum.UserInputType.Keyboard then
print("Most recent input was via keyboard")
end
GetMouseButtonsPressed
Bu işlev, InputObjects ile eşdeğer bir matrisi döndürür.
Bu işlev tarafından izlenen fare düğmeleri şunları içerir:
<tr><td>MouseButton1</td><td>Sol fare butonu.</td></tr><tr><td>MouseButton2</td><td>Sağ fare butonu.</td></tr><tr><td>MouseButton3</td><td>Orta fare düğmesi.</td></tr>
İsim | Açıklama |
---|
Eğer işlev çağrıldığında kullanıcı herhangi bir fare düğmesine basmıyorsa, boş bir matris döndürür.
As UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Dönüşler
Mevcut olarak tutulan fare düğmelere eşdeğer olan bir matris.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
-- InputBegan is a UserInputService event that fires when the player
-- begins interacting via a Human-User input device
UserInputService.InputBegan:Connect(function(_input, _gameProcessedEvent)
-- Returns an array of the pressed MouseButtons
local buttons = UserInputService:GetMouseButtonsPressed()
local m1Pressed, m2Pressed = false, false
for _, button in pairs(buttons) do
if button.UserInputType.Name == "MouseButton1" then
print("MouseButton1 is pressed")
m1Pressed = true
end
if button.UserInputType.Name == "MouseButton2" then
print("MouseButton2 is pressed")
m2Pressed = true
end
if m1Pressed and m2Pressed then
print("Both mouse buttons are pressed")
end
end
end)
GetMouseDelta
Bu işlev, oyuncunun Mouse ının son render kareti olarak ortaya çıkan değişikliği, piksel olarak, iade eder. Bu işlev sadece, mouse'ın Vector2 özelliği kullanılarak kilitlenmiş olması durumunda çal
Ayarlarda belirlenen fare hassasiyeti, UserInputService.MouseDeltaSensitivity ve sonuç üzerinde etkisi olacaktır.
As UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Dönüşler
Farenin hareketini değiştirir.
Kod Örnekleri
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local function OnRenderStep()
local delta = UserInputService:GetMouseDelta()
print("The mouse has moved", delta, "since the last step.")
end
RunService:BindToRenderStep("MeasureMouseMovement", Enum.RenderPriority.Input.Value, OnRenderStep)
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end
GetMouseLocation
Bu işlev, oyuncunun Vector2 ile ilgili mevcut ekran konumunu temsil eden bir Mouse döndürür. Bu, oyuncunun GUI ile ilgili mevcut yerleşik 2> Class.GuiObject|GUI2> içine dahil edilmez.
Eğer farenin işaretleyici konumu offscreen veya oyuncunun cihazında faren yoksa, döndürilen değer belirlenemeyecektir.
As UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Dönüşler
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local gui = script.Parent
local screenGui = gui.Parent
screenGui.IgnoreGuiInset = true
local function moveGuiToMouse()
local mouseLocation = UserInputService:GetMouseLocation()
gui.Position = UDim2.fromOffset(mouseLocation.X, mouseLocation.Y)
end
moveGuiToMouse()
RunService:BindToRenderStep("moveGuiToMouse", 1, moveGuiToMouse)
GetNavigationGamepads
Bu işlev, GUI navigasyon için bağlantılı ve etkinleştirilmiş bir dizi oyun aracı döndürür. Bu liste, öncelik sırası olarak azalır, yani herhangi bir oyun aracının navigasyon kontrolüne sahip olması gerektiğini belirlemek için itilir.
Bir bağlantılı oyun cihazı bir navigasyon oyun cihazı olduğunu belirtir. Bu, navigasyon denetimleretkilemez.
Class.UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
- UserInputService:SetNavigationGamepad() , bir GUI navigasyon için bir gamepad'i etkinleştirmek veya devre dışı bırakmak için kullanılır
- UserInputService:IsNavigationGamepad() , bir oyun konsolunun GUI navigasyonu için etkinleştirilip etkinleştirilmediğini doğrulamak için
- UserInputService:GetConnectedGamepads() , tüm oyun panolarının bağlantısını GUI navigasyon kontrolüne bağlı olarak geri vermek için
Dönüşler
GUI navigasyonu için kullanılan bir UserInputTypes matrisi.
GetStringForKeyCode
GetStringForKeyCode bir kullanıcının bir Enum.KeyCode girmeye çalıştığını temsil eden bir yuva yuvarlak gösterir. Key kodlarının bir modifiere ihtiyacı olan yuva yuvarlaklarını korumak için klavye büyüklüğünde gösterilir. Aşağıdaki örnekler için daha fazla açı
Roblox'u bir QWERTY klavye düzeniyle kullanırken, klavye kodları eşdeğer QWERTY pozisyonlarına harap edilir
local UserInputService = game:GetService("UserInputService")local textLabel = script.Parentlocal mapKey = Enum.KeyCode.MtextLabel.Text = "Press " .. UserInputService:GetStringForKeyCode(mapKey) .. " to open the map"
QWERTY Klavye Örnekleri
<tbody><tr><td><code>Enum.KeyCode.Q</code></td><td><code>Q</code></td></tr><tr><td><code>Enum.KeyCode.W</code></td><td><code>W</code></td></tr><tr><td><code>Enum.KeyCode.Equals</code></td><td><code>=</code></td></tr><tr><td><code>Enum.KeyCode.At</code></td><td><code>2</code> çünkü <code>@</code> Shift ile yazılmıştır <kbd>2</kbd></td></tr></tbody>
Anahtar Kodu | Değerini Geri Ver |
---|
AZERTY Klavye Örnekleri
<tbody><tr><td><code>Enum.KeyCode.Q</code></td><td><code>bir</code></td></tr><tr><td><code>Enum.KeyCode.W</code></td><td><code>Z</code></td></tr><tr><td><code>Enum.KeyCode.Equals</code></td><td><code>=</code></td></tr><tr><td><code>Enum.KeyCode.At</code></td><td><code>É</code></td></tr></tbody>
Anahtar Kodu | Değerini Geri Ver |
---|
Gamepad Kullanımı
GetStringForKeyCode() 연결된 en son oyun konsolü için Enum.KeyCode içerik haritasını döndürür. Eğer bağlanan kontrolör desteklenmiyorsa, işlev kodbağlı olarak geçerli olarak dönüştürür.
Aşağıdaki örnek, özelleştirilmiş varlıkları ButtonA için nasıl haritaleyebileceğinizi gösterir:
local UserInputService = game:GetService("UserInputService")local imageLabel = script.Parentlocal key = Enum.KeyCode.ButtonAlocal mappings = {ButtonA = "rbxasset://BUTTON_A_ASSET", -- Replace with the desired ButtonA assetButtonCross = "rbxasset://BUTTON_CROSS_ASSET" -- Replace with the desired ButtonCross asset}local mappedKey = UserInputService:GetStringForKeyCode(key)local image = mappings[mappedKey]imageLabel.Image = image
Gamepad Haritası
Yönlendirme klavye kodları cihaz üzerinde herhangi bir farkı yoktur. Enum.KeyCode.ButtonSelect 'in bazı durumlarda kullanıcıların doğru düğmelere gördüğünden emin olmak için hafif farklı davranışı vardır. Kullanıcıların doğru düğmelere gördüğünden emin olmak için PlayStation haritalarının her ikisini de kullanın.
<tbody><tr><td><code>Enum.KeyCode.ButtonA</code></td><td><code>ButonKavşağı</code></td><td><code>ButonA</code></td></tr><tr><td><code>Enum.KeyCode.ButtonB</code></td><td><code>Buton Çemberi</code></td><td><code>ButonB</code></td></tr><tr><td><code>Enum.KeyCode.ButtonX</code></td><td><code>Buton Karesi</code></td><td><code>ButonX</code></td></tr><tr><td><code>Enum.KeyCode.ButtonY</code></td><td><code>ButonTriangle</code></td><td><code>ButonY</code></td></tr><tr><td><code>Enum.KeyCode.ButtonL1</code></td><td><code>ButonL1</code></td><td><code>ButonLB</code></td></tr><tr><td><code>Enum.KeyCode.ButtonL2.</code></td><td><code>ButonL2</code></td><td><code>ButonLT</code></td></tr><tr><td><code>Enum.KeyCode.ButtonL3</code></td><td><code>ButonL3</code></td><td><code>ButonLS</code></td></tr><tr><td><code>Enum.KeyCode.ButtonR1</code></td><td><code>ButonR1</code></td><td><code>ButonRB</code></td></tr><tr><td><code>Enum.KeyCode.ButtonR2</code></td><td><code>ButonR2</code></td><td><code>ButonRT</code></td></tr><tr><td><code>Enum.KeyCode.ButtonR3</code></td><td><code>ButonR3</code></td><td><code>ButonRS</code></td></tr><tr><td><code>Envanter.KeyCode.ButtonStart</code></td><td><code>ButonSeçenekleri</code></td><td><code>Buton Başlangıcı</code></td></tr><tr><td><code>Envanter.KeyCode.ButtonSelect</code></td><td><code>ButonTouchpad</code> ve <code>ButtonShare</code></td><td><code>ButonSeçimi</code></td></tr></tbody>
Anahtar Kodu | PlayStation Dönüş Değeri | Xbox Dönüş Değeri |
---|
Anahtar Kodlar için Sistem Görüntüleri
Bir Enum.KeyCode kullanıcı arayüzünde bir ImageLabel gibi daha iyi temsil edilebilen bir image olarak kullanırken, aşağıdaki miras ikonlarını kullanabilirsiniz. Ancak, Xbox ve PlayStation kontrolörü ikonlarınızı almak için daha
<tbody><tr><td><code>Enum.KeyCode.ButtonX</code></td><td><img src="../../../assets/scripting/controls/xboxX.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/xboxX.png</code></td></tr><tr><td><code>Enum.KeyCode.ButtonY</code></td><td><img src="../../../assets/scripting/controls/xboxY.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/xboxY.png</code></td></tr><tr><td><code>Enum.KeyCode.ButtonA</code></td><td><img src="../../../assets/scripting/controls/xboxA.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/xboxA.png</code></td></tr><tr><td><code>Enum.KeyCode.ButtonB</code></td><td><img src="../../../assets/scripting/controls/xboxB.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/xboxB.png</code></td></tr><tr><td><code>Envanter.KeyCode.DPadLeft</code></td><td><img src="../../../assets/scripting/controls/dpadLeft.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/dpadLeft.png</code></td></tr><tr><td><code>Envanter.KeyCode.DPadRight</code></td><td><img src="../../../assets/scripting/controls/dpadRight.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/dpadRight.png</code></td></tr><tr><td><code>Envanter.KeyCode.DPadUp</code></td><td><img src="../../../assets/scripting/controls/dpadUp.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/dpadUp.png</code></td></tr><tr><td><code>Envanter.KeyCode.DPadDown</code></td><td><img src="../../../assets/scripting/controls/dpadDown.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/dpadDown.png</code></td></tr><tr><td><code>Envanter.KeyCode.ButtonSelect</code></td><td><img src="../../../assets/scripting/controls/xboxView.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/xboxView.png</code></td></tr><tr><td><code>Envanter.KeyCode.ButtonStart</code></td><td><img src="../../../assets/scripting/controls/xboxmenu.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/xboxmenu.png</code></td></tr><tr><td><code>Enum.KeyCode.ButtonL1</code></td><td><img src="../../../assets/scripting/controls/xboxLB.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/xboxLB.png</code></td></tr><tr><td><code>Enum.KeyCode.ButtonR1</code></td><td><img src="../../../assets/scripting/controls/xboxRB.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/xboxRB.png</code></td></tr><tr><td><code>Enum.KeyCode.ButtonL2.</code></td><td><img src="../../../assets/scripting/controls/xboxLT.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/xboxLT.png</code></td></tr><tr><td><code>Enum.KeyCode.ButtonR2</code></td><td><img src="../../../assets/scripting/controls/xboxRT.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/xboxRT.png</code></td></tr><tr><td><code>Enum.KeyCode.ButtonL3</code></td><td><img src="../../../assets/scripting/controls/xboxLS.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/xboxLS.png</code></td></tr><tr><td><code>Enum.KeyCode.ButtonR3</code></td><td><img src="../../../assets/scripting/controls/xboxRS.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/xboxRS.png</code></td></tr><tr><td><code>Enum.KeyCode.Thumbstick1</code></td><td><img src="../../../assets/scripting/controls/xboxLSDirectional.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/xboxLSDirectional.png</code></td></tr><tr><td><code>Enum.KeyCode.Thumbstick2</code></td><td><img src="../../../assets/scripting/controls/xboxRSDirectional.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/xboxRSDirectional.png</code></td></tr><tr><td><code>Envanter.KeyCode.Backspace</code></td><td><img src="../../../assets/scripting/controls/backspace.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/backspace.png</code></td></tr><tr><td><code>Envanter.KeyCode.Return</code></td><td><img src="../../../assets/scripting/controls/return.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/return.png</code></td></tr><tr><td><code>enum.keycode.左Shift</code></td><td><img src="../../../assets/scripting/controls/shift.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/shift.png</code></td></tr><tr><td><code>Enu.KeyCode.RightShift</code></td><td><img src="../../../assets/scripting/controls/shift.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/shift.png</code></td></tr><tr><td><code>Envanter.KeyCode.Tab</code></td><td><img src="../../../assets/scripting/controls/tab.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/tab.png</code></td></tr><tr><td><code>En İyi Şey</code></td><td><img src="../../../assets/scripting/controls/apostrophe.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/apostrophe.png</code></td></tr><tr><td><code>Envanter.KeyCode.Comma</code></td><td><img src="../../../assets/scripting/controls/comma.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/comma.png</code></td></tr><tr><td><code>Envanter.KeyCode.Backquote</code></td><td><img src="../../../assets/scripting/controls/graveaccent.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/graveaccent.png</code></td></tr><tr><td><code>Envanter.KeyCode.Period</code></td><td><img src="../../../assets/scripting/controls/period.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/期間.png</code></td></tr><tr><td><code>enum.keycode.space</code></td><td><img src="../../../assets/scripting/controls/spacebar.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/spacebar.png</code></td></tr></tbody>
Anahtar Kodu | Görüntü | Varlık Kimliği |
---|
Parametreler
Dönüşler
GetSupportedGamepadKeyCodes
Bu işlev, Gamepad ile eşleştirilen Entrance.KeyCode|KeyCodes bir matrisi içerir.
Bu işlev, bağlantılı bir oyun cihazı tarafından desteklenen ve desteklenmediği KeyCodes'ı belirlemek için kullanılabilir. İletişim bir oyun cihazı tarafından desteklenen bir KeyCodes'ı belirlemek için UserInputService:GamepadSupports() kullanın.
Eğer mevcut değil veya bağlantısız bir oyun konsolu üzerinde çağrılırsa, bu işlev boş bir matris döndürür.
As UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Oyunpad'in Enum.UserInputType 'i.
Dönüşler
Amount.Players.KeyCode|KeyCodes ile desteklenen bir dizi KeyCode|KeyCodes .
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local ContextActionService = game:GetService("ContextActionService")
local function actionHandler(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print("Action Handler: " .. actionName)
print(inputObject)
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
local navGamepads = UserInputService:GetNavigationGamepads()
for _, gamepad in pairs(navGamepads) do
local supportedKeyCodes = UserInputService:GetSupportedGamepadKeyCodes(gamepad)
for _, keycode in pairs(supportedKeyCodes) do
if keycode == Enum.KeyCode.ButtonX then
ContextActionService:BindAction("SampleAction", actionHandler, false, Enum.KeyCode.ButtonX)
end
if keycode == Enum.KeyCode.X then
ContextActionService:BindAction("SampleAction", actionHandler, false, Enum.KeyCode.X)
end
end
end
IsGamepadButtonDown
Bu işlev, belirli bir oyunpad'da belirli bir düğmeye basıldığını kontrol eder. true döndürür gamepad , aksi takdirde geri döndürür false.
Geçerli Kullanıcı Girişleri Türleri
Belirlenen oyun cihazı aşağıdaki UserInputType枚 değerlerinden biri olmalıdır:
<tr><td>Entrüman.KullanıcıGirişiTipi.Gamepad1-8</td></tr>
İsim |
---|
Geçerli KeyCodes
Belirlenen düğme, aşağıdaki KeyCodes열inde bir değer olmalıdır:
<tr><td>Envanter.KeyCode.ButtonX</td></tr><tr><td>Liste.KeyCode.ButtonY</td></tr><tr><td>Envanter.KeyCode.ButtonA</td></tr><tr><td>Envanter.KeyCode.ButtonB</td></tr><tr><td>Envanter Kodu Butonu R1</td></tr><tr><td>Liste.KeyCode.ButtonL1</td></tr><tr><td>Liste.KeyCode.ButtonR2</td></tr><tr><td>Envanter Kodu Butonu L2</td></tr><tr><td>Liste.KeyCode.ButtonR3</td></tr><tr><td>Liste.KeyCode.ButtonL3</td></tr><tr><td>Envanter.KeyCode.ButtonStart</td></tr><tr><td>Envanter.KeyCode.ButtonSelect</td></tr><tr><td>Envanter.KeyCode.DPadLeft</td></tr><tr><td>Envanter.KeyCode.DPadRight</td></tr><tr><td>Envanter.KeyCode.DPadUp</td></tr><tr><td>Envanter.KeyCode.DPadDown</td></tr>
İsim |
---|
Örneğin, A gibi belirli bir düğmeye basılı tutulup tutulmadığını kontrol etmek için kullanılabilir.
local UserInputService = game:GetService("UserInputService")local button = Enum.KeyCode.ButtonAlocal gamepad = Enum.UserInputType.Gamepad1local isButtonHeld = UserInputService:IsGamepadButtonDown(gamepad, button)
Class.UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
- UserInputService:IsKeyDown() - Aynı kullanımla farklı bir yöntem: Bir key ile bir keyboard üzerinde basıldığını kontrol etmek için.
Parametreler
UserInputType of the given gamepad'in kullanıcı girişi.
Belirlenen düğmenin Enum.KeyCode kodu.
Dönüşler
Belirlenen oyun konsolu düğmesi basılır mı yoksa basılmaz mı.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local activeGamepad = nil
local buttonX = Enum.KeyCode.ButtonX
local function isGamepadXDown()
if activeGamepad then
return UserInputService:IsGamepadButtonDown(activeGamepad, buttonX)
end
return false
end
local function input(_input, _gameProcessedEvent)
if not isGamepadXDown() then
-- Normal event
else
-- X Button down event
end
end
local function getActiveGamepad()
local activateGamepad = nil
local navigationGamepads = {}
navigationGamepads = UserInputService:GetNavigationGamepads()
if #navigationGamepads > 1 then
for i = 1, #navigationGamepads do
if activateGamepad == nil or navigationGamepads[i].Value < activateGamepad.Value then
activateGamepad = navigationGamepads[i]
end
end
else
local connectedGamepads = {}
connectedGamepads = UserInputService:GetConnectedGamepads()
if #connectedGamepads > 0 then
for i = 1, #connectedGamepads do
if activateGamepad == nil or connectedGamepads[i].Value < activateGamepad.Value then
activateGamepad = connectedGamepads[i]
end
end
end
if activateGamepad == nil then -- nothing is connected, at least set up for gamepad1
activateGamepad = Enum.UserInputType.Gamepad1
end
end
return activateGamepad
end
if UserInputService.GamepadEnabled then
activeGamepad = getActiveGamepad()
UserInputService.InputBegan:Connect(input)
end
IsKeyDown
Bu işlev, Enum.KeyCode ile ilgili verilen anahtarın kilitlenip kaldığını yoksa bırakıldığını gösterir. true döndürür, belirli anahtar basıldığında veya basılmadığında.
Bu, boşluk çubuğu gibi belirli bir anahtarbasıldığını kontrol etmek için kullanılabilir. Örneğin:
local UserInputService = game:GetService("UserInputService")local spaceHeld = UserInputService:IsKeyDown(Enum.KeyCode.Space)
Kullanıcının tüm tuşlarının bir listesini geri almak için, UserInputService:GetKeysPressed() işlevini kullanın.
Class.UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
- Enum.UserInputType.IsGamepadButtonDown - Aynı kullanımla bir etkinliği test etmek için: Bir verilen button ile bir gamepad üzerinde basıldığını kontrol etmek için.
Parametreler
anahtarEnum.KeyCode 'i.
Dönüşler
Belirli anahtarın tutulup tutulmadığı.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local shiftKeyL = Enum.KeyCode.LeftShift
local shiftKeyR = Enum.KeyCode.RightShift
-- Return whether left or right shift keys are down
local function isShiftKeyDown()
return UserInputService:IsKeyDown(shiftKeyL) or UserInputService:IsKeyDown(shiftKeyR)
end
-- Handle user input began differently depending on whether a shift key is pressed
local function input(_input, _gameProcessedEvent)
if not isShiftKeyDown() then
-- Normal input
else
-- Shift input
end
end
UserInputService.InputBegan:Connect(input)
IsMouseButtonPressed
Bu işlev bir mouse butonu alır Enum.UserInputType ve mevcut olup olmadığını gösteren bir boşluk döndürür.
Kontrol edilen fare butonu, Enum.UserInputType değeri olarak funktiona bir argüman olarak geçildiğine bağlıdır. Örneğin:
local UserInputService = game:GetService("UserInputService")local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
Class.UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Parametreler
Farenin Enum.UserInputType kısmı.
Dönüşler
Mevcut olarak tutulan fare butonu.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end
IsNavigationGamepad
Bu işlev, belirlenen true oyun konsolüne izin verilen Navigasyon ve Seçim Enum.UserInputType ile kontrol etmeyi içerir.
Bir navigasyon oyun cihazı ayarlamak istiyorsanız, UserInputService:SetNavigationGamepad() kullanabilirsiniz. Ayrıca, UserInputService:GetNavigationGamepads() kullanarak tüm navigasyon oyun cihazlarının bir listesini alabilirsiniz.
Örneğin, aşağıdaki kod oyunpad1'in bir navigasyon oyunpad olup olmadığını kontrol eder:
local UserInputService = game:GetService("UserInputService")if UserInputService:IsNavigationGamepad(UserInputType.Gamepad1) thenprint("Gamepad is a navigation gamepad!")elseprint("Gamepad is not a navigation gamepad!")end
Navigasyon bağlantısına bağlı olarak tüm bağlantılı oyun panolarının bir listesi, `UserInput/GetConnectedGamepads' kullanılarak alınabilir.
Class.UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Belirlenen oyun konsolunun Enum.UserInputType ı.
Dönüşler
Belirlenen oyun cihazı bir navigasyon oyun cihazı olup olmadığı.
RecenterUserHeadCFrame
Bu işlev, VR kulaklığının CFrame kulaklığının mevcut yönünü kullanıcının kullandığı kulaklığın mevcut yönüne ayarlar. Bu, kulaklıkmevcut yönünün CFrame.new() olmasını sağlar.
Kulaklık CFrame'ı olağan bir ofsette görünüyorsa oyun alanının merkezine hareket ettirmenizi sağlayan bu işlevi kullanın.
Bu, VRService işlevine aynı davranır, VRService:RecenterUserHeadCFrame() .
Class.UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Dönüşler
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
UserInputService:RecenterUserHeadCFrame()
SetNavigationGamepad
SetNavigationGamepad işlevi, belirlenen Enum.UserInputType oyun cihazının GUI navigatorını hareket ettirebileceğini ayarlar. GUI navigatorını hareket edebilen bir oyun cihazı, bir Navigasyon oyun cihazı olarak kabul edilir.
Eğer etkin argümanı true olarak geçilirse, Gamepad GUI navigatörünü hareket ettirebilir. Eğer false olarak geçilirse, Gamepad GUI navigatörünü hareket ettiremez.
Belirli bir Gamepad'in bir navigasyon gamepad olarak ayarlanıp ayarlanmadığını kontrol etmek istiyorsanız, Class.UserInputService:IsNavigationGamepad() fonksiyonunu kullanabilirsiniz. Ayrıca, Class.UserInputService:GetNavigationGamepads() ile tüm navigasyon gamepad'lerinin bir listesini alabilirsiniz.
Class.UserInputService sadece kullanıcı tarafındadır, bu işlev sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Belirlenen oyun konsolunun Enum.UserInputType ı.
Belirlenen oyun konsolunun GUI navigatörünü hareket ettirebilir mi.
Dönüşler
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
UserInputService:SetNavigationGamepad(Enum.UserInputType.Gamepad1, true)
Etkinlikler
DeviceAccelerationChanged
DeviceAccelerationChanged etkinliği, bir kullanıcı bir hızlandırma cihazı hareket ettirdiğinde başlar.
İvmeölçer, hızı değiştiren çoğu cihazda bulunan bir bileşendir.
Kullanıcının cihazının hızlandırıcıya sahip olup olmadığını belirlemek için, UserInputService.AccelerometerEnabled göre görüntülenir.
İvmeölçer'i olan bir cihazın hareketini izlemek için bu olay kullanılabilir. Bir örnek kullanımı, bir mobil cihazın hızlandığında oyuncu karakterini hareket ettirmeyi içerir.
Ayrıca, bu etkinliği UserInputService:GetDeviceAcceleration() ile birleştirerek, cihazınızın hızlandırıcıya sahip olup olmadığını belirleyebilirsiniz.
Bu etkinlik yalnızca yerel olarak çalışır - yani sadece hareket eden oyuncunun etkinliğini kullanabilir ve sadece bir LocalScript içinde çalışacaktır.
Parametreler
Bir InputObject , bir UserInputType ile 'Hızlandırıcı' ve 2> Class.InputObject.Position|Position2> ile 5> yerel cihaz eksenindeki yerçekimi gücünü5> gösteren.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local SENSITIVITY = 0.2
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local ready = true
local function changeAcceleration(acceleration)
if ready then
ready = false
local accel = acceleration.Position
if accel.Y >= SENSITIVITY then
humanoid.Jump = true
end
if accel.Z <= -SENSITIVITY then
humanoid:Move(Vector3.new(-1, 0, 0))
end
if accel.Z >= SENSITIVITY then
humanoid:Move(Vector3.new(1, 0, 0))
end
if accel.X <= -SENSITIVITY then
humanoid:Move(Vector3.new(0, 0, 1))
end
if accel.X >= SENSITIVITY then
humanoid:Move(Vector3.new(0, 0, -1))
end
task.wait(1)
ready = true
end
end
UserInputService.DeviceAccelerationChanged:Connect(changeAcceleration)
DeviceGravityChanged
Class.UserInputService.DeviceGravityChanged olayı, cihazın hızı Vector3 ile değiştirildiğinde oluşur.
Bir cihazın yer çekimi vektörü, her bir cihazın X, Y ve Z eksenlerindeki yer çekiminin gücünü temsil eder. Gravite, asla değişmezken, her eksendeki gücü değiştirir. Her eksendeki güç değiştirildiğinde, güç değerindeki bir birim vektörü olarak değiştirilir.
İvmeölçer, hızı değiştiren çoğu cihazda bulunan bir bileşendir.
Bu etkinliği, kullanıcının cihazındaki çekim gücünün gerçek dünya yönünü belirlemek için kullanabilirsiniz. Bu, aynı zamanda kullanıcının cihazındaki çekim gücünü oyun içindeki kullanıcının cihazında simüle etmek için de kullanılabilir,örneğin aşağıdaki gibi (görselde görüldüğü gibi).
Bir kullanıcının cihazının hızlandırıcıyı etkinleştirdiğini kontrol etmek için, UserInputService.AccelerometerEnabled bakın. Cihazın hızlandırıcıyı etkinleştirdiği durumda, UserInputService:GetDeviceGravity() işlevini kullanarak kullanıcının cihazındaki mevcut kuvvet
Parametreler
Bir InputObject, ile ağırlığın her yerel cihaz eksenindeki gücünü gösteren bir InputObject.Position özelliğiyle. Bu pozisyon, cihazla ilgili yönü belirlemek için bir yön olarak kullanılabilir.
Kod Örnekleri
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local camera = workspace.CurrentCamera
local currentRotation = camera.CFrame -- CFrame.new(Vector3.new(0,0,0), Vector3.new(0,0,0))
local lastInputFrame = nil
local upsideDown = false
task.wait()
local orientationSet = false
local function GravityChanged(gravity)
if not orientationSet then
upsideDown = (gravity.Position.X < -0.5 or gravity.Position.Z > 0.5)
orientationSet = true
end
end
local function RotationChanged(_rotation, rotCFrame)
if orientationSet then
if not lastInputFrame then
lastInputFrame = rotCFrame
end
local delta = rotCFrame * lastInputFrame:inverse()
local x, y, z = delta:ToEulerAnglesXYZ()
if upsideDown then
delta = CFrame.Angles(-x, y, z)
else
delta = CFrame.Angles(x, -y, z)
end
currentRotation = currentRotation * delta
lastInputFrame = rotCFrame
end
end
local function HideCharacter()
for _, limb in pairs(character:GetChildren()) do
if limb:IsA("Part") then
limb.Transparency = 1
end
end
end
if UserInputService.GyroscopeEnabled then
UserInputService.DeviceGravityChanged:Connect(GravityChanged)
UserInputService.DeviceRotationChanged:Connect(RotationChanged)
HideCharacter()
RunService:BindToRenderStep("Camera", Enum.RenderPriority.Camera.Value, function()
camera.CFrame = CFrame.new(head.Position - Vector3.new(0, 8, 10)) * currentRotation
camera.Focus = CFrame.new(currentRotation * Vector3.new(0, 0, -10))
end)
end
DeviceRotationChanged
DeviceRotationChanged etkinliği, bir kullanıcının bir döner bileşenine sahip bir cihazı döndüğünde başlar.
Bir giroskop, yön ve dönme hızını algılayan çoğu cep telefonunun içinde bulunan bir bileşendir.
Olay, cihazın yönünü takip etmek ve kullanıcının cihazını döndürmesi sırasında değişiklikleri nasıl takip edeceğiniz konusunda yararlıdır. Cihaz dönüşümünü belirlemek için Class.UserInputService:GetDeviceRotation() fonksiyonunu kullanabilirsiniz.
Bir kullanıcının cihazının etkin bir giroskop sahip olup olmadığını ve bu etkinliğin başlatılacağını kontrol etmek için, UserInputService.GyroscopeEnabled görün.
Bu etkinlik sadece Roblox istemci penceresi fokuslu olduğunda başlar. Örneğin, pencere minimumize edildiğinde girişler yakalanmaz.
Parametreler
Bir InputObject cihazın dönme hakkında bilgi sağlar. InputObject.Position yeni dönmeyi temsil eder ve Vector3 pozisyon değeri ve 1> Class.InputObject.Delta1> değişiklikleri dönmeyi temsil eder.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local camera = workspace.CurrentCamera
local currentRotation = camera.CFrame -- CFrame.new(Vector3.new(0,0,0), Vector3.new(0,0,0))
local lastInputFrame = nil
local upsideDown = false
task.wait()
local orientationSet = false
local function GravityChanged(gravity)
if not orientationSet then
upsideDown = (gravity.Position.X < -0.5 or gravity.Position.Z > 0.5)
orientationSet = true
end
end
local function RotationChanged(_rotation, rotCFrame)
if orientationSet then
if not lastInputFrame then
lastInputFrame = rotCFrame
end
local delta = rotCFrame * lastInputFrame:inverse()
local x, y, z = delta:ToEulerAnglesXYZ()
if upsideDown then
delta = CFrame.Angles(-x, y, z)
else
delta = CFrame.Angles(x, -y, z)
end
currentRotation = currentRotation * delta
lastInputFrame = rotCFrame
end
end
local function HideCharacter()
for _, limb in pairs(character:GetChildren()) do
if limb:IsA("Part") then
limb.Transparency = 1
end
end
end
if UserInputService.GyroscopeEnabled then
UserInputService.DeviceGravityChanged:Connect(GravityChanged)
UserInputService.DeviceRotationChanged:Connect(RotationChanged)
HideCharacter()
RunService:BindToRenderStep("Camera", Enum.RenderPriority.Camera.Value, function()
camera.CFrame = CFrame.new(head.Position - Vector3.new(0, 8, 10)) * currentRotation
camera.Focus = CFrame.new(currentRotation * Vector3.new(0, 0, -10))
end)
end
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end
GamepadConnected
GamepadConnected olayı, bir oyun cihazı konsola bağlandığında başlar.
Roblox bir oyunu birden fazla kontrolörü desteklediğinden, bu etkinlik UserInputService.GamepadDisconnected etkinliğiyle birleştirildiğinde yararlıdır. Ayrıca UserInputService:GetConnectedGamepads() kullanarak doğru oyun konsolunu bulabilirsiniz.
Aşağıdaki örnek, bir oyun cihazının kliyona bağlandığında bir izleme örneğini gösteriyor.
local UserInputService = game:GetService("UserInputService")
local function GamepadConnected(gamepad)
print("Player has plugged controller: " .. tostring(gamepad))
end)
UserInputService.GamepadConnected:Connect(GamepadConnected)
Hangi cihazların bağlı olduğunu görmek istiyorsanız, UserInputService:GetConnectedGamepads() işlevini kullanabilirsiniz.
Bu etkinlik yerel olarak başlar, sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Bağlantılı oyun konsolunun Enum.UserInputType 'ı.
GamepadDisconnected
GamepadDisconnected olayı, bir oyun cihazının bağlantısı kesildiğinde başlar.
Roblox bir oyunu birden fazla kontrolörü desteklediğinden, bu etkinlik UserInputService.GamepadConnected etkinliğiyle birleştirildiğinde yararlıdır. Ayrıca UserInputService:GetConnectedGamepads() kullanarak doğru oyun konsolunu bulabilirsiniz.
Aşağıdaki örnek, bir oyun cihazının klienden ayrıldığında bir izleme örneğini gösterir.
local UserInputService = game:GetService("UserInputService")
local function GamepadDisconnected(gamepad)
print("Player has unplugged controller: " .. tostring(gamepad))
end)
UserInputService.GamepadDisconnected:Connect(GamepadDisconnected)
Bu etkinlik yerel olarak başlar, sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Bağlantısız oyun cihazının Enum.UserInputType 'i.
InputBegan
InputBegan etkinliği, bir kullanıcının bir Human-Computer Interface cihazı (farenin aşağısına basma, dokunma başlangıcı, klavye düğmesine basma vb.) aracılığıyla etkileşime geçmesiyle başlar.
Kullanıcı etkileşiminin başlangıcını izlemek için kullanılabilir, bir kullanıcının ilk bir GUI öğesiyle etkileşim kurduğu gibi, bir oyun konsolu gibi. Mouse wheel hareketlerini yakalamıyor.
Bu etkinliği UserInputService.InputChanged ve UserInputService.InputEnded ile birlikte kullanarak, kullanıcının girişini, değişiklikleri ve bitimleri takip etmek için kullanabilirsiniz.
Bu etkinlik sadece Roblox istemci penceresi fokuslu olduğunda başlar. Örneğin, pencere minimumize edildiğinde girişler yakalanmaz.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Parametreler
Bir InputObject durum, kullanıcının girişi hakkında bilgi içerir.
Oyun motoru içerideki bu girişi gözlemlediğini ve hareket ettiğini gösterir. Bu genellikle UI işlemeyi işaret eder, böylece bu girişten bir düğme dokunuldu veya tıklanıldıysa, gameProcessedEvent bu true olur. Bu aynı zamanda ContextActionService aracılığıyla bağlanan g
Kod Örnekleri
-- In order to use the InputBegan event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- A sample function providing multiple usage cases for various types of user input
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key is being pushed down! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has started at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button is being pressed on a gamepad! Button:", input.KeyCode)
end
if gameProcessed then
print("The game engine internally observed this input!")
else
print("The game engine did not internally observe this input!")
end
end)
InputChanged
InputChanged olayı, bir kullanıcının bir İnsan-Computer Arayüzü cihazı (farenin aşağısına basması, dokunma başlangıcı, klavye düğmesine basması vb.) aracılığıyla nasıl etkileşim kurduğunu değiştirdiğinde başlar.
Roblox'un otomatik olarak işlediği olayları görmezden gelmek için, bir ScrollingFrame , yuvarlak gibi bir kaydırma veya bir Class.UserInputService.InputEnded ile oyun işlemelerini takibi etmeyi kullanın. Bu olay, Class.User
Bu etkinlik sadece Roblox istemci penceresi fokuslu olduğunda başlar. Örneğin, pencere minimumize edildiğinde girişler yakalanmaz.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Parametreler
Bir InputObject durum, kullanıcının girişi hakkında bilgi içerir.
Oyun motoru içerideki bu girişi gözlemlediğini ve hareket ettiğini gösterir. Bu genellikle UI işlemeyi işaret eder, böylece bu girişten bir düğme dokunuldu veya tıklanıldıysa, gameProcessedEvent bu true olur. Bu aynı zamanda ContextActionService aracılığıyla bağlanan g
Kod Örnekleri
-- In order to use the InputChanged event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- Prints the current input position and the change (delta) in position
local function printMovement(input)
print("Position:", input.Position)
print("Movement Delta:", input.Delta)
end
-- A sample function providing multiple usage cases for various types of user input
local function InputChanged(input, _gameProcessed)
if input.UserInputType == Enum.UserInputType.MouseMovement then
print("The mouse has been moved!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.MouseWheel then
print("The mouse wheel has been scrolled!")
print("Wheel Movement:", input.Position.Z)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
if input.KeyCode == Enum.KeyCode.Thumbstick1 then
print("The left thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.Thumbstick2 then
print("The right thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.ButtonL2 then
print("The pressure being applied to the left trigger has changed!")
print("Pressure:", input.Position.Z)
elseif input.KeyCode == Enum.KeyCode.ButtonR2 then
print("The pressure being applied to the right trigger has changed!")
print("Pressure:", input.Position.Z)
end
elseif input.UserInputType == Enum.UserInputType.Touch then
print("The user's finger is moving on the screen!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.Gyro then
local _rotInput, rotCFrame = UserInputService:GetDeviceRotation()
local rotX, rotY, rotZ = rotCFrame:toEulerAnglesXYZ()
local rot = Vector3.new(math.deg(rotX), math.deg(rotY), math.deg(rotZ))
print("The rotation of the user's mobile device has been changed!")
print("Position", rotCFrame.p)
print("Rotation:", rot)
elseif input.UserInputType == Enum.UserInputType.Accelerometer then
print("The acceleration of the user's mobile device has been changed!")
printMovement(input)
end
end
UserInputService.InputChanged:Connect(InputChanged)
InputEnded
Kullanıcı bir Human-Computer Interface cihazı ( fare butonu aşağı, dokunma başlangıcı, klavye düğmesi aşağı, vb. ) aracılığıyla etkileşimi sonlandırdığında giriş etkinliği sona eriyor (görüntülenen giriş sayısı, dokunma başlangıcı, klavye düğmesi aşağı, vb. gibi). Bu, bir kullanıcının klavye anahtar, fare butonu, dokunma başlangıc
Bu etkinliği UserInputService.InputBegan ve UserInputService.InputChanged ile birlikte kullanarak, kullanıcının girişini izleyin, değiştirin ve bitirin.
Bu etkinlik sadece Roblox istemci penceresi fokuslu olduğunda başlar. Örneğin, pencere minimumize edildiğinde girişler yakalanmaz.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Parametreler
Bir InputObject durum, kullanıcı girişleri hakkında bilgi içerir.
Oyun motoru içerideki bu girişi gözlemlediğini ve hareket ettiğini gösterir. Bu genellikle UI işlemeyi işaret eder, böylece bu girişten bir düğme dokunuldu veya tıklanıldıysa, gameProcessedEvent bu true olur. Bu aynı zamanda ContextActionService aracılığıyla bağlanan g
Kod Örnekleri
-- In order to use the InputChanged event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- A sample function providing multiple usage cases for various types of user input
UserInputService.InputEnded:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key has been released! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button has been released on a gamepad! Button:", input.KeyCode)
end
if gameProcessed then
print("The game engine internally observed this input!")
else
print("The game engine did not internally observe this input!")
end
end)
JumpRequest
Class.UserInputServiceUserInputService etkinliği, klientin, örneğin mobil cihazda boşluk çubuğuna veya atlama düğmesine bastığında bir atlama isteği olduğunda başlar.
Bu etkinlik, kullanıcının Player.Character zıplamasını yapmaya çalıştığında her zaman ateşlenir.Varsayılan davranış, oyuncunun Humanoid.Jump özelliğini gerçekleştirerek oyuncunun karakterini zıplamaya yanıt verir, bu da oyuncunun karakterini zıplatır.
Oyuncunun zıplamaistediği her zaman izleyebilmek için etkinliği kullanılabilir. Onu zıplamaiçin kullanılması yerine, bu atlama davranışını değiştirmek için kullanılmalıdır - örneğin atlamayı devre dışı bırakma gibi.
Örneğin, aşağıdaki kod oyuncu bir talepisteği gönderdiğinde her sefer "Zıpla" yazıyor.
local UserInputService = game:GetService("UserInputService")
function onJumpRequest()
print("Jump!")
end
UserInputService.JumpRequest:Connect(onJumpRequest)
Bu etkinliğin tek bir talepisteği için birden fazla kez çalışması nedeniyle, bir düşüş kullanılması önerilir.
Anahtarları veya düğmeleri diğer eylemlere bağlamak isterseniz, şunları kullanmayı düşünün: UserInputService:GetKeysPressed() veya UserInputService.InputBegan veya ContextActionService .
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
-- Fires when the user tries to jump
local function jump()
humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false)
end
UserInputService.JumpRequest:Connect(jump)
LastInputTypeChanged
Class.UserInputService.LastInputTypeChanged olayı, müşteri bir Human-Computer Interface cihazı aracılığıyla nasıl etkileşim kurduğunu değiştirdiğinde her zaman başlar. (örneğin, MouseMovement'dan MouseWheel'a veya Thumbstick1'den Thumbstick2'ye).
Giriş yazson değerini, değişmiş olup olmadığına bağlı olarak UserInputService:GetLastInputType() işlevini kullanabilirsiniz.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Parametreler
Son giriş yazgösteren bir Enum.UserInputType .
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local mouseInput = {
Enum.UserInputType.MouseButton1,
Enum.UserInputType.MouseButton2,
Enum.UserInputType.MouseButton3,
Enum.UserInputType.MouseMovement,
Enum.UserInputType.MouseWheel,
}
local keyboard = Enum.UserInputType.Keyboard
local function toggleMouse(lastInputType)
if lastInputType == keyboard then
UserInputService.MouseIconEnabled = false
return
end
for _, mouse in pairs(mouseInput) do
if lastInputType == mouse then
UserInputService.MouseIconEnabled = true
return
end
end
end
UserInputService.LastInputTypeChanged:Connect(toggleMouse)
PointerAction
PointerAction başarıyla bir özel bağlantı aksiyonyerine getirildiğinde ateşlenir. Özellikle, mouse wheel'ınızı yuvarlayarak.
Parametreler
TextBoxFocusReleased
TextBoxFocusRelease etkinliği, bir TextBox'a odaklanıldığında başlar - genellikle bir klienin geri düğmesine basarak veya ekranda başka bir yere tıklayarak bir klienin metni girdiğini TextBox'a kaydedince.
Örneğin, aşağıdaki kod, etkinlik başladığında TextBox'un kaybolan ismini yazdırır.
local UserInputService = game:GetService("UserInputService")
function TextBoxFocusReleased(textbox)
print(textbox.Name)
end
UserInputService.TextBoxFocusReleased:Connect(TextBoxFocusReleased)
Bir TextBox'un konsantrasyon kazanıp kaybettiğini takip etmek için UserInputService.TextBoxFocused ile birlikte kullanılabilir.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Class.Toolbar konsantrasyonunu kaybetti.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
UserInputService.TextBoxFocusReleased:Connect(function(textbox)
print("The name of the released focus TextBox is " .. textbox.Name)
end)
TextBoxFocused
TextBoxFocused etkinliği, bir kazanç odaklanır TextBox - genellikle bir müşteri bir text kutusuna tıklayarak/dokunarak girişi başlatır. Bu ayrıca, bir text kutusu odaklanır kullanıyor TextBox:CaptureFocus() .
Örneğin, aşağıdaki kod, etkinlik başladığında TextBox'un odaklandığı ismi yazdırır.
local UserInputService = game:GetService("UserInputService")
function TextBoxFocused(textbox)
print(textbox.Name)
end)
UserInputService.TextBoxFocused:Connect(TextBoxFocused)
Bir metin kutusunun konsantrasyon kazanıp kaybettiğini takip etmek için UserInputService.FocusReleased ile birlikte kullanılabilir.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local function textBoxFocused(textBox)
textBox.BackgroundTransparency = 0
end
local function textBoxFocusReleased(textBox)
textBox.BackgroundTransparency = 0.7
end
UserInputService.TextBoxFocused:Connect(textBoxFocused)
UserInputService.TextBoxFocusReleased:Connect(textBoxFocusReleased)
TouchEnded
TouchEnded etkinliği, bir kullanıcının TouchEnabled cihazının ekranından parmaklarını serbest bıraktığında başlar ve dokunma girişini cihazla sonlandırır.
Bu etkinliği, bir kullanıcının cihazının ekranına dokunmasını durdurduğunu belirlemek için kullanabilirsiniz. UserInputService.TouchStarted ile kullanıcının başladığı ve ekrana dokunduğunu durdurduğunu belirlemek için eşzamanla kullanılabilir.
Örneğin, aşağıdaki kod, kullanıcının ekrana dokunmasını durdurduğu yerden ekran pozisyonunu yazdırır.
local UserInputService = game:GetService("UserInputService")
function TouchEnded(touch, gameProcessedEvent)
print("Touch ended at " .. tostring(touch.Position))
end
UserInputService.TouchEnded:Connect(TouchEnded)
Dokunmatik giriş objesi, dokunmatik giriş objesinin tüm ömrü boyunca aynı giriş objesidir. Dokunmatik giriş objeleri InputObjects olduğunda karşılaştırılırsa aynı parmak olduğunu belirlemek için geçerlidir.
Kullanıcının cihazının TouchEnabled olduğunu ve bu dokunma etkinliklerinin başarılı olacağını test etmek için, UserInputService.TouchEnabled görüntüleyin.
Bu etkinlik sadece Roblox istemci penceresi fokuslu olduğunda başlar. Örneğin, pencere minimumize edildiğinde girişler yakalanmaz.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Bir InputObject durum, kullanıcının girişi hakkında bilgi içerir.
Oyun motoru içerideki bu girişi gözlemlediğini ve hareket ettiğini gösterir. Bu genellikle UI işlemeyi işaret eder, böylece bu girişten bir düğme dokunuldu veya tıklanıldıysa, gameProcessedEvent bu true olur. Bu aynı zamanda ContextActionService aracılığıyla bağlanan g
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
-- The parent of this script (a ScreenGui)
local touchScreenGui = script.Parent
-- Create the GUI frame that the user interacts with through Touch
-- events
local touchGui = Instance.new("Frame")
touchGui.Name = "TouchGui"
touchGui.AnchorPoint = Vector2.new(0.5, 0.5)
-- Fires when the touches their device's screen
local function TouchTap(touchPositions, _gameProcessedEvent)
touchGui.Parent = touchScreenGui
touchGui.Position = UDim2.new(0, touchPositions[1].X, 0, touchPositions[1].Y)
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Fires when a user starts touching their device's screen and does not
-- move their finger for a short period of time
local function TouchLong(_touchPositions, _state, _gameProcessedEvent)
touchGui.Size = UDim2.new(0, 100, 0, 100)
end
-- Fires when the user moves their finger while touching their device's
-- screen
local function TouchMove(touch, _gameProcessedEvent)
touchGui.Position = UDim2.new(0, touch.Position.X, 0, touch.Position.Y)
end
-- Fires when the user stops touching their device's screen
local function TouchEnd(_touch, _gameProcessedEvent)
touchGui.Parent = nil
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Only use the Touch events if the user is on a mobile device
if UserInputService.TouchEnabled then
UserInputService.TouchTap:Connect(TouchTap)
UserInputService.TouchLongPress:Connect(TouchLong)
UserInputService.TouchMoved:Connect(TouchMove)
UserInputService.TouchEnded:Connect(TouchEnd)
end
TouchLongPress
Bir kullanıcının TouchEnabled cihazının aynı ekran pozisyonunda en az bir parmak tutmasıyla başlatıldığında ateş edilir.
Bu etkinliği bir kullunun bir oyun içi GUI veya öğesi üzerindeki parmaklarını düşürdüğünü belirlemek için kullanabilirsiniz.
Aşağıdaki örnek, kullanıcının en az bir parmak kadar kısa bir süre için aynı ekran pozisyonunda tutulduğunda kullanıcının sahip olduğu state ı yazdırır. Olası devletler şunları içerir: Başla, Değ
local UserInputService = game:GetService("UserInputService")
function TouchLongPress(TouchPositions, state, gameProcessedEvent)
print("Long press event fired. State of press: " .. tostring(state))
end
UserInputService.TouchLongPress:Connect(TouchLongPress)
Kullanıcının cihazının TouchEnabled olduğunu ve bu dokunma etkinliklerinin başarılı olacağını test etmek için, UserInputService.TouchEnabled görün.
Bir kullanıcının ekrana dokunmasını başlatması veya durdurmasını belirlemek için UserInputService.TouchStarted ve UserInputService.TouchEnded ile eşleştirilebilir.
Bu etkinlik sadece Roblox istemci penceresi fokuslu olduğunda başlar. Örneğin, pencere minimumize edildiğinde girişler yakalanmaz.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Hareketin Enum.UserInputState 'i.
Oyun motoru içerideki bu girişi gözlemlediğini ve hareket ettiğini gösterir. Bu genellikle UI işlemeyi işaret eder, böylece bu girişten bir düğme dokunuldu veya tıklanıldıysa, gameProcessedEvent bu true olur. Bu aynı zamanda ContextActionService aracılığıyla bağlanan g
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
-- The parent of this script (a ScreenGui)
local touchScreenGui = script.Parent
-- Create the GUI frame that the user interacts with through Touch
-- events
local touchGui = Instance.new("Frame")
touchGui.Name = "TouchGui"
touchGui.AnchorPoint = Vector2.new(0.5, 0.5)
-- Fires when the touches their device's screen
local function TouchTap(touchPositions, _gameProcessedEvent)
touchGui.Parent = touchScreenGui
touchGui.Position = UDim2.new(0, touchPositions[1].X, 0, touchPositions[1].Y)
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Fires when a user starts touching their device's screen and does not
-- move their finger for a short period of time
local function TouchLong(_touchPositions, _state, _gameProcessedEvent)
touchGui.Size = UDim2.new(0, 100, 0, 100)
end
-- Fires when the user moves their finger while touching their device's
-- screen
local function TouchMove(touch, _gameProcessedEvent)
touchGui.Position = UDim2.new(0, touch.Position.X, 0, touch.Position.Y)
end
-- Fires when the user stops touching their device's screen
local function TouchEnd(_touch, _gameProcessedEvent)
touchGui.Parent = nil
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Only use the Touch events if the user is on a mobile device
if UserInputService.TouchEnabled then
UserInputService.TouchTap:Connect(TouchTap)
UserInputService.TouchLongPress:Connect(TouchLong)
UserInputService.TouchMoved:Connect(TouchMove)
UserInputService.TouchEnded:Connect(TouchEnd)
end
TouchMoved
TouchMoved olayı, bir kullanıcının parmaklarını bir TouchEnabled cihazında hareket ettirirken başlar.
Bu etkinliği, bir kullanıcının bir Dokunmatik cihazın ekranına dokunurken parmaklarını hareket ettirdiğini belirlemek için kullanabilirsiniz. Kullanıcının parmaklarını ekranda hareket ettirdiğini ve nereye hareket ettirdiğini takip etmek için yararlı olabilir.
Aşağıdaki kod, önceki Vector2 pozisyonundan "Dokunuldu" yeni Vector2 pozisyonuna kullanıcının dokunuşunun üzerindeki bir DokunmaAçık cihazındaki kullanıcının dokunuşuna aittirir.
local UserInputService = game:GetService("UserInputService")
function onTouchMoved(touch, gameProcessedEvent)
local oldPosition = touch.Position - touch.Delta
print("Touch moved from " .. tostring(oldPosition) .. "to " .. tostring(touch.Position))
end
UserInputService.TouchMoved:Connect(onTouchMoved)
Bunlar UserInputService.TouchStarted ve UserInputService.TouchEnded ile kombine edilebilir, böylece kullanıcının ekrana dokunmasında başladığında, parmaklarının ekranda hareket ettiğinde ve ekranınızı yüzden yüz olmadığında nasıl hareket edeceğini belirlemek için kullanılabilir.
Kullanıcının cihazının TouchEnabled olduğunu ve bu dokunma etkinliklerinin başarılı olacağını test etmek için, UserInputService.TouchEnabled görüntüleyin.
Bu etkinlik sadece Roblox istemci penceresi fokuslu olduğunda başlar. Örneğin, pencere minimumize edildiğinde girişler yakalanmaz.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Bir InputObject durum, kullanıcının girişi hakkında bilgi içerir.
Oyun motoru içerideki bu girişi gözlemlediğini ve hareket ettiğini gösterir. Bu genellikle UI işlemeyi işaret eder, böylece bu girişten bir düğme dokunuldu veya tıklanıldıysa, gameProcessedEvent bu true olur. Bu aynı zamanda ContextActionService aracılığıyla bağlanan g
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
-- The parent of this script (a ScreenGui)
local touchScreenGui = script.Parent
-- Create the GUI frame that the user interacts with through Touch
-- events
local touchGui = Instance.new("Frame")
touchGui.Name = "TouchGui"
touchGui.AnchorPoint = Vector2.new(0.5, 0.5)
-- Fires when the touches their device's screen
local function TouchTap(touchPositions, _gameProcessedEvent)
touchGui.Parent = touchScreenGui
touchGui.Position = UDim2.new(0, touchPositions[1].X, 0, touchPositions[1].Y)
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Fires when a user starts touching their device's screen and does not
-- move their finger for a short period of time
local function TouchLong(_touchPositions, _state, _gameProcessedEvent)
touchGui.Size = UDim2.new(0, 100, 0, 100)
end
-- Fires when the user moves their finger while touching their device's
-- screen
local function TouchMove(touch, _gameProcessedEvent)
touchGui.Position = UDim2.new(0, touch.Position.X, 0, touch.Position.Y)
end
-- Fires when the user stops touching their device's screen
local function TouchEnd(_touch, _gameProcessedEvent)
touchGui.Parent = nil
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Only use the Touch events if the user is on a mobile device
if UserInputService.TouchEnabled then
UserInputService.TouchTap:Connect(TouchTap)
UserInputService.TouchLongPress:Connect(TouchLong)
UserInputService.TouchMoved:Connect(TouchMove)
UserInputService.TouchEnded:Connect(TouchEnd)
end
TouchPan
TouchPan etkinliği, bir kullanıcının en az bir parmak ile bir TouchEnabled durumunda başlar.
Bu etkinliği, bir kullunun bir TouchEnabled cihazının ekranındaki parmaklarını kaydırma zamanını belirlemek için kullanabilirsiniz - böylece kullanıcının Camera 'ını bir özel kamerayla kaydetme kısmında döndürmesi gerekir.
Aşağıdaki kısayol, kullanıcının parmaklarını ekranda sürükleme hızını takip eden "Dokunma hızı" yazıyor.
local UserInputService = game:GetService("UserInputService")
UserInputService.TouchPan:Connect(function(touchPositions, totalTranslation, velocity, state, gameProcessedEvent)
print("Speed of touch drag: " .. tostring(velocity))
end)
Buradaki yararlı bir başka UserInputService işlevine bir göz atın UserInputService.TouchRotate .
Bu etkinlik sadece Roblox istemci penceresi fokuslu olduğunda başlar. Örneğin, pencere minimumize edildiğinde girişler yakalanmaz.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Bir Datatype.Vector2 nesneleri matrisi, hareketin içinde bulunan parmakların konumlarını gösteren bir matrisidir. (örneğin, parmakların parmaklarının parmaklarının parmaklarının parmaklarının parmaklarının parmaklarının parmaklarının parmaklarının parmaklarının parmaklarının parmaklarının parmaklarının parmaklarının parmaklarının parmaklarının parmaklarının par
Panosun başlangıcından sonuna kadar (in pixel) panosun boyutu.
Panosunun hızı (her saniye per pixel).
Hareketin Enum.UserInputState 'i.
Oyun motoru içerideki bu girişi gözlemlediğini ve hareket ettiğini gösterir. Bu genellikle UI işlemeyi işaret eder, böylece bu girişten bir düğme dokunuldu veya tıklanıldıysa, gameProcessedEvent bu true olur. Bu aynı zamanda ContextActionService aracılığıyla bağlanan g
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end
TouchPinch
Bir kullanıcı iki parmaklarını TouchEnabled cihazının ekranına yerleştirdiğinde ateş edilir.
durum, aşağıdaki kısayol, dokunmatik pinch başlangıcından bu yana kameranın yüksekliğini ne kadar değiştirdiğini gösterir.
local UserInputService = game:GetService("UserInputService")
UserInputService.TouchPinch:Connect(function(touchPositions, scale, velocity, state, gameProcessedEvent)
print("Scale difference since beginning of pinch: " .. tostring(scale))
end)
Kullanıcının cihazının TouchEnabled olduğunu ve bu dokunma etkinliklerinin başarılı olacağını test etmek için, UserInputService.TouchEnabled görüntüleyin.
Bu etkinlik sadece Roblox istemci penceresi fokuslu olduğunda başlar. Örneğin, pencere minimized olduğunda girişler yakalanmaz. Bu etkinliği yalnızca yerel olarak etkinleştirir, sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Dokunma hareketinin ekran pozisyonunu, katman olarak gösteren bir matris Vector2s,
Çıkış noktasından başlayan çekimin büyüklüğü (像) başlangıç çekim pozisyonlarına bölünür.
Dokunma hızı (her saniye per pixel).
Hareketin Enum.UserInputState 'i.
Oyun motoru içerideki bu girişi gözlemlediğini ve hareket ettiğini gösterir. Bu genellikle UI işlemeyi işaret eder, böylece bu girişten bir düğme dokunuldu veya tıklanıldıysa, gameProcessedEvent bu true olur. Bu aynı zamanda ContextActionService aracılığıyla bağlanan g
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end
TouchRotate
Kullanıcı iki parmaklarını bir TouchEnabled etkinliği tetiklenir.
Örneğin, aşağıdaki kod, dokunma dönüşümünün başlangıcından bu yana kameranın ne kadar döndüğünü gösterir.
local UserInputService = game:GetService("UserInputService")
UserInputService.TouchRotate:Connect(function(touchPositions, rotation, velocity, state, gameProcessedEvent)
print("Camera has rotated " .. tostring(rotation) .. " degrees!")
end)
Kullanıcının cihazının TouchEnabled olduğunu ve bu dokunma etkinliklerinin başarılı olacağını test etmek için, UserInputService.TouchEnabled görüntüleyin.
Bu etkinlik sadece Roblox istemci penceresi fokuslu olduğunda başlar. Örneğin, pencere minimumize edildiğinde girişler yakalanmaz.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Kullanıcının kamerasını mobil bir cihazda kontrol eden çekirdek kodları, bu etkinliğe benzer kodları kullanır. Bu etkinliğe en iyi uygulama, bir mobil kamerası sistemini oluştururken kullanılmasıdır, böylece varsayılan çekirdek kodlarının üstesinden gelmek için.
Ayrıca bakınız:
Parametreler
Hareketin içindeki parmakların konumlarını gösteren bir matris.
Hareketin başlangıcından bu yana hareketin dönme sayısı.
Değişimin süresi (saniye) ile değişimin yönü arasındaki değişiklik.
Hareketin Enum.UserInputState 'i.
Oyun motoru içerideki bu girişi gözlemlediğini ve hareket ettiğini gösterir. Bu genellikle UI işlemeyi işaret eder, böylece bu girişten bir düğme dokunuldu veya tıklanıldıysa, gameProcessedEvent bu true olur. Bu aynı zamanda ContextActionService aracılığıyla bağlanan g
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end
TouchStarted
TouchStarted etkinliği, bir kullanıcının parmaklarını bir TouchEnabled cihazına yerleştirdiğinde başlar, kullanıcının cihazla ilgili dokunma girişini başlatır.
Bu etkinliği, bir kullanıcının cihazının ekranına dokunmasını başlatıp durdurduğunu belirlemek için kullanabilirsiniz. UserInputService.TouchEnded ile kullanıcının ekranına dokunmasını başlatıp durdurmasını belirleyebilirsiniz.
Dokunmatik giriş objesi, dokunmatik giriş objesinin tüm ömrü boyunca aynı giriş objesidir. Dokunmatik giriş objeleri InputObjects olduğunda karşılaştırılırsa aynı parmak olduğunu belirlemek için geçerlidir.
Kullanıcının cihazının TouchEnabled olduğunu ve bu dokunma etkinliklerinin başarılı olacağını test etmek için, UserInputService.TouchEnabled görüntüleyin.
Bu etkinlik sadece Roblox istemci penceresi fokuslu olduğunda başlar. Örneğin, pencere minimumize edildiğinde girişler yakalanmaz.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Bir InputObject durum, kullanıcının girişi hakkında bilgi içerir.
Oyun motoru içerideki bu girişi gözlemlediğini ve hareket ettiğini gösterir. Bu genellikle UI işlemeyi işaret eder, böylece bu girişten bir düğme dokunuldu veya tıklanıldıysa, gameProcessedEvent bu true olur. Bu aynı zamanda ContextActionService aracılığıyla bağlanan g
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local dragging
local dragInput
local dragStart
local startPos
local gui = script.Parent
local function touchStarted(input, _gameProcessed)
if not dragging then
dragging = true
dragInput = input
dragStart = input.Position
startPos = gui.Position
end
end
local function update(input, _gameProcessed)
if input == dragInput and dragging then
local delta = input.Position - dragStart
gui.Position = UDim2.new(
startPos.X.Scale,
startPos.X.Offset + delta.X,
startPos.Y.Scale,
startPos.Y.Offset + delta.Y
)
end
end
local function touchEnded(input, _gameProcessed)
if input == dragInput then
dragging = false
end
end
UserInputService.TouchStarted:Connect(touchStarted)
UserInputService.TouchMoved:Connect(update)
UserInputService.TouchEnded:Connect(touchEnded)
TouchSwipe
Kaydırma etkinliği, bir kullanıcının parmaklarını bir TouchEnabled cihazında kaydırırken başlar.
Bu etkinliği, bir kullanıcının parmaklarını ekranındaki cihazındaki ekrana kaydırdığında ve kullanıcının kaydırdığı yöne kaydırdığında belirlemek için kullanabilirsiniz.
Daha doğru takip için, UserInputService.TouchMoved kullanın
Kullanıcının cihazının TouchEnabled olduğunu ve bu dokunma etkinliklerinin başarılı olacağını test etmek için, UserInputService.TouchEnabled görüntüleyin.
Bu etkinlik sadece Roblox istemci penceresi fokuslu olduğunda başlar. Örneğin, pencere minimumize edildiğinde girişler yakalanmaz.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Kullanıcının hareket ettirdiği yönü gösteren bir Enum.SwipeDirection .
Hareketin içinde bulunan dokunma sayısı (örneğin parmaklar).
Oyun motoru içerideki bu girişi gözlemlediğini ve hareket ettiğini gösterir. Bu genellikle UI işlemeyi işaret eder, böylece bu girişten bir düğme dokunuldu veya tıklanıldıysa, gameProcessedEvent bu true olur. Bu aynı zamanda ContextActionService aracılığıyla bağlanan g
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local gui = script.Parent
local swipePositionY = gui.Position.Y.Offset
local swipePositionX = gui.Position.X.Offset
local camera = workspace.CurrentCamera
local maxY = camera.ViewportSize.Y - gui.Size.Y.Offset
local maxX = camera.ViewportSize.X - gui.Size.X.Offset
local function TouchSwipe(swipeDirection, _numberOfTouches, _gameProcessedEvent)
if swipeDirection == Enum.SwipeDirection.Up then
swipePositionY = math.max(swipePositionY - 200, 0)
elseif swipeDirection == Enum.SwipeDirection.Down then
swipePositionY = math.min(swipePositionY + 200, maxY)
elseif swipeDirection == Enum.SwipeDirection.Left then
swipePositionX = math.max(swipePositionX - 200, 0)
elseif swipeDirection == Enum.SwipeDirection.Right then
swipePositionX = math.min(swipePositionX + 200, maxX)
end
gui:TweenPosition(UDim2.new(0, swipePositionX, 0, swipePositionY), "Out", "Quad", 0.25, true)
end
UserInputService.TouchSwipe:Connect(TouchSwipe)
TouchTap
TouchTap etkinliği, kullanıcının bir Class.UserInputService.TouchEnabled|TouchEnabled cihazındaki ekranda parmaklarına dokunması/dokunmasında başlar.
Bu etkinlik oyun dünyasına dokunuldu/dokunulmadığına bağlı olarak ateşlenecek. Eğer kullanıcının oyun dünyasına dokunması/dokunması olmadığını arıyorsanız, GUI kullanın.
Kullanıcının cihazının TouchEnabled olduğunu ve bu dokunma etkinliklerinin başarılı olacağını test etmek için, UserInputService.TouchEnabled görüntüleyin.
Bu etkinlik sadece Roblox istemci penceresi fokuslu olduğunda başlar. Örneğin, pencere minimumize edildiğinde girişler yakalanmaz.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Parametreler
Dokunmatik hareketin içindeki parmakların konumunu gösteren bir matris Vector2 nesneleri.
Oyun motoru içerideki bu girişi gözlemlediğini ve hareket ettiğini gösterir. Bu genellikle UI işlemeyi işaret eder, böylece bu girişten bir düğme dokunuldu veya tıklanıldıysa, gameProcessedEvent bu true olur. Bu aynı zamanda ContextActionService aracılığıyla bağlanan g
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
-- The parent of this script (a ScreenGui)
local touchScreenGui = script.Parent
-- Create the GUI frame that the user interacts with through Touch
-- events
local touchGui = Instance.new("Frame")
touchGui.Name = "TouchGui"
touchGui.AnchorPoint = Vector2.new(0.5, 0.5)
-- Fires when the touches their device's screen
local function TouchTap(touchPositions, _gameProcessedEvent)
touchGui.Parent = touchScreenGui
touchGui.Position = UDim2.new(0, touchPositions[1].X, 0, touchPositions[1].Y)
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Fires when a user starts touching their device's screen and does not
-- move their finger for a short period of time
local function TouchLong(_touchPositions, _state, _gameProcessedEvent)
touchGui.Size = UDim2.new(0, 100, 0, 100)
end
-- Fires when the user moves their finger while touching their device's
-- screen
local function TouchMove(touch, _gameProcessedEvent)
touchGui.Position = UDim2.new(0, touch.Position.X, 0, touch.Position.Y)
end
-- Fires when the user stops touching their device's screen
local function TouchEnd(_touch, _gameProcessedEvent)
touchGui.Parent = nil
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Only use the Touch events if the user is on a mobile device
if UserInputService.TouchEnabled then
UserInputService.TouchTap:Connect(TouchTap)
UserInputService.TouchLongPress:Connect(TouchLong)
UserInputService.TouchMoved:Connect(TouchMove)
UserInputService.TouchEnded:Connect(TouchEnd)
end
TouchTapInWorld
TouchTapInWorld etkinliği, kullanıcının ekranda bir TouchEnabled cihazındaki parmaklarına dokunması/dokunmasında başlar. Kullanıcı oyun dünyasında dokunurken yanıtlanır.
Bu etkinliği kullanarak bir kullanıcının ekrana dokunmadığını belirleyebilir ve bir GUI öğesine dokunmadığını yapabilirsiniz. Eğer kullanıcı bir GUI öğesine dokunursa, UserInputService.TouchTap yerine TouchTapInWorld yerine yanıtlanır.
Kullanıcının cihazının TouchEnabled olduğunu ve bu dokunma etkinliklerinin başarılı olacağını test etmek için, UserInputService.TouchEnabled görüntüleyin.
Bu etkinlik sadece Roblox istemci penceresi fokuslu olduğunda başlar. Örneğin, pencere minimumize edildiğinde girişler yakalanmaz.
Yalnızca yerel olarak çalıştığından, sadece bir LocalScript içinde kullanılabilir.
Ayrıca bakınız:
Parametreler
Kullanıcının bir GUI öğesine dokunup dokunmadığı.
Kod Örnekleri
local UserInputService = game:GetService("UserInputService")
local camera = workspace.CurrentCamera
local LENGTH = 500
local function createPart(position, processedByUI)
-- Do not create a part if the player clicked on a GUI/UI element
if processedByUI then
return
end
-- Get Vector3 world position from the Vector2 viewport position
local unitRay = camera:ViewportPointToRay(position.X, position.Y)
local ray = Ray.new(unitRay.Origin, unitRay.Direction * LENGTH)
local hitPart, worldPosition = workspace:FindPartOnRay(ray)
-- Create a new part at the world position if the player clicked on a part
-- Do not create a new part if player clicks on empty skybox
if hitPart then
local part = Instance.new("Part")
part.Parent = workspace
part.Anchored = true
part.Size = Vector3.new(1, 1, 1)
part.Position = worldPosition
end
end
UserInputService.TouchTapInWorld:Connect(createPart)
WindowFocusReleased
Class.UserInputService PencereAlanıYayınlandı olayı, Roblox klieninin odak kaybettiğinde ateşlenir - genellikle kullanıcı tarafından minimized edildiğinde Roblox klieninin.
Örneğin, aşağıdaki kod, Roblox istemcisi fokusu kaybettiğinde her defasında "Window focus released" yazdırır.
local UserInputService = game:GetService("UserInputService")
UserInputService.WindowFocusReleased:Connect(function()
print("Window focus released")
end)
Bu etkinliği UserInputService.WindowFocused ile bir arada kullanarak Roblox istemcisinin ekranına aktif olarak odaklanıp odaklanmadığını izleyebilirsiniz.
Yalnızca yerel olarak çalıştığından, sadece bir LocalScript içinde kullanılabilir.
Kod Örnekleri
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = Instance.new("RemoteEvent")
afkEvent.Name = "AfkEvent"
afkEvent.Parent = ReplicatedStorage
local function setAfk(player, afk)
if afk then
local forcefield = Instance.new("ForceField")
forcefield.Parent = player.Character
else
local forcefield = player.Character:FindFirstChildOfClass("ForceField")
if forcefield then
forcefield:Destroy()
end
end
end
afkEvent.OnServerEvent:Connect(setAfk)
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = ReplicatedStorage:WaitForChild("AfkEvent")
local function focusGained()
afkEvent:FireServer(false)
end
local function focusReleased()
afkEvent:FireServer(true)
end
UserInputService.WindowFocused:Connect(focusGained)
UserInputService.WindowFocusReleased:Connect(focusReleased)
WindowFocused
Class.UserInputServiceUserInputService olayı, Roblox istemcisi penceresinin odaklanmasında başlar - genellikle Roblox istemcisi penceresi maksimum/aktif olarak açıkken.
Örneğin, aşağıdaki kod, Roblox istemcisi odaklanınca her defasında "Window focused" yazdırır.
local UserInputService = game:GetService("UserInputService")
UserInputService.WindowFocused:Connect(function()
print("Window focused")
end)
Bu etkinliği UserInputService.WindowFocusReleased ile birlikte kullanarak Roblox istemcisinin ekranına aktif olarak odaklanıp odaklanmadığını izleyebilirsiniz.
Bu olay yalnızca yerel olarak başlar, bu yüzden sadece bir LocalScript içinde kullanılabilir.
Kod Örnekleri
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = Instance.new("RemoteEvent")
afkEvent.Name = "AfkEvent"
afkEvent.Parent = ReplicatedStorage
local function setAfk(player, afk)
if afk then
local forcefield = Instance.new("ForceField")
forcefield.Parent = player.Character
else
local forcefield = player.Character:FindFirstChildOfClass("ForceField")
if forcefield then
forcefield:Destroy()
end
end
end
afkEvent.OnServerEvent:Connect(setAfk)
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = ReplicatedStorage:WaitForChild("AfkEvent")
local function focusGained()
afkEvent:FireServer(false)
end
local function focusReleased()
afkEvent:FireServer(true)
end
UserInputService.WindowFocused:Connect(focusGained)
UserInputService.WindowFocusReleased:Connect(focusReleased)