UserInputService

非推奨を表示

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

作成できません
サービス
複製されていません

UserInputService は、ユーザーのデバイスに利用可能なさまざまな種類の入力を検出し、キャプチャするサービスです。

このサービスの主な目的は、ゲームパッド、タッチスクリーン、キーボードなどの利用可能な入力の多様性に対応するためです。 LocalScript は、デバイスに応じて異なるアクションを実行し、最終ユーザーに最高のエクスペリエンスを提供できるようにします。

このサービスの一部として、ユーザーがGUI、ツール、その他のゲームインスタンスとインタラクトするときにユーザーの入力を検出する機能が含まれます。ユーザーの入力を検出するには、サービスは UserInputService.TouchStarted 、または

このサービスはクライアント側のみにのみ機能し、 LocalScript または ModuleScript によって必要になる LocalScript のみを使用している場合にのみ機能します。ユーザー入力サービスはクライアント側のみにのみユーザーの入力を検出でき、 2>Class.LocalScript</

また、ContextActionService を参照してください。これは、複数のユーザーの入力に機能をバインドできるサービスです。

コードサンプル

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)

概要

プロパティ

  • 読み取り専用
    複製されていません
    並列読み取り

    ユーザーのデバイスに加速度センサーがあるかどうかを記述します。

  • 読み取り専用
    複製されていません
    並列読み取り

    ユーザーが使用しているデバイスにゲームパッドが使用可能かどうかを記述します。

  • 読み取り専用
    複製されていません
    並列読み取り

    ユーザーのデバイスにギロスコープがあるかどうかを記述します。

  • 読み取り専用
    複製されていません
    並列読み取り

    ユーザーのデバイスにキーボードが含まれているかどうかを記述します。

  • ユーザーのマウスが自由に移動できるか、ロックされているかを決定します。

  • 複製されていません
    並列読み取り

    ユーザーの Mouse のデルタ (変更) 出力をスケールします。

  • 読み取り専用
    複製されていません
    並列読み取り

    ユーザーのデバイスにマウスが含まれているかどうかを記述します。

  • MouseIcon:ContentId
    並列読み取り

    ユーザーマウスアイコンとして使用される画像のコンテンツID。

  • 並列読み取り

    Class.Mouse アイコンが表示されるかどうかを決定します。

  • 読み取り専用
    複製されていません
    並列読み取り

    画面キーボードの位置を決定します。

  • 読み取り専用
    複製されていません
    並列読み取り

    画面キーボードのサイズを決定します。

  • 読み取り専用
    複製されていません
    並列読み取り

    現在、ユーザーの画面に表示されているオンスクリーンキーボードが表示されているかどうかを記述します。

  • 読み取り専用
    複製されていません
    並列読み取り

    ユーザーの現在のデバイスにタッチスクリーンが含まれているかどうかを記述します。

  • 読み取り専用
    複製されていません
    並列読み取り

    ユーザーがバーチャルリアリティヘッドセットを使用しているかどうかを示します。

方法

イベント

プロパティ

AccelerometerEnabled

読み取り専用
複製されていません
並列読み取り

このプロパティは、ユーザーのデバイスに加速度センサーがあるかどうかを記述します

加速度センサーは、加速度 (速度の変化) を測定するために見つけられるコンポーネントです。

たとえば、次のコードスナップでは、ユーザーのデバイスが加速度センサーを持っているかどうかをチェックする方法を示しています。


local UserInputService = game:GetService("UserInputService")
local accelerometerEnabled = UserInputService.AccelerometerEnabled
if accelerometerEnabled then
print("Accelerometer enabled!")
else
print("Accelerometer not enabled!")
end

デバイスに加速度センサーが有効になっている場合は、UserInputService:GetDeviceAcceleration() 機能またはデバイスの加速度センサー変更を追跡することで、現在の加速度を取得できます。

Class.UserInputService はクライアント側のみであるため、このプロパティは LocalScript でのみ使用できます。

コードサンプル

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

読み取り専用
複製されていません
並列読み取り

このプロパティは、ユーザーが使用しているデバイスが利用可能なゲームパッドを持っているかどうかを記述します。ゲームパッドが利用可能である場合は、UserInputService:GetConnectedGamepads() を使用して、接続されたゲームパッドのリストを取得できます。

Class.UserInputService はクライアント側のみであるため、このプロパティは LocalScript でのみ使用できます。

参照してください:

コードサンプル

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

読み取り専用
複製されていません
並列読み取り

このプロパティは、ユーザーのデバイスにジャイロスコープがあるかどうかを記述します。

ジロスコープは、オリエンテーションと回転速度を検出するほとんどのモバイルデバイスにあるコンポーネントです。

ユーザーのデバイスにジャイロスコープがある場合は、UserInputService:GetDeviceRotation() 機能と UserInputService.DeviceRotationChanged イベントを使用して、ゲームに組み込むことができます。


local UserInputService = game:GetService("UserInputService")
local gyroIsEnabled = UserInputService.GyroscopeEnabled
if gyroIsEnabled then
print("Gyroscope is enabled!")
else
print("Gyroscope is not enabled!")
end

Class.UserInputService はクライアント側のみであるため、このプロパティは LocalScript でのみ使用できます。

コードサンプル

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

読み取り専用
複製されていません
並列読み取り

このプロパティは、ユーザーのデバイスにキーボードが利用可能かどうかを記述します。このプロパティは、ユーザーのデバイスにキーボードが利用可能な場合、または利用可能でない場合に true です。

ユーザーが利用可能なキーボードを持っているかどうかを判断するのに使用できます - これは、UserInputService:IsKeyDown() またはUserInputService:GetKeysPressed() をチェックするために使用することが重要です。

Class.UserInputService はクライアント側のみであるため、このプロパティは LocalScript でのみ使用できます。

コードサンプル

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

並列読み取り

このプロパティは、ユーザーのマウスの動作を Enum.MouseBehavior 枚に基づいて設定します。デフォルトの値は、Enum.MouseBehavior.Default です。

3つの値に設定できます:

  1. デフォルト : マウスはユーザーの画面を自由に移動します。
  2. ロックセンター : マウスはロックされており、ユーザーの画面の中心から移動できません。
  3. LockCurrentPosition : マウスはロックされており、移動できません。その時点のユーザーの画面上の現在の位置にロックされています。

このプロパティの値は、イベントトラッキングマウスの動きの感度に影響しません。たとえば、 GetMouseDelta は、マウスがロックされているかどうかにかかわらず、ピクセル単位の Vector2 の画面位置を返します。その結果

このプロパティは、GuiButtonModal が有効になっている場合、またはプレイヤーの右マウスボタンが下にある場合、GuiButton.Visible をオーバーライドします。

注意、マウスがロックされている場合、UserInputService.InputChanged は、プレイヤーがマウスを動かすときにまだ発動し、Class.UserInputService.InputLoaded によってマウスが移動した方向にパスします。さらに、プレイヤーがゲームから追放された場合、マウスは強制的にアンロックされます。

Class.UserInputService はクライアント側のみであるため、このプロパティは LocalScript でのみ使用できます。

コードサンプル

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

複製されていません
並列読み取り

このプロパティは、ユーザーの Mouse の感度を決定します。

