UserInputService

Artık kullanılmayanları göster

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Oluşturulamaz
Hizmet
Çoğaltılmamış

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

UserInputService

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

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    Kullanıcının cihazının hızlandırıcıya sahip olup olmadığını açıklar.

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    Bir kullanıcının kullandığı cihazın mevcut bir oyun cihazı olup olmadığını açıklar.

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    Kullanıcının cihazının bir giroskopa sahip olup olmadığını açıklar.

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    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.

  • Çoğaltılmamış
    Paralel oku

    Kullanıcının Mouse 'inin çıkışını ölçeği artırır.

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    Kullanıcının cihazının bir fare'i olup olmadığını açıklar.

  • MouseIcon:ContentId
    Paralel oku

    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.

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    Ekran üzerindeki klavyenin konumunu belirler.

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    Ekran üzerindeki klavyenin boyutunu belirler.

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    Mevcut bir on-screen klavyenin kullanıcının ekranında görünüp görünmediğini açıklar.

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    Kullanıcının mevcut cihazının dokunmatik bir ekrana sahip olup olmadığını açıklar.

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    Kullanıcının bir sanal gerçeklik kulaklıkkullanıyor olup olmadığını gösterir.

Yöntemler

Etkinlikler

Özellikler

AccelerometerEnabled

