UserInputService
*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。
UserInputService は、ユーザーのデバイスに利用可能なさまざまな種類の入力を検出し、キャプチャするサービスです。
このサービスの主な目的は、ゲームパッド、タッチスクリーン、キーボードなどの利用可能な入力の多様性に対応するためです。 LocalScript は、デバイスに応じて異なるアクションを実行し、最終ユーザーに最高のエクスペリエンスを提供できるようにします。
このサービスの一部として、ユーザーがGUI、ツール、その他のゲームインスタンスとインタラクトするときにユーザーの入力を検出する機能が含まれます。ユーザーの入力を検出するには、サービスは UserInputService.TouchStarted 、または
このサービスはクライアント側のみにのみ機能し、 LocalScript または ModuleScript によって必要になる LocalScript のみを使用している場合にのみ機能します。ユーザー入力サービスはクライアント側のみにのみユーザーの入力を検出でき、 2>Class.LocalScript</
また、ContextActionService を参照してください。これは、複数のユーザーの入力に機能をバインドできるサービスです。
コードサンプル
-- 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 のデルタ (変更) 出力をスケールします。
ユーザーのデバイスにマウスが含まれているかどうかを記述します。
ユーザーマウスアイコンとして使用される画像のコンテンツID。
Class.Mouse アイコンが表示されるかどうかを決定します。
画面キーボードの位置を決定します。
画面キーボードのサイズを決定します。
現在、ユーザーの画面に表示されているオンスクリーンキーボードが表示されているかどうかを記述します。
ユーザーの現在のデバイスにタッチスクリーンが含まれているかどうかを記述します。
ユーザーがバーチャルリアリティヘッドセットを使用しているかどうかを示します。
方法
Enums.UserInputType ゲームパッドが与えられた Enum.KeyCode に対応するボタンをサポートしているかどうかを返します。
現在接続されている Enum.UserInputType ゲームパッドのアレイを返します。
デバイスの現在の加速度を記述する InputObject を返します。
デバイスの現在の重力ベクトルを記述する InputObject を返します。
Class.InputObject と CFrame を返し、デバイスの現在の回転ベクトルを説明します。
現在、TextBox にフォーカスしているクライアントの返します。
ゲームパッドに Enum.UserInputType 「gamepadNum」が接続されているかどうかを返します。
Class.InputObject|InputObjects のオブジェクトを返します。これは、指定されたゲームパッドのすべての可用な入力に対して、各入力の最後の入力状態を表示します。
要求された Enum.KeyCode の画像を返します。
現在押し下されている keys と関連付けられた Class.InputObject|輸入オブジェクト を返します。
ユーザーの最新の入力に関連付けられた Enum.UserInputType を返します。
現在マウスボタンが押されているに対応する InputObjects のアレイを返します。
最後のレンダリングフレームでプレイヤーの Mouse の位置の変更をピクセル単位で返します。マウスがロックされている場合にのみ機能します。
プレイヤーの Mouse のトップ左隅に相当するプレイヤーの現在の画面位置を返します。
GamepadService.Return( true ) を参照してください。
ユーザーが入力するために押すべきキーを表示するストリングを返します。Enum.KeyCode。
ゲームパッドに関連する KeyCodes という名前のアレイを返します。
特定のゲームパッドでボタンを押すかどうかを決定します。
現在、key が下げられているかどうかを返します。
現在、mouse button を押し続けているかどうかを返します。
指定された Enum.UserInputType ゲームパッドがナビゲーションを制御することを許可している場合、GUIs に返ります。
最近、VRヘッドセットの CFrame をユーザーが着用しているヘッドセットのオリエンテーションに再設定します。
指定した Gamepad ナビゲータを移動できるかどうかを設定します。
イベント
加速度センサーがあるデバイスをユーザーが移動すると、発射されます。Roblox ゲーム内のリアルワールドデバイスの移動を追跡するのに使用されます。
加速度センサーを有効にしたデバイスの場合、重力の変更に対応できなくなります - たとえば、モバイルデバイスです。
ユーザーがジャイロスコープを含むデバイスを回転すると、発射されます。
ゲームパッドがクライアントに接続されると、「gamepadNum」のゲームパッドが接続された。
ゲームパッドがクライアントから切断されるときに発動します。切断されたゲームパッドの Enum.UserInputType をパスします。
ユーザーが人間コンピューターインターフェイスデバイスを介してインタラクトし始めると、発動します。たとえば、マウスまたはゲームパッドです。
ユーザーが人間コンピューターインターフェイスデバイスを通じてどのように交流するかを変更すると、発射されます。
ユーザーが人間コンピューターインターフェイスデバイスを介して交流を停止すると、ファイアを起動します。
クライアントがジャンプするためのリクエストをするときに発動します。
クライアントの Enum.UserInputType が変更されると、ファイアを起動します。
- PointerAction(wheel : number,pan : Vector2,pinch : number,gameProcessedEvent : bool):RBXScriptSignal
ユーザーが特定のポインタアクションを実行するときに発動します (車輪、ピンチ、パン)。
クライアントが TextBox に焦点を合わせるのを失うと、発射されます。
クライアントが TextBox に焦点を合致させたときに発動します。
ユーザーがタッチ可能デバイスの画面から指を解放したときに発動します - たとえば、モバイルデバイスの画面です。
- TouchLongPress(touchPositions : Array,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
ユーザーが同じ画面位置に短時間を保持すると、発射されます - たとえば、モバイルデバイスの画面。
ユーザーが TouchEnabled デバイスの指を動かすと、発動します - たとえば、Apple iPad または iPhone の画面や Google Android の電話の画面など。
- TouchPan(touchPositions : Array,totalTranslation : Vector2,velocity : Vector2,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
ユーザーがモバイルデバイスの画面などのモバイルデバイスの画面をドラッグすると、TouchEnabled デバイスを発射します。
- TouchPinch(touchPositions : Array,scale : number,velocity : number,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
ユーザーがモバイルデバイスの画面などで指を叩くと、TouchEnabled デバイスでファイアーが発生します。
- TouchRotate(touchPositions : Array,rotation : number,velocity : number,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
ユーザーがモバイルデバイスの画面などで 2つの指を回転させるときに発動します - たとえば、モバイルデバイスの画面などです。
ユーザーが TouchEnabled デバイスに指を置くと、ファイアーが発生します - たとえば、アップル iPad または iPhone の画面や Google Android の電話の画面など。
- TouchSwipe(swipeDirection : Enum.SwipeDirection,numberOfTouches : number,gameProcessedEvent : bool):RBXScriptSignal
ユーザーがモバイルデバイスの画面などのモバイルデバイスの画面をスワイプしたときに発動します。Fired when a user swipes their fingers on a TouchEnabled device - such as the screen of a mobile device.
ユーザーがモバイルデバイスの画面などのタッチで指を置くと、TouchEnabled デバイスをタップします。
ユーザーがモバイルデバイスの画面などのゲームワールドをタップすると、ファイアーが発生します。
Roblox クライアントのウィンドウがユーザーの画面にフォーカスを失うと、発動します。
Roblox クライアントのウィンドウがユーザーの画面にフォーカスすると、ファイアが発動します。
プロパティ
AccelerometerEnabled
このプロパティは、ユーザーのデバイスに加速度センサーがあるかどうかを記述します
加速度センサーは、加速度 (速度の変化) を測定するために見つけられるコンポーネントです。
たとえば、次のコードスナップでは、ユーザーのデバイスが加速度センサーを持っているかどうかをチェックする方法を示しています。
local UserInputService = game:GetService("UserInputService")local accelerometerEnabled = UserInputService.AccelerometerEnabledif accelerometerEnabled thenprint("Accelerometer enabled!")elseprint("Accelerometer not enabled!")end
デバイスに加速度センサーが有効になっている場合は、UserInputService:GetDeviceAcceleration() 機能またはデバイスの加速度センサー変更を追跡することで、現在の加速度を取得できます。
Class.UserInputService はクライアント側のみであるため、このプロパティは LocalScript でのみ使用できます。
コードサンプル
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local camera = workspace.CurrentCamera
local currentRotation = camera.CFrame -- CFrame.new(Vector3.new(0,0,0), Vector3.new(0,0,0))
local lastInputFrame = nil
local upsideDown = false
task.wait()
local orientationSet = false
local function GravityChanged(gravity)
if not orientationSet then
upsideDown = (gravity.Position.X < -0.5 or gravity.Position.Z > 0.5)
orientationSet = true
end
end
local function RotationChanged(_rotation, rotCFrame)
if orientationSet then
if not lastInputFrame then
lastInputFrame = rotCFrame
end
local delta = rotCFrame * lastInputFrame:inverse()
local x, y, z = delta:ToEulerAnglesXYZ()
if upsideDown then
delta = CFrame.Angles(-x, y, z)
else
delta = CFrame.Angles(x, -y, z)
end
currentRotation = currentRotation * delta
lastInputFrame = rotCFrame
end
end
local function HideCharacter()
for _, limb in pairs(character:GetChildren()) do
if limb:IsA("Part") then
limb.Transparency = 1
end
end
end
if UserInputService.GyroscopeEnabled then
UserInputService.DeviceGravityChanged:Connect(GravityChanged)
UserInputService.DeviceRotationChanged:Connect(RotationChanged)
HideCharacter()
RunService:BindToRenderStep("Camera", Enum.RenderPriority.Camera.Value, function()
camera.CFrame = CFrame.new(head.Position - Vector3.new(0, 8, 10)) * currentRotation
camera.Focus = CFrame.new(currentRotation * Vector3.new(0, 0, -10))
end)
end
GamepadEnabled
このプロパティは、ユーザーが使用しているデバイスが利用可能なゲームパッドを持っているかどうかを記述します。ゲームパッドが利用可能である場合は、UserInputService:GetConnectedGamepads() を使用して、接続されたゲームパッドのリストを取得できます。
Class.UserInputService はクライアント側のみであるため、このプロパティは LocalScript でのみ使用できます。
参照してください:
コードサンプル
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.GyroscopeEnabledif gyroIsEnabled thenprint("Gyroscope is enabled!")elseprint("Gyroscope is not enabled!")end
Class.UserInputService はクライアント側のみであるため、このプロパティは LocalScript でのみ使用できます。
コードサンプル
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 でのみ使用できます。
コードサンプル
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つの値に設定できます:
- デフォルト : マウスはユーザーの画面を自由に移動します。
- ロックセンター : マウスはロックされており、ユーザーの画面の中心から移動できません。
- LockCurrentPosition : マウスはロックされており、移動できません。その時点のユーザーの画面上の現在の位置にロックされています。
このプロパティの値は、イベントトラッキングマウスの動きの感度に影響しません。たとえば、 GetMouseDelta は、マウスがロックされているかどうかにかかわらず、ピクセル単位の Vector2 の画面位置を返します。その結果
このプロパティは、GuiButton とModal が有効になっている場合、またはプレイヤーの右マウスボタンが下にある場合、GuiButton.Visible をオーバーライドします。
注意、マウスがロックされている場合、UserInputService.InputChanged は、プレイヤーがマウスを動かすときにまだ発動し、Class.UserInputService.InputLoaded によってマウスが移動した方向にパスします。さらに、プレイヤーがゲームから追放された場合、マウスは強制的にアンロックされます。
Class.UserInputService はクライアント側のみであるため、このプロパティは LocalScript でのみ使用できます。
コードサンプル
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head", false)
local mouse = player:GetMouse()
local zoomed = false
local camera = game.Workspace.CurrentCamera
local target = nil
local originalProperties = {
FieldOfView = nil,
_CFrame = nil,
MouseBehavior = nil,
MouseDeltaSensitivity = nil,
}
local AngleX, TargetAngleX = 0, 0
local AngleY, TargetAngleY = 0, 0
-- Reset camera back to CFrame and FieldOfView before zoom
local function ResetCamera()
target = nil
camera.CameraType = Enum.CameraType.Custom
camera.CFrame = originalProperties._CFrame
camera.FieldOfView = originalProperties.FieldOfView
UserInputService.MouseBehavior = originalProperties.MouseBehavior
UserInputService.MouseDeltaSensitivity = originalProperties.MouseDeltaSensitivity
end
local function ZoomCamera()
-- Allow camera to be changed by script
camera.CameraType = Enum.CameraType.Scriptable
-- Store camera properties before zoom
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Zoom camera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Lock and slow down mouse
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Reset zoom angles
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Toggle camera zoom/unzoom
local function MouseClick()
if zoomed then
-- Unzoom camera
ResetCamera()
else
-- Zoom in camera
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- anything higher would make looking up and down harder; recommend anything between 0~1
local smoothness = 0.05 -- recommend anything between 0~1
local delta = Vector2.new(input.Delta.x / sensitivity, input.Delta.y / sensitivity) * smoothness
local X = TargetAngleX - delta.y
local Y = TargetAngleY - delta.x
TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X
TargetAngleY = (Y >= 80 and 80) or (Y <= -80 and -80) or Y
AngleX = AngleX + (TargetAngleX - AngleX) * 0.35
AngleY = AngleY + (TargetAngleY - AngleY) * 0.15
camera.CFrame = CFrame.new(head.Position, target)
* CFrame.Angles(0, math.rad(AngleY), 0)
* CFrame.Angles(math.rad(AngleX), 0, 0)
end
end
local function InputBegan(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
MouseClick()
end
end
local function InputChanged(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseMovement then
MouseMoved(input)
end
end
if UserInputService.MouseEnabled then
UserInputService.InputBegan:Connect(InputBegan)
UserInputService.InputChanged:Connect(InputChanged)
end
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end
MouseDeltaSensitivity
このプロパティは、ユーザーの Mouse の感度を決定します。
感度は、物理マウスの移動をゲーム内のマウス移動にどの程度に変換するかを決定します。これは、GetMouseDelta 、マウスの移動などの感度を調整するために使用されることがあります。
このプロパティは、マウスアイコンの移動に影響しません。また、カメラ感度 設定は、クライアントの 設定 タブの マウスモーション トラッキングを調整することもありません。
このプロパティには最大 10 の値と最小 0 の値があります。低い値は低感度に対応し、高い値は高感度に対応します。
感度が 0 の場合、マウスの動きを追跡するイベントは引き続き発生しますが、変更マウスポジションを表すすべてのパラメータとプロパティは Vector2.new() または Datatype. Vector3|Vector
コードサンプル
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 thenprint("The user's device has an available mouse!")elseprint("The user's device does not have an available mouse!")end
Class.UserInputService マウス機能を使用する前に、これを確認することは重要です。UserInputService:GetMouseLocation() などの。
Class.UserInputService はクライアント側のみであるため、このプロパティは LocalScript でのみ使用できます。
参照してください:
コードサンプル
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
マウスアイコン プロパティは、ポインターとして使用する画像を決定します。空の場合は、デフォルトの矢印が使用されます。 Class.ImageButton 、 ImageButton 、 TextButton 、または 2>Class.ProximityPrompt2> の
カーソルを完全に非表示にするには、 透明な画像を使用しない で、UserInputService.MouseIconEnabled を偽に設定します。代わりに、Class.UserInputService.MouseIconEnabled を偽に設定します。
コードサンプル
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 でのみ使用できます。
コードサンプル
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> を設定している場合にのみ使用できます。
また、OnScreenKeyboardVisible と OnScreenKeyboardSize を参照してください。
コードサンプル
local UserInputService = game:GetService("UserInputService")
print(UserInputService.OnScreenKeyboardPosition)
OnScreenKeyboardSize
このプロパティは、画面キーボードのサイズをピクセルで表示します。キーボードのサイズは、Vector2.new(0, 0) で表示されるときにはありません。
Class.UserInputService はクライアント側のみですので、このプロパティは LocalScript または Script に 1>Class.BaseScript.RunContext|RunContext1> を設定している場合にのみ使用できます。
また、OnScreenKeyboardVisible と OnScreenKeyboardPosition を参照してください。
OnScreenKeyboardVisible
このプロパティは、ユーザーの画面に現在表示されているオンスクリーンキーボードが表示されているかどうかを記述します。
Class.UserInputService はクライアント側のみですので、このプロパティは LocalScript または Script に 1>Class.BaseScript.RunContext|RunContext1> を設定している場合にのみ使用できます。
また、OnScreenKeyboardSize と OnScreenKeyboardPosition を参照してください。
TouchEnabled
このプロパティは、ユーザーの現在のデバイスにタッチスクリーンが利用可能かどうかを記述します。
このプロパティは、ユーザーのデバイスにタッチ画面があるかどうかを判断するために使用され、その結果によりタッチイベントが発動するかどうかを決定します。TouchEnabled が true の場合、UserInputService.TouchStarted およびUserInputService.TouchEnded などのユーザー入力サービス
以下のコードスナップでは、ユーザーのデバイスがタッチスクリーンを持っているかどうかを印刷します。
local UserInputService = game:GetService("UserInputService")if UserInputService.TouchEnabled thenprint("The user's device has a touchscreen!")elseprint("The user's device does not have a touchscreen!")end
参照してください:
コードサンプル
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.VREnabledif isUsingVR thenprint("User is using a VR headset!")elseprint("User is not using a VR headset!")end
Class.UserInputService はクライアント側のみであるため、このプロパティは LocalScript でのみ使用できます。
参照してください:
コードサンプル
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 内でのみ使用できます。
参照してください:
パラメータ
ゲームパッドの Enum.UserInputType 。
ボタンの Enum.KeyCode 。
戻り値
与えられたゲームパッドが与えられた Enum.KeyCode に対応するボタンをサポートしているかどうか。
コードサンプル
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 のアレイ。
コードサンプル
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 内のみで使用できます。
戻り値
コードサンプル
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 内でのみ使用できます。
戻り値
コードサンプル
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つのプロパティを含むテープル:
- デルタプロパティは、最後に発生した回転量を記述します
- CFrame は、デバイスのデフォルトの参照フレームに対する当該デバイスの現在の回転量です。
コードサンプル
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 内でのみ使用できます。
参照してください:
戻り値
コードサンプル
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 内でのみ使用できます。
参照してください:
パラメータ
ゲームパッドの Enum.UserInputType の内容。
戻り値
ゲームパッドが Enum.UserInputType に関連されているかどうか。
コードサンプル
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 内でのみ使用できます。
参照してください:
パラメータ
ゲームパッドに対応する Enum.UserInputType 。
戻り値
Class.InputObject|InputObjects アレイ、Class.InputObject|InputObjects が、現在のゲームパッドのすべての入力の状態を表示します。
GetImageForKeyCode
このメソッドは、リクエストされた Enum.KeyCode を取得し、現在のゲームパッドデバイスに関連する画像を返します(限定: Xbox、PlayStation および Windows)。これにより、接続されたコントローラーが Xbox のコントローラーである場合、ユーザーは Xbox ア
パラメータ
枚数.KeyCode により、関連する画像を取得する。
戻り値
返された画像アセットID。
コードサンプル
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 のアレイ。
コードサンプル
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。
コードサンプル
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 配列。
コードサンプル
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 内でのみ使用できます。
戻り値
マウスの移動に変更を加えます。
コードサンプル
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local function OnRenderStep()
local delta = UserInputService:GetMouseDelta()
print("The mouse has moved", delta, "since the last step.")
end
RunService:BindToRenderStep("MeasureMouseMovement", Enum.RenderPriority.Input.Value, OnRenderStep)
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end
GetMouseLocation
この関数は、<a href="/reference/engine/datatypes">データタイプ</a>、<a href="/reference/engine/datatypes/class-Mouse.html">Class.Mouse</a> のピクセルに対するトップ左隅のプレイヤーの Mouse の位置を表示します。これは、GUI のインセットには含まれません。
マウスポインタの場所がオフスクリーンになっているか、プレイヤーのデバイスにマウスがない場合、返される値は未定です。
As UserInputService はクライアント側のみであるため、この関数は LocalScript 内でのみ使用できます。
戻り値
コードサンプル
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 でのみ使用できます。
参照してください:
- UserInputService:SetNavigationGamepad() を使用して、GUI ナビゲーションのためのゲームパッドを有効にするか無効にする
- UserInputService:IsNavigationGamepad() 、GUI ナビゲーションにゲームパッドが有効であるかどうかを確認する
- UserInputService:GetConnectedGamepads() を押すと、GUI ナビゲーションコントロールにかかわらず、すべてのゲームパッドを返します
戻り値
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.Parentlocal mapKey = Enum.KeyCode.MtextLabel.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.Parentlocal key = Enum.KeyCode.ButtonAlocal mappings = {ButtonA = "rbxasset://BUTTON_A_ASSET", -- Replace with the desired ButtonA assetButtonCross = "rbxasset://BUTTON_CROSS_ASSET" -- Replace with the desired ButtonCross asset}local mappedKey = UserInputService:GetStringForKeyCode(key)local image = mappings[mappedKey]imageLabel.Image = image
ゲームパッドマップ
方向キーコードにはデバイスに基づく違いはありません。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 |
---|
パラメータ
戻り値
GetSupportedGamepadKeyCodes
この関数は、KeyCodes を返し、ゲームパッドに関連付けられた Enum.UserInputType をサポートする、ゲームパッドに関連付けられたバーチャル空間のユーザー入力をサポートします。
この関数は、接続されたゲームパッドによってサポートされていない KeyCodes を特定できます。特定の KeyCodes がサポートされているかどうかは、UserInputService:GamepadSupports() を使用して確認してください。
存在しない、または接続されていないゲームパッドを呼び出すと、この関数は空の配列を返します。
As UserInputService はクライアント側のみであるため、この関数は LocalScript 内でのみ使用できます。
参照してください:
パラメータ
ゲームパッドの Enum.UserInputType 。
戻り値
KeyCode|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.ButtonAlocal gamepad = Enum.UserInputType.Gamepad1local isButtonHeld = UserInputService:IsGamepadButtonDown(gamepad, button)
Class.UserInputService はクライアント側のみであるため、この関数は LocalScript でのみ使用できます。
参照してください:
パラメータ
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>
指定されたボタンの Enum.KeyCode 。
戻り値
指定されたゲームパッドボタンを押すかどうかが押されます。
コードサンプル
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 でのみ使用できます。
参照してください:
- Enum.UserInputType.IsGamepadButtonDown - 同じ使用で使用可能なイベント:button をプレスしているかどうかをチェックします。
パラメータ
キーの Enum.KeyCode 。
戻り値
指定されたキーが押し続けられるかどうか。
コードサンプル
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 の中でのみ使用できます。
パラメータ
マウスボタンの Enum.UserInputType 。
戻り値
現在、マウスボタンを押し続けるかどうか。
コードサンプル
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) thenprint("Gamepad is a navigation gamepad!")elseprint("Gamepad is not a navigation gamepad!")end
ナビゲーションに関わらず、接続されたすべてのゲームパッドのリストは、「UserInput/GetConnectedGamepads」を使用して取得できます。
Class.UserInputService はクライアント側のみであるため、この関数は LocalScript でのみ使用できます。
参照してください:
パラメータ
指定されたゲームパッドの Enum.UserInputType 。
戻り値
指定されたゲームパッドがナビゲーションゲームパッドであるかどうか。
RecenterUserHeadCFrame
この関数は、ユーザーが着用しているヘッドセットの Datatype.CFrame を、装備中のヘッドセットの Datatype.CFrame.new() にリセットします。これにより、ヘッドセットの現在のオリエンテーションは 0> Datatype.CFrame.new()0> に設定されます。
この関数を使用して、ヘッドセットの CFrame をプレイエリアの中央に移動することができます。
これは VRService 機能と同じです、VRService:RecenterUserHeadCFrame()。
Class.UserInputService はクライアント側のみであるため、この関数は LocalScript でのみ使用できます。
戻り値
コードサンプル
local UserInputService = game:GetService("UserInputService")
UserInputService:RecenterUserHeadCFrame()
SetNavigationGamepad
SetNavigationGamepad 機能は、指定された Enum.UserInputType ゲームパッドがGUIナビゲーターを移動できるかどうかを設定します。許可されているゲームパッドは、ナビゲーションゲームパッドとして評価されます。
有効 引数が true としてパスされると、ゲームパッドは GUI ナビゲーターを移動できます。如果引数が false であると、ゲームパッドは GUI ナビゲーターを移動できません。
指定されたゲームパッドがナビゲーションゲームパッドに設定されているかどうかを確認したい場合は、UserInputService:IsNavigationGamepad() 機能を使用できます。UserInputService:GetNavigationGamepads() を使用して、すべてのナビゲーションゲームパッドのリストを取得できます。
Class.UserInputService はクライアント側のみであるため、この関数は LocalScript でのみ使用できます。
参照してください:
パラメータ
指定されたゲームパッドの Enum.UserInputType 。
指定されたゲームパッドがGUIナビゲータを移動できるかどうか。
戻り値
コードサンプル
local UserInputService = game:GetService("UserInputService")
UserInputService:SetNavigationGamepad(Enum.UserInputType.Gamepad1, true)
イベント
DeviceAccelerationChanged
加速度センサーがあるデバイスをユーザーが移動すると、デバイスアクセラレーションが変更されたイベントが発生します。
加速度センサーは、加速度 (速度の変化) を測定するために見つけられるコンポーネントです。
ユーザーのデバイスに加速度センサーが含まれているかどうかを確認するには、UserInputService.AccelerometerEnabled を参照してください。
このイベントは、加速度センサーを持つデバイスの動きを追跡するために使用できます。サンプル使用には、モバイルデバイスが加速度センサーを持っているときにプレイヤーキャラクターを移動することが含まれます。
さらに、このイベントは、UserInputService:GetDeviceAcceleration() と一緒に使用すると、デバイスの加速度センサーがある場合、ユーザーのデバイスの現在の移動を確認することができます。
このイベントはローカルでのみ発動します - これは、デバイスの移動するプレイヤーだけがイベントを使用できることを意味し、LocalScript でのみ機能します。
パラメータ
Class.InputObject 、UserInputType 、Class.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.
コードサンプル
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() 機能を使用して、ユーザーのデバイスの現在の重力フォースを取得できます。
パラメータ
Class.InputObject 、 、重力の強度を各ローカルデバイスの軸に示す InputObject.Position。この位置は、装置に対する重力の方向を決定するための方向として使用できます。
コードサンプル
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local camera = workspace.CurrentCamera
local currentRotation = camera.CFrame -- CFrame.new(Vector3.new(0,0,0), Vector3.new(0,0,0))
local lastInputFrame = nil
local upsideDown = false
task.wait()
local orientationSet = false
local function GravityChanged(gravity)
if not orientationSet then
upsideDown = (gravity.Position.X < -0.5 or gravity.Position.Z > 0.5)
orientationSet = true
end
end
local function RotationChanged(_rotation, rotCFrame)
if orientationSet then
if not lastInputFrame then
lastInputFrame = rotCFrame
end
local delta = rotCFrame * lastInputFrame:inverse()
local x, y, z = delta:ToEulerAnglesXYZ()
if upsideDown then
delta = CFrame.Angles(-x, y, z)
else
delta = CFrame.Angles(x, -y, z)
end
currentRotation = currentRotation * delta
lastInputFrame = rotCFrame
end
end
local function HideCharacter()
for _, limb in pairs(character:GetChildren()) do
if limb:IsA("Part") then
limb.Transparency = 1
end
end
end
if UserInputService.GyroscopeEnabled then
UserInputService.DeviceGravityChanged:Connect(GravityChanged)
UserInputService.DeviceRotationChanged:Connect(RotationChanged)
HideCharacter()
RunService:BindToRenderStep("Camera", Enum.RenderPriority.Camera.Value, function()
camera.CFrame = CFrame.new(head.Position - Vector3.new(0, 8, 10)) * currentRotation
camera.Focus = CFrame.new(currentRotation * Vector3.new(0, 0, -10))
end)
end
DeviceRotationChanged
ユーザーがジャイロスコープを持つデバイスを回転すると、DeviceRotationChanged イベントが発動します。
ジロスコープは、オリエンテーションと回転速度を検出するほとんどのモバイルデバイスにあるコンポーネントです。
イベントは、デバイスのオリエンテーションを追跡し、ユーザーがデバイスを回転させるとどのように変化するかを追跡するのに便利です。現在のデバイス回転を確認するには、UserInputService:GetDeviceRotation() 機能を使用できます。
ユーザーのデバイスにギロスコープが有効であるかどうかをチェックし、このイベントが発動するかどうかは、UserInputService.GyroscopeEnabled を参照してください。
このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。
パラメータ
Class.InputObject は、デバイスの回転に関する情報を提供します。InputObject.Position は、新しい回転位置を表示し、Vector3 は、ポジション位置の変更を表示します。1> Class.InputObj.Delta1> は、
コードサンプル
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local camera = workspace.CurrentCamera
local currentRotation = camera.CFrame -- CFrame.new(Vector3.new(0,0,0), Vector3.new(0,0,0))
local lastInputFrame = nil
local upsideDown = false
task.wait()
local orientationSet = false
local function GravityChanged(gravity)
if not orientationSet then
upsideDown = (gravity.Position.X < -0.5 or gravity.Position.Z > 0.5)
orientationSet = true
end
end
local function RotationChanged(_rotation, rotCFrame)
if orientationSet then
if not lastInputFrame then
lastInputFrame = rotCFrame
end
local delta = rotCFrame * lastInputFrame:inverse()
local x, y, z = delta:ToEulerAnglesXYZ()
if upsideDown then
delta = CFrame.Angles(-x, y, z)
else
delta = CFrame.Angles(x, -y, z)
end
currentRotation = currentRotation * delta
lastInputFrame = rotCFrame
end
end
local function HideCharacter()
for _, limb in pairs(character:GetChildren()) do
if limb:IsA("Part") then
limb.Transparency = 1
end
end
end
if UserInputService.GyroscopeEnabled then
UserInputService.DeviceGravityChanged:Connect(GravityChanged)
UserInputService.DeviceRotationChanged:Connect(RotationChanged)
HideCharacter()
RunService:BindToRenderStep("Camera", Enum.RenderPriority.Camera.Value, function()
camera.CFrame = CFrame.new(head.Position - Vector3.new(0, 8, 10)) * currentRotation
camera.Focus = CFrame.new(currentRotation * Vector3.new(0, 0, -10))
end)
end
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end
GamepadConnected
ゲームパッド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 内のみ使用できます。
参照してください:
パラメータ
接続されたゲームパッドの 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 内のみ使用できます。
参照してください:
パラメータ
切断されたゲームパッドの Enum.UserInputType 。
InputBegan
インプットビーガンイベントは、ユーザーが人間コンピューターインターフェイスデバイス (マウスボタン、タッチ開始、キーボードボタンなど) を介してインタラクトし始めると発動します。
ユーザーが GUI 要素、ゲームパッドなどと対話するときのユーザーの開始時間を追跡するために使用できます。マウスホイールの動きはキャプチャされません。
このイベントは、UserInputService.InputChanged とUserInputService.InputEnded と共に使用すると、ユーザーの入力が開始、変更、および終了するときに追跡できます。
このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。
このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。
パラメータ
ユーザーの入力に関する情報を含む InputObject インスタンス。
ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEvent がtrueになります。これは、ContextActionService を
コードサンプル
-- 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 インスタンス。
ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEvent がtrueになります。これは、ContextActionService を
コードサンプル
-- 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.InputBegan と UserInputService.InputChanged と一緒に使用すると、ユーザーの入力が始まり、変更、および終了するときに追跡できます。
このイベントは、Roblox クライアントのウィンドウがフォーカスされるときにのみ発動します。たとえば、ウィンドウが最小化されているときは、入力はキャプチャされません。
このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。
パラメータ
ユーザーの入力に関する情報を含む InputObject インスタンス。
ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEvent がtrueになります。これは、ContextActionService を
コードサンプル
-- 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 内でのみ使用できます。
コードサンプル
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 内でのみ使用できます。
パラメータ
最後の入力タイプを指す Enum.UserInputType。
コードサンプル
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
ポインターアクション は、ユーザーが特定のポインターアクション操作実行すると発動します。たとえば、マウスホイールをスクロールすることです。
パラメータ
TextBoxFocusReleased
TextBoxFocusRelease イベントは、クライアントが TextBox に焦点を置くのを失ったときに発動します - 通常、クライアントが返却を押すか、/ をクリック/タッチするなど、画面上の他の場所にテキストを入力するときにクライアントがテキストを入力しなくなります。
たとえば、以下のコードは、イベントが発動したときにテキストボックスの失敗した名前を印刷します。
local UserInputService = game:GetService("UserInputService")
function TextBoxFocusReleased(textbox)
print(textbox.Name)
end
UserInputService.TextBoxFocusReleased:Connect(TextBoxFocusReleased)
Class.UserInputService.ToolbarFocused と一緒に使用すると、テキストボックスのフォーカスを取得したり失ったりするときに追跡できます。
このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。
参照してください:
パラメータ
コードサンプル
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 内でのみ使用できます。
参照してください:
パラメータ
コードサンプル
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 インスタンス。
ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEvent がtrueになります。これは、ContextActionService を
コードサンプル
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 内でのみ使用できます。
参照してください:
パラメータ
Datatype.Vector2 オブジェクトの配列、手の動きに関連する指の位置を示します。
ジェスチャーの Enum.UserInputState。
ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEvent がtrueになります。これは、ContextActionService を
コードサンプル
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 インスタンス。
ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEvent がtrueになります。これは、ContextActionService を
コードサンプル
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 内でのみ使用できます。
参照してください:
パラメータ
Datatype.Vector2 オブジェクトの配列、手の指などが含まれるgestureの位置を示す。
パンのジェスチャーのサイズ (ピクセル単位) です。
パンのジェスチャーの速度 (ピクセル単位) 秒間。
ジェスチャーの Enum.UserInputState。
ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEvent がtrueになります。これは、ContextActionService を
コードサンプル
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 でのみ使用できます。
参照してください:
パラメータ
Datatype.Vector2|Vector2s のアレイ、指先がピンチグェストに関連するピクセルの位置を示しています。
開始から終了までのピンチの強度 (ピクセル単位) をスタートピンチの位置によって分割します。
ピンチのスピード(ピクセルあたり/秒)。
ジェスチャーの Enum.UserInputState。
ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEvent がtrueになります。これは、ContextActionService を
コードサンプル
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 内でのみ使用できます。
モバイルデバイスのユーザーのカメラを制御するコアスクリプトは、このイベントと同様のコードを使用します。このイベントのベストプラクティスは、モバイルカメラシステムを作成するときに使用することです。
参照してください:
パラメータ
Datatype.Vector2|Vector2s 、手の動きに関与する指の位置を示すアレイ。
スタート時からジェスチャーの回転度数。
回転の変更 (in 秒単位) に対応する回転の変更 (in 度) の変更。
ジェスチャーの Enum.UserInputState。
ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEvent がtrueになります。これは、ContextActionService を
コードサンプル
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 インスタンス。
ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEvent がtrueになります。これは、ContextActionService を
コードサンプル
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 内でのみ使用できます。
参照してください:
パラメータ
Enum.SwipeDirection 、ユーザーがスワイプした方向を指し示します。
この手势に関連するタッチの数 (指など)。
ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEvent がtrueになります。これは、ContextActionService を
コードサンプル
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 内でのみ使用できます。
パラメータ
Datatype.Vector2 オブジェクトの配列、タップジェスチャーに関与する指の位置を示します。
ゲームエンジンが内部的にこの入力を観察し、それに対応しましたかどうかを指示します。一般的に、これは UI 処理に関連していますので、ボタンがこの入力からタッチされたりクリックされたりすると、gameProcessedEvent がtrueになります。これは、ContextActionService を
コードサンプル
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 内のみで使用できます。
参照してください:
パラメータ
コードサンプル
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 内のみで使用できます。
コードサンプル
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = Instance.new("RemoteEvent")
afkEvent.Name = "AfkEvent"
afkEvent.Parent = ReplicatedStorage
local function setAfk(player, afk)
if afk then
local forcefield = Instance.new("ForceField")
forcefield.Parent = player.Character
else
local forcefield = player.Character:FindFirstChildOfClass("ForceField")
if forcefield then
forcefield:Destroy()
end
end
end
afkEvent.OnServerEvent:Connect(setAfk)
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = ReplicatedStorage:WaitForChild("AfkEvent")
local function focusGained()
afkEvent:FireServer(false)
end
local function focusReleased()
afkEvent:FireServer(true)
end
UserInputService.WindowFocused:Connect(focusGained)
UserInputService.WindowFocusReleased:Connect(focusReleased)
WindowFocused
Class.UserInputService ウィンドウフォーカスイベントは、Roblox クライアントのウィンドウがユーザーの画面に最大限にフォーカスされるときに発動します - 通常、Roblox クライアントがユーザーの画面に最大限に開きます。
たとえば、以下のコードは、Roblox クライアントが焦点を合致させるときに 「フォーカスしたウィンドウ」 を印刷します。
local UserInputService = game:GetService("UserInputService")
UserInputService.WindowFocused:Connect(function()
print("Window focused")
end)
このイベントは UserInputService.WindowFocusReleased と一緒に使用して、Roblox クライアントがユーザーの画面に積極的に焦点を合わせているかどうかを追跡することができます。
このイベントはローカルにのみ発生するため、 LocalScript 内でのみ使用できます。
コードサンプル
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = Instance.new("RemoteEvent")
afkEvent.Name = "AfkEvent"
afkEvent.Parent = ReplicatedStorage
local function setAfk(player, afk)
if afk then
local forcefield = Instance.new("ForceField")
forcefield.Parent = player.Character
else
local forcefield = player.Character:FindFirstChildOfClass("ForceField")
if forcefield then
forcefield:Destroy()
end
end
end
afkEvent.OnServerEvent:Connect(setAfk)
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = ReplicatedStorage:WaitForChild("AfkEvent")
local function focusGained()
afkEvent:FireServer(false)
end
local function focusReleased()
afkEvent:FireServer(true)
end
UserInputService.WindowFocused:Connect(focusGained)
UserInputService.WindowFocusReleased:Connect(focusReleased)