感度は、物理マウスの移動をゲーム内のマウス移動にどの程度に変換するかを決定します。これは、GetMouseDelta 、マウスの移動などの感度を調整するために使用されることがあります。

このプロパティは、マウスアイコンの移動に影響しません。また、カメラ感度 設定は、クライアントの 設定 タブの マウスモーション トラッキングを調整することもありません。

このプロパティには最大 10 の値と最小 0 の値があります。低い値は低感度に対応し、高い値は高感度に対応します。

感度が 0 の場合、マウスの動きを追跡するイベントは引き続き発生しますが、変更マウスポジションを表すすべてのパラメータとプロパティは Vector2.new() または Datatype. Vector3|Vector

コードサンプル

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

読み取り専用
複製されていません
並列読み取り

このプロパティは、ユーザーのデバイスにマウスが利用可能かどうかを記述します。このプロパティは、ユーザーのデバイスにマウスが利用可能な場合、または利用可能でない場合に true です。


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 マウス機能を使用する前に、これを確認することは重要です。UserInputService:GetMouseLocation() などの。

Class.UserInputService はクライアント側のみであるため、このプロパティは LocalScript でのみ使用できます。

参照してください:

コードサンプル

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
並列読み取り

マウスアイコン プロパティは、ポインターとして使用する画像を決定します。空の場合は、デフォルトの矢印が使用されます。 Class.ImageButton 、 ImageButtonTextButton 、または 2>Class.ProximityPrompt2> の

カーソルを完全に非表示にするには、 透明な画像を使用しない で、UserInputService.MouseIconEnabled を偽に設定します。代わりに、Class.UserInputService.MouseIconEnabled を偽に設定します。

コードサンプル

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

並列読み取り

このプロパティは、Mouse アイコンが表示されるかどうかを決定します。true マウスのアイコンが表示されるとき、false そうではありません。

たとえば、以下のコードスナップは、マウスのアイコンを非表示にします。


local UserInputService = game:GetService("UserInputService")
UserInputService.MouseIconEnabled = false

Class.UserInputService はクライアント側のみであるため、このプロパティは LocalScript でのみ使用できます。

コードサンプル

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

読み取り専用
複製されていません
並列読み取り

このプロパティは、画面上のキーボードの位置をピクセルで記述します。キーボードの位置は、Vector2.new(0, 0) で非表示になります。

Class.UserInputService はクライアント側のみですので、このプロパティは LocalScript または Script に 1>Class.BaseScript.RunContext|RunContext1> を設定している場合にのみ使用できます。

また、OnScreenKeyboardVisibleOnScreenKeyboardSize を参照してください。

コードサンプル

UserInputService.OnScreenKeyboardPosition

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

OnScreenKeyboardSize

読み取り専用
複製されていません
並列読み取り

このプロパティは、画面キーボードのサイズをピクセルで表示します。キーボードのサイズは、Vector2.new(0, 0) で表示されるときにはありません。

Class.UserInputService はクライアント側のみですので、このプロパティは LocalScript または Script に 1>Class.BaseScript.RunContext|RunContext1> を設定している場合にのみ使用できます。

また、OnScreenKeyboardVisibleOnScreenKeyboardPosition を参照してください。

OnScreenKeyboardVisible

読み取り専用
複製されていません
並列読み取り

このプロパティは、ユーザーの画面に現在表示されているオンスクリーンキーボードが表示されているかどうかを記述します。

Class.UserInputService はクライアント側のみですので、このプロパティは LocalScript または Script に 1>Class.BaseScript.RunContext|RunContext1> を設定している場合にのみ使用できます。

また、OnScreenKeyboardSizeOnScreenKeyboardPosition を参照してください。

TouchEnabled

読み取り専用
複製されていません
並列読み取り

このプロパティは、ユーザーの現在のデバイスにタッチスクリーンが利用可能かどうかを記述します。

このプロパティは、ユーザーのデバイスにタッチ画面があるかどうかを判断するために使用され、その結果によりタッチイベントが発動するかどうかを決定します。TouchEnabled が true の場合、UserInputService.TouchStarted およびUserInputService.TouchEnded などのユーザー入力サービス

以下のコードスナップでは、ユーザーのデバイスがタッチスクリーンを持っているかどうかを印刷します。


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

参照してください:

コードサンプル

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

読み取り専用
複製されていません
並列読み取り

このプロパティは、ユーザーがバーチャルリアリティ (VR) デバイスを使用しているかどうかを記述します。

VR デバイスが有効になっている場合は、UserInputService:GetUserCFrame() などの機能を使用して、その場所と移動をインタラクトできます。UserInputService.UserCFrameChanged イベントを使用して、VR デバイスの移動にも反応できます。


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

Class.UserInputService はクライアント側のみであるため、このプロパティは LocalScript でのみ使用できます。

参照してください:

コードサンプル

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

方法

GamepadSupports

この関数は、Enum.UserInputType ゲームパッドが与えられた Enum.KeyCode に対応するボタンをサポートしているかどうかを返します。この関数は、有効なゲームパッドの入力を決定するために使用されます。

どの Enum.UserInputType ゲームパッドに接続されているかを確認するには、UserInputService:GetConnectedGamepads() を使用します。

As UserInputService はクライアント側のみであるため、この関数は LocalScript 内でのみ使用できます。

参照してください:

パラメータ

gamepadNum: Enum.UserInputType

ゲームパッドの Enum.UserInputType

gamepadKeyCode: Enum.KeyCode

ボタンの Enum.KeyCode


戻り値

与えられたゲームパッドが与えられた Enum.KeyCode に対応するボタンをサポートしているかどうか。

コードサンプル

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

この関数は、現在接続されている Enum.UserInputType ゲームパッドのアレイを返します。ゲームパッドが接続されていない場合は、このアレイは空です。また、ゲームパッドが接続されていない場合は、このアレイは空です。たとえゲームパッドが接続されていない場合でも、このイベントはゲームパッド1オブジェクトを返します

たとえば、次のコードスナップは、接続されたゲームパッドを取得し、connectedGamepads という変数に保存します。


local UserInputService = game:GetService("UserInputService")
local connectedGamepads = UserInputService:GetConnectedGamepads()

特定のゲームパッドが接続されているかどうかを確認するには、UserInputService:GetGamepadConnected() を使用します。

As UserInputService はクライアント側のみであるため、この関数は LocalScript 内でのみ使用できます。

参照してください:


戻り値

ユーザーのデバイスに接続されたゲームパッドに対応する UserInputTypes のアレイ。

コードサンプル

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 機能は、ユーザーのデバイスの現在の加速度を決定します。それは、デバイスの現在の加速度を説明する InputObject を返します。

これが機能するには、ユーザーのデバイスには加速度センサーが有効でなければなりません。ユーザーのデバイスに加速度センサーが有効であるかどうかを確認するには、 UserInputService.AccelerometerEnabled プロパティをチェックできます。

ユーザーのデバイスの加速度が変更される代わりに、UserInputService.DeviceAccelerationChanged イベントを使用することもできます。

ローカルにのみ発行されるため、LocalScript 内のみで使用できます。


戻り値

コードサンプル

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