Salt Okunur
Çoğaltılmamış
Paralel oku

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.AccelerometerEnabled
if accelerometerEnabled then
print("Accelerometer enabled!")
else
print("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

Move a Ball using the Accelerometer

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
Create a Gyroscopic Camera

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

Salt Okunur
Çoğaltılmamış
Paralel oku

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

How to Set the Active Gamepad for Input

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

Salt Okunur
Çoğaltılmamış
Paralel oku

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.GyroscopeEnabled
if gyroIsEnabled then
print("Gyroscope is enabled!")
else
print("Gyroscope is not enabled!")
end

As UserInputService sadece kullanıcı tarafındadır, bu özellik sadece bir LocalScript içinde kullanılabilir.

Kod Örnekleri

Create a Gyroscopic Camera

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

Salt Okunur
Çoğaltılmamış
Paralel oku

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

Check if Keyboard is Enabled

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

Paralel oku

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:

  1. Varsayılan : Farenin kullanıcının ekranında özgürce hareket etmesine izin verir.
  2. Kilit Merkeziyesi : Farenin kilitli ve merkezi, kullanıcının ekranının merkezinden hareket edemez.
  3. 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

Create a Binoculars Script

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
Create a Custom CameraScript

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

Çoğaltılmamış
Paralel oku

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

Create a Binoculars Script

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

Salt Okunur
Çoğaltılmamış
Paralel oku

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 then
print("The user's device has an available mouse!")
else
print("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

Create a Binoculars Script

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

ContentId
Paralel oku

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

UserInputService.MouseIcon

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

Paralel oku

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

Hide Mouse During Keyboard Input

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

Salt Okunur
Çoğaltılmamış
Paralel oku

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

UserInputService.OnScreenKeyboardPosition

local UserInputService = game:GetService("UserInputService")
print(UserInputService.OnScreenKeyboardPosition)

OnScreenKeyboardSize

Salt Okunur
Çoğaltılmamış
Paralel oku

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

Salt Okunur
Çoğaltılmamış
Paralel oku

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

Salt Okunur
Çoğaltılmamış
Paralel oku

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 then
print("The user's device has a touchscreen!")
else
print("The user's device does not have a touchscreen!")
end

Ayrıca bakınız:

Kod Örnekleri

Create a Custom CameraScript

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

Salt Okunur
Çoğaltılmamış
Paralel oku

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.VREnabled
if isUsingVR then
print("User is using a VR headset!")
else
print("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

VR Head Tracking

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

gamepadNum: Enum.UserInputType

Oyunpad'in Enum.UserInputType 'i.

gamepadKeyCode: Enum.KeyCode

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

Binding Functions to Gamepad Controls

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

How to Set the Active Gamepad for Input

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

Print Device Acceleration

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

Moving Objects with the Gyroscope

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:

  1. Delta özelliği, son olarak gerçekleşen dönme miktarını açıklar
  2. CFrame, cihazın varsayılan referans çerçevesiyle ilgili mevcut dönme eğrisidir.

Kod Örnekleri

Print Device Rotation

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

Ignore User Input When a TextBox Is Focused

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

gamepadNum: Enum.UserInputType

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

Check Whether a Gamepad is Connected

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

gamepadNum: Enum.UserInputType

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

ContentId

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

keyCode: Enum.KeyCode

İlişkili görüntü alınacak Enum.KeyCode için.


Dönüşler

ContentId

Döndürülen görüntü varlık kimliği.

Kod Örnekleri

UserInputService - Get Image For KeyCode

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

Double Jump Key Combo

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

UserInputService:GetLastInputType

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>
İsimAçı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

Check which MouseButtons are Pressed

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

Getting Mouse Delta

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)
Create a Custom CameraScript

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

fare'nin mevcut ekran konumunu temsil eden bir Vector2 .

Kod Örnekleri

Move GUI To Mouse Location

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:


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.Parent
local mapKey = Enum.KeyCode.M
textLabel.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 KoduDeğ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 KoduDeğ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.Parent
local key = Enum.KeyCode.ButtonA
local mappings = {
ButtonA = "rbxasset://BUTTON_A_ASSET", -- Replace with the desired ButtonA asset
ButtonCross = "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 KoduPlayStation Dönüş DeğeriXbox 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 KoduGörüntüVarlık Kimliği

Parametreler

keyCode: Enum.KeyCode

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

gamepadNum: Enum.UserInputType

Oyunpad'in Enum.UserInputType 'i.


Dönüşler

Amount.Players.KeyCode|KeyCodes ile desteklenen bir dizi KeyCode|KeyCodes .

Kod Örnekleri

Binding Supported Gamepad KeyCodes

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.ButtonA
local gamepad = Enum.UserInputType.Gamepad1
local 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:

Parametreler

gamepadNum: Enum.UserInputType

UserInputType of the given gamepad'in kullanıcı girişi.

gamepadKeyCode: Enum.KeyCode

Belirlenen düğmenin Enum.KeyCode kodu.


Dönüşler

Belirlenen oyun konsolu düğmesi basılır mı yoksa basılmaz mı.

Kod Örnekleri

Special Action on Gamepad Button Combo

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:

Parametreler

keyCode: Enum.KeyCode

anahtarEnum.KeyCode 'i.


Dönüşler

Belirli anahtarın tutulup tutulmadığı.

Kod Örnekleri

Special Action on Key Combo Press

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

mouseButton: Enum.UserInputType

Farenin Enum.UserInputType kısmı.


Dönüşler

Mevcut olarak tutulan fare butonu.

Kod Örnekleri

Create a Custom CameraScript

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) then
print("Gamepad is a navigation gamepad!")
else
print("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

gamepadEnum: Enum.UserInputType

Belirlenen oyun konsolunun Enum.UserInputType ı.


Dönüşler

Belirlenen oyun cihazı bir navigasyon oyun cihazı olup olmadığı.

RecenterUserHeadCFrame

void

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

void

Kod Örnekleri

UserInputService:RecenterUserHeadCFrame

local UserInputService = game:GetService("UserInputService")
UserInputService:RecenterUserHeadCFrame()

SetNavigationGamepad

void

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

gamepadEnum: Enum.UserInputType

Belirlenen oyun konsolunun Enum.UserInputType ı.

enabled: bool

Belirlenen oyun konsolunun GUI navigatörünü hareket ettirebilir mi.


Dönüşler

void

Kod Örnekleri

UserInputService:SetNavigationGamepad

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

acceleration: InputObject

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

Control Players Using the Accelerometer

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

gravity: InputObject

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

Move a Ball using the Accelerometer

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
Create a Gyroscopic Camera

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

rotation: InputObject

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.

cframe: CFrame

cihazmevcut yönünü temsil eden bir CFrame .


Kod Örnekleri

Create a Gyroscopic Camera

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
Move a Ball using the Accelerometer

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

gamepadNum: Enum.UserInputType

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

gamepadNum: Enum.UserInputType

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.

gameProcessedEvent: bool

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

Handling InputBegan

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

gameProcessedEvent: bool

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

Handling InputChanged

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

gameProcessedEvent: bool

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

Handling InputEnded

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

Disable Jumping

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

lastInputType: Enum.UserInputType

Son giriş yazgösteren bir Enum.UserInputType .


Kod Örnekleri

Hide Mouse During Keyboard Input

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

wheel: number
pan: Vector2
pinch: number
gameProcessedEvent: bool

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

textboxReleased: TextBox

Class.Toolbar konsantrasyonunu kaybetti.


Kod Örnekleri

TextBoxFocusReleased

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

textboxFocused: TextBox

Alanına odaklanan TextBox .


Kod Örnekleri

Modifying a TextBox on Focused and FocusReleased

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.

gameProcessedEvent: bool

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

The Difference Between TouchTap and TouchLongPress

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

touchPositions: Array

Hareketin içindeki parmakların konumunu gösteren bir matris Vector2 nesneleri.

gameProcessedEvent: bool

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

The Difference Between TouchTap and TouchLongPress

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.

gameProcessedEvent: bool

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

The Difference Between TouchTap and TouchLongPress

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

touchPositions: Array

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

totalTranslation: Vector2

Panosun başlangıcından sonuna kadar (in pixel) panosun boyutu.

velocity: Vector2

Panosunun hızı (her saniye per pixel).

gameProcessedEvent: bool

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

Create a Custom CameraScript

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

touchPositions: Array

Dokunma hareketinin ekran pozisyonunu, katman olarak gösteren bir matris Vector2s,

scale: number

Çıkış noktasından başlayan çekimin büyüklüğü (像) başlangıç çekim pozisyonlarına bölünür.

velocity: number

Dokunma hızı (her saniye per pixel).

gameProcessedEvent: bool

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

Create a Custom CameraScript

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

touchPositions: Array

Hareketin içindeki parmakların konumlarını gösteren bir matris.

rotation: number

Hareketin başlangıcından bu yana hareketin dönme sayısı.

velocity: number

Değişimin süresi (saniye) ile değişimin yönü arasındaki değişiklik.

gameProcessedEvent: bool

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

Create a Custom CameraScript

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.

gameProcessedEvent: bool

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

Tracking Touches

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

swipeDirection: Enum.SwipeDirection

Kullanıcının hareket ettirdiği yönü gösteren bir Enum.SwipeDirection .

numberOfTouches: number

Hareketin içinde bulunan dokunma sayısı (örneğin parmaklar).

gameProcessedEvent: bool

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

Touch Swipe a GUI

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

touchPositions: Array

Dokunmatik hareketin içindeki parmakların konumunu gösteren bir matris Vector2 nesneleri.

gameProcessedEvent: bool

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

The Difference Between TouchTap and TouchLongPress

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

position: Vector2

Dokunmanın konumunu gösteren bir Vector2 .

processedByUI: bool

Kullanıcının bir GUI öğesine dokunup dokunmadığı.


Kod Örnekleri

Create a Part in World at Touch Position

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

Window Focus AFK Script (Script)

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)
Window Focus AFK Script (LocalScript)

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

Window Focus AFK Script (Script)

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)
Window Focus AFK Script (LocalScript)

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)