この関数は、デバイスの現在の重力ベクトルを記述する InputObject を返します。

重力ベクトルは、デバイスの向きが実際の重力の向きに対してどのようになっているかによって決まります。たとえば、デバイスが完全に正しく(ポートレート)なら、重力ベクトルは Datatype.Vector3|Vector3.new(0,

この関数は、ユーザーのデバイスがゲーム内で重力に影響を与えたり、ボールなどのゲームオブジェクトを移動するために使用されるかもしれません。

重力は、モバイルデバイスなど、ジャイロスコープを有効にしたデバイスを使用するプレイヤーにのみ追跡されます。

ユーザーのデバイスにジャイロスコープが有効であるかどうかをチェックするには、UserInputService.GyroscopeEnabled の値をチェックします。デバイスにジャイロスコープが有効である場合は、UserInputService.DeviceGravityChanged イベントを使用して、ユーザーのデバイスの重力の変化を追跡で

As UserInputService はクライアント側のみであるため、この関数は LocalScript 内でのみ使用できます。


戻り値

コードサンプル

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

この関数は、InputObject と、CFrame を返し、デバイスの現在の回転ベクトルを記述します。

これは、InputObject で発動します。入力オブジェクトの Enum.InputType.Gyroscope プロパティは、各ローカルデバイスの軸に対して合計の回転を追跡する En册.InputType|枚列.InputType.Gyroscope です。

デバイスの回転は、gyroscope があるデバイスにのみ追跡できます。

この関数はローカルで発動するため、 LocalScript 内のみで使用できます。


戻り値

2つのプロパティを含むテープル:

  1. デルタプロパティは、最後に発生した回転量を記述します
  2. CFrame は、デバイスのデフォルトの参照フレームに対する当該デバイスの現在の回転量です。

コードサンプル

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

この関数は、TextBox クライアントが現在焦点にあるものを返します。 Class.Toolbar:CaptureFocus() 機能を使用して、ユーザーがテキストボックスを手動で選択するか、 Class.Toolbar:CaptureFocus() 機能を使用して選択を強制することができます。1>Class.Toolbar:CaptureFocus1> が選択されていない場合、この関数は

As UserInputService はクライアント側のみであるため、この関数は LocalScript 内でのみ使用できます。

参照してください:


戻り値

コードサンプル

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

この関数は、енью.UserInputType を与えたゲームパッドがクライアントに接続されているかどうかを返します。

これは、「ゲームパッド1」 などの特定のゲームパッドがクライアントのデバイスに接続されているかどうかをチェックするために使用できます。

接続されたすべてのゲームパッドのリストを取得するには、UserInputService:GetConnectedGamepads() を使用します。

As UserInputService はクライアント側のみであるため、この関数は LocalScript 内でのみ使用できます。

参照してください:

パラメータ

gamepadNum: Enum.UserInputType

ゲームパッドの Enum.UserInputType の内容。


戻り値

ゲームパッドが Enum.UserInputType に関連されているかどうか。

コードサンプル

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

この関数は、InputObjects が与えられた Enum.UserInputType ゲームパッドのすべての可用な入力について、それぞれの入力の最後の入力状態を表示するアレイを返します。

接続されたゲームパッドの UserInputTypes を見つけるには、UserInputService:GetConnectedGamepads() を使用します。

この関数はローカルにのみ発動するため、 LocalScript 内でのみ使用できます。

参照してください:

パラメータ

gamepadNum: Enum.UserInputType

ゲームパッドに対応する Enum.UserInputType


戻り値

Class.InputObject|InputObjects アレイ、Class.InputObject|InputObjects が、現在のゲームパッドのすべての入力の状態を表示します。

GetImageForKeyCode

ContentId

このメソッドは、リクエストされた Enum.KeyCode を取得し、現在のゲームパッドデバイスに関連する画像を返します(限定: Xbox、PlayStation および Windows)。これにより、接続されたコントローラーが Xbox のコントローラーである場合、ユーザーは Xbox ア

パラメータ

keyCode: Enum.KeyCode

枚数.KeyCode により、関連する画像を取得する。


戻り値

ContentId

返された画像アセットID。

コードサンプル

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

この関数は、現在押されているキーに関連付けられた InputObjects のアレイを返します。

この配列をイテレートして、現在どのキーが押されているかを判断するために、InputObject.KeyCode 値を使用してイテレートできます。

特定のキーが押されているかどうかを確認するには、UserInputService:IsKeyDown() を使用します。

As UserInputService はクライアント側のみであるため、この関数は LocalScript 内でのみ使用できます。


戻り値

現在押されているキーに関連する InputObjects のアレイ。

コードサンプル

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

この関数は、ユーザーの最近の入力に関連付けられた「Enum.UserInputType」を返します。

たとえば、ユーザーの前の入力がスペースバーを押していた場合、Enum.UserInputTypeは、*「キーボード」*に戻ります。

Class.UserInputService.LastInputTypeChangedイベントは、ユーザーが変更する Enum.UserInputType の最後の使用時間を追跡することができます。

As UserInputService はクライアント側のみであるため、この関数は LocalScript 内でのみ使用できます。


戻り値

ユーザーの最新の入力と関連付けられた Enum.UserInputType

コードサンプル

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

この関数は、現在マウスボタンが押されている InputObjects に対応するアレイを返します。

この関数によって追跡されるマウスボタンには、次のものが含まれます:


<tr>
<td>ボタン1</td>
<td>左のマウスボタン。</td>
</tr>
<tr>
<td>マウスボタン2</td>
<td>右マウスボタン。</td>
</tr>
<tr>
<td>マウスボタン3</td>
<td>中央のマウスボタン。</td>
</tr>
名前説明

ユーザーが関数を呼び出したときにマウスボタンを押していない場合、空の配列を返します。

As UserInputService はクライアント側のみであるため、この関数は LocalScript 内でのみ使用できます。


戻り値

現在、マウスボタンを押し続けるときに対応する InputObjects 配列。

コードサンプル

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

この関数は、Mouse の位置を、最後のレンダリングフレームのピクセル単位で変更することで変更を返します。この関数は、Vector2 プロパティを使用してマウスをロックしている場合にのみ機能します。マウ

クライアントの設定により、マウスの感度が UserInputService.MouseDeltaSensitivity に影結果を与えます。

As UserInputService はクライアント側のみであるため、この関数は LocalScript 内でのみ使用できます。


戻り値

マウスの移動に変更を加えます。

コードサンプル

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

この関数は、<a href="/reference/engine/datatypes">データタイプ</a>、<a href="/reference/engine/datatypes/class-Mouse.html">Class.Mouse</a> のピクセルに対するトップ左隅のプレイヤーの Mouse の位置を表示します。これは、GUI のインセットには含まれません。

マウスポインタの場所がオフスクリーンになっているか、プレイヤーのデバイスにマウスがない場合、返される値は未定です。

As UserInputService はクライアント側のみであるため、この関数は LocalScript 内でのみ使用できます。


戻り値

マウスの現在の画面位置をピクセル単位で表示する Vector2

コードサンプル

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

この関数は、GUI ナビゲーションに接続されて有効にするためのゲームパッドのアレイを返します。このリストは、優先順位の下で列を返し、どのゲームパッドがナビゲーションを制御するかを判断するために反復可能です。

接続されたゲームパッドがナビゲーションゲームパッドであるかどうかは、ナビゲーションGUIを制御するゲームパッドのみを決定します。これにより、ナビゲーションコントロール操作影響しません。

Class.UserInputService はクライアント側のみであるため、この関数は LocalScript でのみ使用できます。

参照してください:


戻り値

GUI ナビゲーションに使用できる、優先順位の下の Enum.UserInputType|UserInputTypes の配列。

GetStringForKeyCode

GetStringForKeyCode は、ユーザーが入力するために押すべきキーを表示します。Enum.KeyCode を入力するためにキーボードレイアウトを考慮しながら、入力するためにユーザーが押すべきキーを返します。For key codes that require some modifier to be held, this function returns the key to be pressed in addition to the modifier. 以下の例に示すように

Roblox を QWERTY キーボードレイアウトで使用する場合、キーコードは同等の QWERTY ポジションにマップされ


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 キーボードの例


<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> 因みに <code>@</code> は Shift で入力されています <kbd>2</kbd></td>
</tr>
</tbody>
キーコード値を返す

AZERTY キーボードの例


<tbody>
<tr>
<td><code>enum.keycode.q</code></td>
<td><code>A</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>
キーコード値を返す

ゲームパッド使用

GetStringForKeyCode() は、最近接続されたゲームパッドの Enum.KeyCode にストリングマッピングを返します。接続されていないコントローラーの場合、機能はリクエストされたキーコードのデフォルトのストリング変換を返します。

次の例では、カスタムアセットをマップする方法を示しています: ButtonA :


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

ゲームパッドマップ

方向キーコードにはデバイスに基づく違いはありません。Enum.KeyCode.ButtonSelect には、いくつかの場合、プレイステーションのマッピングを使用してユーザーが正しいボタンを見ることを確認してください。


<tbody>
<tr>
<td><code>enum.keycode.buttona</code></td>
<td><code>ボタンクロス</code></td>
<td><code>ボタンA</code></td>
</tr>
<tr>
<td><code>enum.keycode.buttonb</code></td>
<td><code>ボタンサークル</code></td>
<td><code>ボタンB</code></td>
</tr>
<tr>
<td><code>enum.keycode.buttonx</code></td>
<td><code>ボタンスクエア</code></td>
<td><code>ボタンX</code></td>
</tr>
<tr>
<td><code>enum.keycode.buttony</code></td>
<td><code>ボタントライアングル</code></td>
<td><code>ボタン Y</code></td>
</tr>
<tr>
<td><code>enum.keycode.buttonL1</code></td>
<td><code>ボタンL1</code></td>
<td><code>ボタンLB</code></td>
</tr>
<tr>
<td><code>enum.keycode.buttonl2</code></td>
<td><code>ボタンL2</code></td>
<td><code>ボタンLT</code></td>
</tr>
<tr>
<td><code>enum.keycode.buttonl3</code></td>
<td><code>ボタンL3</code></td>
<td><code>ボタンLS</code></td>
</tr>
<tr>
<td><code>enum.keycode.buttonr1</code></td>
<td><code>ボタンR1</code></td>
<td><code>ボタンRB</code></td>
</tr>
<tr>
<td><code>enum.keycode.buttonr2</code></td>
<td><code>ボタンR2</code></td>
<td><code>ボタンRT</code></td>
</tr>
<tr>
<td><code>enum.keycode.buttonr3</code></td>
<td><code>ボタンR3</code></td>
<td><code>ボタンRS</code></td>
</tr>
<tr>
<td><code>enum.keycode.buttonstart</code></td>
<td><code>ボタンオプションズ</code></td>
<td><code>ボタンスタート</code></td>
</tr>
<tr>
<td><code>enum.keycode.buttonSelect</code></td>
<td><code>ボタンタッチパッド</code> と <code>ボタン共有</code></td>
<td><code>ボタン選択</code></td>
</tr>
</tbody>
キーコードPlayStation のリターン値Xbox リターン値

キーコードのシステム画像

ユーザーインターフェイスの Enum.KeyCode のように、画像としてよく表現される ImageLabel を使用すると、次のレガシーアイコンを使用できます。ただし、GetImageForKeyCode() を使用することを


<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>Enum.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>Enum.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>Enum.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>Enum.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>enum.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>enum.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>enum.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>enum.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.LeftShift</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>enum.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>enum.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>enum.KeyCode.Apostrophe</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>enum.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>enum.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>enum.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>
キーコード画像アイテムID

パラメータ

keyCode: Enum.KeyCode

戻り値

GetSupportedGamepadKeyCodes

この関数は、KeyCodes を返し、ゲームパッドに関連付けられた Enum.UserInputType をサポートする、ゲームパッドに関連付けられたバーチャル空間のユーザー入力をサポートします。

この関数は、接続されたゲームパッドによってサポートされていない KeyCodes を特定できます。特定の KeyCodes がサポートされているかどうかは、UserInputService:GamepadSupports() を使用して確認してください。

存在しない、または接続されていないゲームパッドを呼び出すと、この関数は空の配列を返します。

As UserInputService はクライアント側のみであるため、この関数は LocalScript 内でのみ使用できます。

参照してください:

パラメータ

gamepadNum: Enum.UserInputType

ゲームパッドの Enum.UserInputType


戻り値

KeyCode|KeyCodes が与えられたゲームパッドにサポートされた配列。

コードサンプル

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

この関数は、特定のゲームパッドで特定のボタンが押されているかどうかをチェックします。 は true が指定された gamepad を押している場合、button が指定されていない場合、2>enuEnswerButton2> は falseを返します。

有効なユーザー入力タイプ

指定されたゲームパッドは、次のユーザー入力タイプの枚数の 1 つである必要があります:


<tr>
<td>Enum.UserInputType.Gamepad1-8</td>
</tr>
名前

有効なキーコード

指定されたボタンは、次の KeyCodes 列表の 1つである必要があります:


<tr>
<td>列挙コードボタンX</td>
</tr>
<tr>
<td>枚数.KeyCode.ButtonY</td>
</tr>
<tr>
<td>枚数.KeyCode.ButtonA</td>
</tr>
<tr>
<td>枚数.KeyCode.ButtonB</td>
</tr>
<tr>
<td>枚数。キーコード。ボタン R1</td>
</tr>
<tr>
<td>枚数.KeyCode.ButtonL1</td>
</tr>
<tr>
<td>enum.KeyCode.ButtonR2</td>
</tr>
<tr>
<td>枚数.KeyCode.ButtonL2</td>
</tr>
<tr>
<td>enum.KeyCode.ButtonR3</td>
</tr>
<tr>
<td>枚数.KeyCode.ButtonL3</td>
</tr>
<tr>
<td>枚数.KeyCode.ButtonStart</td>
</tr>
<tr>
<td>枚数.KeyCode.ButtonSelect</td>
</tr>
<tr>
<td>枚数.KeyCode.DPadLeft</td>
</tr>
<tr>
<td>枚数.KeyCode.DPadRight</td>
</tr>
<tr>
<td>枚数.KeyCode.DPadUp</td>
</tr>
<tr>
<td>枚数.KeyCode.DPadDown</td>
</tr>
名前

これは、A などの特定のボタンが押し続けられているかどうかをチェックするために使用できます。たとえば:


local UserInputService = game:GetService("UserInputService")
local button = Enum.KeyCode.ButtonA
local gamepad = Enum.UserInputType.Gamepad1
local isButtonHeld = UserInputService:IsGamepadButtonDown(gamepad, button)

Class.UserInputService はクライアント側のみであるため、この関数は LocalScript でのみ使用できます。

参照してください:

パラメータ

gamepadNum: Enum.UserInputType

GamePad の GamePad の GamePad の 1>GamePad1> の 4>GamePad4> の 7>GamePad7> の 0>GamePad0> の 3>GamePad3> の 6>GamePad6> の Enum.UserInputType9> の 2>GamePad2> の 5>GamePad5> の Enum.UserInputType8> の 1>GamePad1> の 4>GamePad4> の 7>GamePad7> の 9>GamePad9> の 2>GamePad2>

gamepadKeyCode: Enum.KeyCode

指定されたボタンの Enum.KeyCode


戻り値

指定されたゲームパッドボタンを押すかどうかが押されます。

コードサンプル

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

この関数は、指定された Enum.KeyCode と関連付けられたキーをユーザーが押し続けているかどうかを返します。指定されたキーが押されている場合は true 、指定されていない場合は false を返します。

これは、スペースバーなどの特定のキーが押されているかどうかをチェックするのに使用できます。たとえば:


local UserInputService = game:GetService("UserInputService")
local spaceHeld = UserInputService:IsKeyDown(Enum.KeyCode.Space)

ユーザーが押したすべてのキーのリストを取得するには、UserInputService:GetKeysPressed() 機能を使用します。

Class.UserInputService はクライアント側のみであるため、この関数は LocalScript でのみ使用できます。

参照してください:

パラメータ

keyCode: Enum.KeyCode

キーの Enum.KeyCode


戻り値

指定されたキーが押し続けられるかどうか。

コードサンプル

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

この関数はマウスボタン Enum.UserInputType を取り、現在プレッシュされているかどうかを示すブールを返します。

マウスボタンは、Enum.UserInputType 値を引数としてパスした値によってチェックされます。たとえば:


local UserInputService = game:GetService("UserInputService")
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)

Class.UserInputService はクライアント側のみであるため、この関数は LocalScript の中でのみ使用できます。

パラメータ

mouseButton: Enum.UserInputType

マウスボタンの Enum.UserInputType


戻り値

現在、マウスボタンを押し続けるかどうか。

コードサンプル

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

この関数は、指定された true ゲームパッドがナビゲーションと選択を制御する Enum.UserInputType をコントロールすることができます。

ナビゲーションゲームパッドを設定したい場合は、UserInputService:SetNavigationGamepad() を使用します。UserInputService:GetNavigationGamepads() を使用して、ナビゲーションゲームパッドのリストを取得できます。

たとえば、以下のコードは、ゲームパッド1 がナビゲーションゲームパッドであるかどうかをチェックします:


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

ナビゲーションに関わらず、接続されたすべてのゲームパッドのリストは、「UserInput/GetConnectedGamepads」を使用して取得できます。

Class.UserInputService はクライアント側のみであるため、この関数は LocalScript でのみ使用できます。

参照してください:

パラメータ

gamepadEnum: Enum.UserInputType

指定されたゲームパッドの Enum.UserInputType


戻り値

指定されたゲームパッドがナビゲーションゲームパッドであるかどうか。

RecenterUserHeadCFrame

void

この関数は、ユーザーが着用しているヘッドセットの Datatype.CFrame を、装備中のヘッドセットの Datatype.CFrame.new() にリセットします。これにより、ヘッドセットの現在のオリエンテーションは 0> Datatype.CFrame.new()0> に設定されます。

この関数を使用して、ヘッドセットの CFrame をプレイエリアの中央に移動することができます。

これは VRService 機能と同じです、VRService:RecenterUserHeadCFrame()

Class.UserInputService はクライアント側のみであるため、この関数は LocalScript でのみ使用できます。


戻り値

void

コードサンプル

UserInputService:RecenterUserHeadCFrame

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

SetNavigationGamepad

void

SetNavigationGamepad 機能は、指定された Enum.UserInputType ゲームパッドがGUIナビゲーターを移動できるかどうかを設定します。許可されているゲームパッドは、ナビゲーションゲームパッドとして評価されます。

有効 引数が true としてパスされると、ゲームパッドは GUI ナビゲーターを移動できます。如果引数が false であると、ゲームパッドは GUI ナビゲーターを移動できません。

指定されたゲームパッドがナビゲーションゲームパッドに設定されているかどうかを確認したい場合は、UserInputService:IsNavigationGamepad() 機能を使用できます。UserInputService:GetNavigationGamepads() を使用して、すべてのナビゲーションゲームパッドのリストを取得できます。

Class.UserInputService はクライアント側のみであるため、この関数は LocalScript でのみ使用できます。

参照してください:

パラメータ

gamepadEnum: Enum.UserInputType

指定されたゲームパッドの Enum.UserInputType

enabled: bool

指定されたゲームパッドがGUIナビゲータを移動できるかどうか。


戻り値

void

コードサンプル

UserInputService:SetNavigationGamepad

local UserInputService = game:GetService("UserInputService")
UserInputService:SetNavigationGamepad(Enum.UserInputType.Gamepad1, true)

イベント

DeviceAccelerationChanged

加速度センサーがあるデバイスをユーザーが移動すると、デバイスアクセラレーションが変更されたイベントが発生します。

加速度センサーは、加速度 (速度の変化) を測定するために見つけられるコンポーネントです。

ユーザーのデバイスに加速度センサーが含まれているかどうかを確認するには、UserInputService.AccelerometerEnabled を参照してください。

このイベントは、加速度センサーを持つデバイスの動きを追跡するために使用できます。サンプル使用には、モバイルデバイスが加速度センサーを持っているときにプレイヤーキャラクターを移動することが含まれます。

さらに、このイベントは、UserInputService:GetDeviceAcceleration() と一緒に使用すると、デバイスの加速度センサーがある場合、ユーザーのデバイスの現在の移動を確認することができます。

このイベントはローカルでのみ発動します - これは、デバイスの移動するプレイヤーだけがイベントを使用できることを意味し、LocalScript でのみ機能します。

パラメータ

acceleration: InputObject

Class.InputObject 、UserInputTypeClass.InputObj.Position|Position 、1>Class.InputObject.Position|Position1> 、4>Class.InputObject.Position|Position4> 、7>Class.InputObject.Position|Position7> 、0>Class.InputObject.Position|Position0> 、3>Class.InputObject.Position|Position3> 、6>Class.


コードサンプル

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 イベントは、加速度センサーを持つデバイスの重力が Vector3 変更されると発動します。

デバイスの重力ベクトルは、デバイスの X、Y、および Z 軸における重力の力を表します。重力は常に変わりませんが、デバイスが回転してオリエントエーションを変更すると、それぞれの軸における力が変わります。それぞれの軸における力は -1 から 1 のユニットベクトルで表現されます。

加速度センサーは、加速度 (速度の変化) を測定するために見つけられるコンポーネントです。

このイベントは、ユーザーのデバイスの重力の方向を判断するのに使用できます。これは、ゲーム内のオブジェクト(例: ゲーム内のオブジェクト)の重力のシミュレーションにも使用できます。

ユーザーのデバイスに加速度センサーが有効であるかどうかを確認するには、UserInputService.AccelerometerEnabled を参照してください。デバイスに加速度センサーが有効である場合は、UserInputService:GetDeviceGravity() 機能を使用して、ユーザーのデバイスの現在の重力フォースを取得できます。

パラメータ

gravity: InputObject

Class.InputObject 、 、重力の強度を各ローカルデバイスの軸に示す InputObject.Position。この位置は、装置に対する重力の方向を決定するための方向として使用できます。


コードサンプル

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 イベントが発動します。

ジロスコープは、オリエンテーションと回転速度を検出するほとんどのモバイルデバイスにあるコンポーネントです。

イベントは、デバイスのオリエンテーションを追跡し、ユーザーがデバイスを回転させるとどのように変化するかを追跡するのに便利です。現在のデバイス回転を確認するには、UserInputService:GetDeviceRotation() 機能を使用できます。

ユーザーのデバイスにギロスコープが有効であるかどうかをチェックし、このイベントが発動するかどうかは、UserInputService.GyroscopeEnabled を参照してください。

このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。

パラメータ

rotation: InputObject

Class.InputObject は、デバイスの回転に関する情報を提供します。InputObject.Position は、新しい回転位置を表示し、Vector3 は、ポジション位置の変更を表示します。1> Class.InputObj.Delta1> は、

cframe: CFrame

デバイスの現在のオリエンテーションを表示する CFrame


コードサンプル

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

ゲームパッドConnected イベントは、ゲームパッドがクライアントに接続されると発動します。

Roblox ゲームは複数のコントローラーをサポートするため、このイベントは、UserInputService.GamepadDisconnected イベントと組み合わせて使用すると、どのコントローラー/ゲームパッドがアクティブかを追跡するのに便利です。UserInputService:GetConnectedGamepads() を使用すると、正しいゲームパッ

次の例では、ゲームパッドがクライアントに接続されたときのトラッキングの使用例を示しています。


local UserInputService = game:GetService("UserInputService")
local function GamepadConnected(gamepad)
print("Player has plugged controller: " .. tostring(gamepad))
end)
UserInputService.GamepadConnected:Connect(GamepadConnected)

接続されているデバイスを見るには、UserInputService:GetConnectedGamepads() 機能を使用できます。

このイベントがローカルで発生するため、LocalScript 内のみ使用できます。

参照してください:

パラメータ

gamepadNum: Enum.UserInputType

接続されたゲームパッドの Enum.UserInputType の Menu.UserInputType です。


GamepadDisconnected

ゲームパッドの切断イベントは、ゲームパッドが切断されると発生します。

Roblox ゲームは複数のコントローラーをサポートするため、このイベントは、UserInputService.GamepadConnected イベントと組み合わせて使用すると、どのコントローラー/ゲームパッドがアクティブかを追跡するのに便利です。UserInputService:GetConnectedGamepads() を使用すると、正しいゲームパッ

次の例では、ゲームパッドがクライアントから切断されたときのトラッキングの使用例を示しています。


local UserInputService = game:GetService("UserInputService")
local function GamepadDisconnected(gamepad)
print("Player has unplugged controller: " .. tostring(gamepad))
end)
UserInputService.GamepadDisconnected:Connect(GamepadDisconnected)

このイベントがローカルで発生するため、LocalScript 内のみ使用できます。

参照してください:

パラメータ

gamepadNum: Enum.UserInputType

切断されたゲームパッドの Enum.UserInputType


InputBegan

インプットビーガンイベントは、ユーザーが人間コンピューターインターフェイスデバイス (マウスボタン、タッチ開始、キーボードボタンなど) を介してインタラクトし始めると発動します。

ユーザーが GUI 要素、ゲームパッドなどと対話するときのユーザーの開始時間を追跡するために使用できます。マウスホイールの動きはキャプチャされません。

このイベントは、UserInputService.InputChangedUserInputService.InputEnded と共に使用すると、ユーザーの入力が開始、変更、および終了するときに追跡できます。

このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。

パラメータ

ユーザーの入力に関する情報を含む InputObject インスタンス。

gameProcessedEvent: bool

ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEventtrueになります。これは、ContextActionService


コードサンプル

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 イベントは、ユーザーが人間コンピューターインターフェースのデバイス (マウスボタン、タッチ開始、キーボードボタンなど) を通じてどのようにインタラクトするかを変更すると発動します。

Roblox が自動的に処理するイベントを無視するには、ScrollingFrame のスクロールなど、gameProcessingEvent 引数が偽であることを確認してください。このイベントは、UserInputService.InputBegan と 2>Class.UserInputService.INPUTEnded2>

このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。

パラメータ

ユーザーの入力に関する情報を含む InputObject インスタンス。

gameProcessedEvent: bool

ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEventtrueになります。これは、ContextActionService


コードサンプル

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

ユーザーが人間コンピューターインターフェイスデバイス (マウスボタン、タッチ開始、キーボードボタンなど) を介してインタラクトしたときに入力終了イベントが発動します。これは、ユーザーがキーボードの鍵をリリースしたとき、マウスボタンをタッチしたときなど、トラッキングするときに便利です。

このイベントは、UserInputService.InputBeganUserInputService.InputChanged と一緒に使用すると、ユーザーの入力が始まり、変更、および終了するときに追跡できます。

このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。

パラメータ

ユーザーの入力に関する情報を含む InputObject インスタンス。

gameProcessedEvent: bool

ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEventtrueになります。これは、ContextActionService


コードサンプル

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.UserInputService ジャンプリクエストイベントは、クライアントがスペースバーまたはジャンプボタンを押すなど、ジャンプリクエストを受信したときに発動します。

このイベントは、ユーザーがPlayer.Character ジャンプを試みるときに発動します。デフォルトの動作は、プレイヤーのHumanoid.Jump プロパティを true に設定し、プレイヤーのキャラクターをジャンプさせることで応答します。

イベントは、プレイヤーがジャンプしたいと思ったときに使用できます。ジャンプを作成するのではなく、プレイヤーがジャンプするたびにデフォルトのジャンプ動作を変更するために使用する必要があります - たとえば、ジャンプを無効にするなど。

たとえば、以下のコードは、プレイヤーがジャンプリクエストを送信するたびに「ジャンプ」と印刷します。


local UserInputService = game:GetService("UserInputService")
function onJumpRequest()
print("Jump!")
end
UserInputService.JumpRequest:Connect(onJumpRequest)

このイベントは、ジャンプリクエスト を複数回発動するため、デバウンス を使用することが推奨されます。

キーやボタンを他のアクションに接続する場合は、UserInputService:GetKeysPressed()UserInputService.InputBegan 、またはContextActionService を使用することを検討してください。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。


コードサンプル

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 イベントは、クライアントが人間コンピューターインターフェイスデバイスを介してどのようにインタラクトするかを変更するたびに発動します。(例: マウス移動からマウスホイールまたは Thumbstick1 から Thumbstick2)。

入力の最後のタイプの値を取得するには、変更されているかどうかにかかわらず、UserInputService:GetLastInputType() 関数を使用できます。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。

パラメータ

lastInputType: Enum.UserInputType

最後の入力タイプを指す Enum.UserInputType


コードサンプル

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

ポインターアクション は、ユーザーが特定のポインターアクション操作実行すると発動します。たとえば、マウスホイールをスクロールすることです。

パラメータ

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

TextBoxFocusReleased

TextBoxFocusRelease イベントは、クライアントが TextBox に焦点を置くのを失ったときに発動します - 通常、クライアントが返却を押すか、/ をクリック/タッチするなど、画面上の他の場所にテキストを入力するときにクライアントがテキストを入力しなくなります。

たとえば、以下のコードは、イベントが発動したときにテキストボックスの失敗した名前を印刷します。


local UserInputService = game:GetService("UserInputService")
function TextBoxFocusReleased(textbox)
print(textbox.Name)
end
UserInputService.TextBoxFocusReleased:Connect(TextBoxFocusReleased)

Class.UserInputService.ToolbarFocused と一緒に使用すると、テキストボックスのフォーカスを取得したり失ったりするときに追跡できます。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。

参照してください:

パラメータ

textboxReleased: TextBox

焦点を失った TextBox


コードサンプル

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 イベントは、TextBox にフォーカスを合致させたときに発動します - 通常、クライアントがテキストボックスをクリック/タップして入力を開始するときに発生します。これは、TextBox:CaptureFocus() を使用してフォーカスを合致させるときにも発生します。

たとえば、以下のコードは、イベントが発動したときに TextBox の名前を印刷します。


local UserInputService = game:GetService("UserInputService")
function TextBoxFocused(textbox)
print(textbox.Name)
end)
UserInputService.TextBoxFocused:Connect(TextBoxFocused)

Class.UserInputService.FocusRelease' と一緒に使用すると、テキストボックスのフォーカスが得られたり失われたりするときを追跡できます。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。

参照してください:

パラメータ

textboxFocused: TextBox

焦点を得た TextBox


コードサンプル

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 イベントは、ユーザーが TouchEnabled デバイスの画面から指を解放したときに発動し、デバイスによるタッチ入力を終了します。

このイベントは、ユーザーがデバイスの画面を触っているかどうかを判断するのに使用できます。UserInputService.TouchStarted と組み合わせて、ユーザーが画面を開始して停止するかどうかを確認できます。

たとえば、以下のコードは、ユーザーが画面をタッチするのをやめた場所の画面ポジションを印刷します。


local UserInputService = game:GetService("UserInputService")
function TouchEnded(touch, gameProcessedEvent)
print("Touch ended at " .. tostring(touch.Position))
end
UserInputService.TouchEnded:Connect(TouchEnded)

タッチ入力オブジェクトは、タッチの寿命全体で同じ入力オブジェクトです。つまり、InputObjects を比較すると、タッチオブジェクトがタッチオブジェクトであるかどうかを判断するのに有効です。

ユーザーのデバイスが TouchEnabled であるかどうかをチェックし、そのタッチイベントが発動するかを見るには、UserInputService.TouchEnabled を参照してください。

このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。

参照してください:

パラメータ

ユーザーの入力に関する情報を含む InputObject インスタンス。

gameProcessedEvent: bool

ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEventtrueになります。これは、ContextActionService


コードサンプル

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

ユーザーが TouchEnabled デバイスの同じ画面位置で最大 1 秒間指を持っているときに発動します。

このイベントは、ユーザーがゲーム内の GUI または要素を指しているときに指を下に置くかどうかを判断するのに使用できます。

下の例では、ユーザーが同じ画面位置で長押ししている間、state の長押しを印刷します。可能な状態は以下のとおりです:開始変更、1>終了1>、4>キャンセル4>、および 7>なし


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)

ユーザーのデバイスが TouchEnabled であるかどうかをチェックし、そのタッチイベントが発動するかを UserInputService.TouchEnabled を参照してください。

Class.UserInputService.TouchStarted と UserInputService.TouchEnded を組み合わせて、ユーザーが画面を開始して停止するときを判断できます。

このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。

参照してください:

パラメータ

touchPositions: Array

Datatype.Vector2 オブジェクトの配列、手の動きに関連する指の位置を示します。

ジェスチャーの Enum.UserInputState

gameProcessedEvent: bool

ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEventtrueになります。これは、ContextActionService


コードサンプル

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 イベントは、ユーザーが TouchEnabled デバイスの指を動かすと発動します。

このイベントは、TouchEnabled デバイスのスクリーンにタッチするときにユーザーが指を動かすかどうかを判断するのに使用できます。ユーザーが指を動かしている場所、およびユーザーが指を動かしている場所を追跡するのに便利です。

以下のコードは、「Touch moved from」以前の Vector2 ポジション「to」TouchEnabled デバイスのユーザーのタッチに印刷されます。


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)

Class.UserInputService.TouchStarted と UserInputService.TouchEnded を組み合わせて、ユーザーが画面を触ったときにどのように指が動くか、Class.UserInputService.TouchMove しているか、および画面を2>タッチ2>しているかを確認して、ユーザーが画面をタッチするときに5>スクリーン5>を8>タッチ8>する

ユーザーのデバイスが TouchEnabled であるかどうかをチェックし、そのタッチイベントが発動するかを見るには、UserInputService.TouchEnabled を参照してください。

このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。

参照してください:

パラメータ

ユーザーの入力に関する情報を含む InputObject インスタンス。

gameProcessedEvent: bool

ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEventtrueになります。これは、ContextActionService


コードサンプル

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 イベントは、ユーザーが少なくとも 1つの指を Class.UserInputService.TouchEnabled|TouchEnabled デバイスにドラッグすると発動します。

このイベントは、ユーザーが TouchEnabled デバイスのスクリーンをパンするときに使用できます - たとえば、カスタムカメラスクリプトで Camera を回転するために。

以下のスナップショットは、ユーザーが画面に指を置くときに、ユーザーの指を動かす速度に続いて「タッチのドラッグの速度」を印刷します。


local UserInputService = game:GetService("UserInputService")
UserInputService.TouchPan:Connect(function(touchPositions, totalTranslation, velocity, state, gameProcessedEvent)
print("Speed of touch drag: " .. tostring(velocity))
end)

別の便利な UserInputService 関数をここ UserInputService.TouchRotate を見てください。

このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。

参照してください:

パラメータ

touchPositions: Array

Datatype.Vector2 オブジェクトの配列、手の指などが含まれるgestureの位置を示す。

totalTranslation: Vector2

パンのジェスチャーのサイズ (ピクセル単位) です。

velocity: Vector2

パンのジェスチャーの速度 (ピクセル単位) 秒間。

ジェスチャーの Enum.UserInputState

gameProcessedEvent: bool

ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEventtrueになります。これは、ContextActionService


コードサンプル

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

ユーザーが TouchEnabled デバイスの画面に2つの指を置き、移動すると、発射されます。

たとえば、以下のスナップショットは、タッチピンチの開始時点からカメラズームスケールがどれくらい変更されたかを示しています。


local UserInputService = game:GetService("UserInputService")
UserInputService.TouchPinch:Connect(function(touchPositions, scale, velocity, state, gameProcessedEvent)
print("Scale difference since beginning of pinch: " .. tostring(scale))
end)

ユーザーのデバイスが TouchEnabled であるかどうかをチェックし、そのタッチイベントが発動するかを見るには、UserInputService.TouchEnabled を参照してください。

このイベントは、Roblox クライアントのウィンドウがフォーカスされているときのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。このイベントはローカルにのみ発動するため、LocalScript でのみ使用できます。

参照してください:

パラメータ

touchPositions: Array

Datatype.Vector2|Vector2s のアレイ、指先がピンチグェストに関連するピクセルの位置を示しています。

scale: number

開始から終了までのピンチの強度 (ピクセル単位) をスタートピンチの位置によって分割します。

velocity: number

ピンチのスピード(ピクセルあたり/秒)。

ジェスチャーの Enum.UserInputState

gameProcessedEvent: bool

ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEventtrueになります。これは、ContextActionService


コードサンプル

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

ユーザーが 2つの指を TouchEnabled デバイスで回転させると、タッチローテートイベントが発動します。

たとえば、次のコードは、タッチ回転の開始時点からカメラが回転した量を印刷します。


local UserInputService = game:GetService("UserInputService")
UserInputService.TouchRotate:Connect(function(touchPositions, rotation, velocity, state, gameProcessedEvent)
print("Camera has rotated " .. tostring(rotation) .. " degrees!")
end)

ユーザーのデバイスが TouchEnabled であるかどうかをチェックし、そのタッチイベントが発動するかを見るには、UserInputService.TouchEnabled を参照してください。

このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。

モバイルデバイスのユーザーのカメラを制御するコアスクリプトは、このイベントと同様のコードを使用します。このイベントのベストプラクティスは、モバイルカメラシステムを作成するときに使用することです。

参照してください:

パラメータ

touchPositions: Array

Datatype.Vector2|Vector2s 、手の動きに関与する指の位置を示すアレイ。

rotation: number

スタート時からジェスチャーの回転度数。

velocity: number

回転の変更 (in 秒単位) に対応する回転の変更 (in 度) の変更。

ジェスチャーの Enum.UserInputState

gameProcessedEvent: bool

ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEventtrueになります。これは、ContextActionService


コードサンプル

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 イベントは、ユーザーがデバイスに TouchEnabled のデバイスに指を置くときに発動し、デバイスによるタッチ入力を開始します。

このイベントは、ユーザーがデバイスの画面を触って開始したときに使用できます。 UserInputService.TouchEnded と組み合わせて、ユーザーが画面を開始して停止するときを確認できます。

タッチ入力オブジェクトは、タッチの寿命全体で同じ入力オブジェクトです。つまり、InputObjects を比較すると、タッチオブジェクトがタッチオブジェクトであるかどうかを判断するのに有効です。

ユーザーのデバイスが TouchEnabled であるかどうかをチェックし、そのタッチイベントが発動するかを見るには、UserInputService.TouchEnabled を参照してください。

このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。

参照してください:

パラメータ

ユーザーの入力に関する情報を含む InputObject インスタンス。

gameProcessedEvent: bool

ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEventtrueになります。これは、ContextActionService


コードサンプル

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

ユーザーが TouchEnabled デバイスで指をスワイプすると、TouchSwipe イベントが発動します。

このイベントは、ユーザーがデバイスの画面で指をスワイプしたときに使用できます。

タッチ入力の動作をより精密に追跡するには、UserInputService.TouchMoved を使用してください

ユーザーのデバイスが TouchEnabled であるかどうかをチェックし、そのタッチイベントが発動するかを見るには、UserInputService.TouchEnabled を参照してください。

このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。

参照してください:

パラメータ

swipeDirection: Enum.SwipeDirection

Enum.SwipeDirection 、ユーザーがスワイプした方向を指し示します。

numberOfTouches: number

この手势に関連するタッチの数 (指など)。

gameProcessedEvent: bool

ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEventtrueになります。これは、ContextActionService


コードサンプル

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 イベントは、TouchEnabled デバイスの画面にユーザーの指を置く/タップすると発動します。

このイベントは、ユーザーがゲームの世界に触れるかどうかにかかわらず発動します。GUI 要素をタップ/タッチした場合でも、ユーザーがゲームの世界に触れるときのみ発動するイベントを検索している場合は、UserInputService.TouchTapInWorld を使用してください。

ユーザーのデバイスが TouchEnabled であるかどうかをチェックし、そのタッチイベントが発動するかを見るには、UserInputService.TouchEnabled を参照してください。

このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。

パラメータ

touchPositions: Array

Datatype.Vector2 オブジェクトの配列、タップジェスチャーに関与する指の位置を示します。

gameProcessedEvent: bool

ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEventtrueになります。これは、ContextActionService


コードサンプル

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 イベントは、ユーザーが画面上の指をタップ/タップすると、発動します。これは、TouchEnabled デバイスのゲームワールドでタップするときに発生します。

このイベントは、ユーザーが画面をタップしているかどうかを判断するのに使用できます。ユーザーが GUI 要素をタップすると、GUI ではなく、UserInputService.TouchTap が発動します。

ユーザーのデバイスが TouchEnabled であるかどうかをチェックし、そのタッチイベントが発動するかを見るには、UserInputService.TouchEnabled を参照してください。

このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。

ローカルにのみ発行されるため、LocalScript 内のみで使用できます。

参照してください:

パラメータ

position: Vector2

タッチの位置を示す Vector2

processedByUI: bool

ユーザーが GUI 要素をタップしましたかどうか。


コードサンプル

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 ウィンドウフォーカスリリースイベントは、Roblox クライアントのウィンドウがフォーカスを失うときに発動します - 通常、Roblox クライアントがユーザーに最小化されるとき。

たとえば、以下のコードは、Roblox クライアントがフォーカスを失ったときに 「窓のフォーカスが解放されました」 と印刷されます。


local UserInputService = game:GetService("UserInputService")
UserInputService.WindowFocusReleased:Connect(function()
print("Window focus released")
end)

このイベントは、UserInputService.WindowFocused と一緒に使用することで、Roblox クライアントがユーザーの画面に積極的に焦点を合わせているかどうかを追跡することができます。

ローカルにのみ発行されるため、LocalScript 内のみで使用できます。


コードサンプル

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.UserInputService ウィンドウフォーカスイベントは、Roblox クライアントのウィンドウがユーザーの画面に最大限にフォーカスされるときに発動します - 通常、Roblox クライアントがユーザーの画面に最大限に開きます。

たとえば、以下のコードは、Roblox クライアントが焦点を合致させるときに 「フォーカスしたウィンドウ」 を印刷します。


local UserInputService = game:GetService("UserInputService")
UserInputService.WindowFocused:Connect(function()
print("Window focused")
end)

このイベントは UserInputService.WindowFocusReleased と一緒に使用して、Roblox クライアントがユーザーの画面に積極的に焦点を合わせているかどうかを追跡することができます。

このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。


コードサンプル

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)