UserInputService는 사용자 기기사용할 수 있는 다양한 입력 유형을 감지하고 캡처하는 서비스입니다.
이 서비스의 주요 목적은 게임 패드, 터치 화면 및 키보드와 같은 다양한 입력 유형과 경험이 협력하도록 하는 것입니다. LocalScript 는 장치에 따라 다양한 작업을 수행하고, 결과적으로 최상의 경험을 제공합니다.
이 서비스의 일부 사용 사례는 사용자가 GUI, 도구 및 기타 게임 인스턴스와 상호 작용할 때 사용자 입력을 감지하는 것입니다. 사용자 입력을 감지하려면 서비스는 서비스 이벤트를 검색해야 합니다. 예를
이 서비스는 클라이언트 사이트 전용이므로 클라이언트에서만 사용되도록 하려면 LocalScript 또는 ModuleScript 필요한 경우에만 작동합니다. As UserInputService 는 클라이언트 사이트 전용이므로 게임 내의 사용자만 자신의 입력을 감지할 수 있으며 다른 사용
또한 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 아이콘이 표시되는지 여부를 결정합니다.
화면 키보드의 위치를 결정합니다.
화면 키보드 크기를 결정합니다.
사용자 화면에 현재 온-스크린 키보드가 표시되는지 여부를 설명합니다.
사용자의 현재 장치에 터치 화면이 있는지 여부를 설명합니다.
사용자가 가상 현실 헤드셋을 사용하는지 여부를 나타냅니다.
메서드
지정한 Enum.UserInputType 게임 패드가 지정된 Enum.KeyCode와 일치하는 버튼을 지원하는지 여부를 반환합니다.
현재 연결된 게임 패드의 Enum.UserInputType 배열을 반환합니다.
기기현재 가속을 설명하는 InputObject를 반환합니다.
Class.InputObject 개체를 반환하여 기기현재 중력 벡터를 설명합니다.
기기의 현재 회전 벡터를 설명하는 InputObject 및 CFrame을 반환합니다.
현재 클라이언트가 집중하고 있는 현재 TextBox를 반환합니다.
게임 패드에 지정된 Enum.UserInputType 'GamePadNum'이 연결되어 있는지 여부를 반환합니다.
지정된 게임 패드의 모든 입력에 대해 InputObjects 배열을 반환하여 각 입력의 마지막 입력 상태를 나타냅니다.
요청한 Enum.KeyCode 에 대한 이미지를 반환합니다.
현재 누르고 있는 InputObjects와 관련된 배열을 반환합니다.
사용자의 가장 최근 입력과 관련된 Enum.UserInputType를 반환합니다.
현재 마우스 버튼이 누르고 있는 배열의 InputObjects 을 반환합니다.
마지막 렌더링 프레임에 있는 플레이어의 Mouse 위치의 변경 내용을 픽셀로 반환합니다. 마우스가 잠겨 있는 경우에만 작동합니다.
플레이어의 Mouse 상단 왼쪽 모서리에 대한 플레이어의 현재 화면 위치를 반환합니다.
순위가 내림차순으로 GUI 탐색에 사용할 연결된 배열의 gamepads를 반환합니다.
사용자가 입력하도록 키를 나타내는 문자열을 반환합니다. Enum.KeyCode .
지정한 KeyCodes과 함께 사용하는 게임 패드의 배열을 반환합니다.
특정 게임 패드에서 특정 버튼을 누르는지 여부를 결정합니다.
현재 key 가 잠겨 있는지 여부를 반환합니다.
현재 mouse button 을 누르고 있는지 여부를 반환합니다.
지정된 Enum.UserInputType 게임 패드가 탐색 GUIs 을 제어할 수 있는지 여부에 대해 true를 반환합니다.
최근 사용자가 착용한 헤드셋의 CFrame를 현재 오리엔티어션으로 재설정합니다.
지정한 Gamepad 네비게이터를 이동할 수 있는지 여부를 설정합니다.
이벤트
사용자가 가속 센서가 있는 장치를 이동할 때 발생합니다. Roblox 게임 내에서 실제 장치 이동을 추적하는 데 사용됩니다.
장치에 장착된 가속도 센서가 있는 경우 장치가 가속도를 변경할 때 발생합니다. - 예를 들어 모바일 기기.
사용자가 장치에 회전 센서가 있는 경우 회전 센서를 사용하여 사용자를 감지합니다.
클라이언트에 게임패드를 연결할 때 발생합니다. 연결된 게임패드의 "게임패드Num"을 전달합니다.
클라이언트에서 게임패드를 연결 해제할 때 발생합니다. 연결된 게임패드의 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
사용자가 동일한 잠금 해제 장치의 화면 위치에서 최소 하나의 손가락을 잡고 있는 동안 화면에서 발생했습니다. 예를 들어, 모바일 기기화면입니다.
사용자가 화면 아이패드 또는 아이폰 또는 구글 안드로이드 폰과 같은 터치 장치에서 손가락을 이동할 때 발생합니다.
- TouchPan(touchPositions : Array,totalTranslation : Vector2,velocity : Vector2,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
사용자가 최소 하나의 손가락을 모바일 장치의 화면과 같은 장치에 드래그하면 발동됩니다. - 예를 들어, 모바일 기기화면입니다.
- 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
사용자가 모바일 기기화면과 같은 TouchEnabled 장치에서 두 손가 회전할 때 화면이 표시됩니다.
사용자가 화면이 켜진 애플 아이패드 또는 아이폰 또는 구글 안드로이드 폰과 같은 터치 가능 장치에 손가락을 올 때 발생합니다.
- TouchSwipe(swipeDirection : Enum.SwipeDirection,numberOfTouches : number,gameProcessedEvent : bool):RBXScriptSignal
사용자가 모바일 기기화면과 같은 TouchEnabled 장치에서 손가락을 길게 누르면 화면이 켜집니다.
사용자가 모바일 기기화면과 같은 TouchEnabled 장치에서 손가락을 누르면 화면이 켜집니다.
사용자가 모바일 장치의 화면과 같은 게임 세계를 탭하면 게이트가 열립니다.Fires when a user taps the game world on a TouchEnabled device - such as the screen of a mobile 기기.
Roblox 클라이언트 창이 사용자 화면에서 초점을 잃을 때 화면에 불이 붙습니다.
Roblox 클라이언트 창이 사용자 화면에 집중할 때 화면 내에서 불이 납니다.
속성
AccelerometerEnabled
이 속성은 사용자 장치에 가속도 센서가 있는지 여부를 설명합니다.
가속도 (속도 변경)를 측정하는 대부분의 모바일 장치에서 가속도 센서는 구성 요소입니다.
예를 들어 다음 코드 샘플은 사용자 장치에 가속도 센서가 있는지 여부를 확인하는 방법을 보여줍니다.
local UserInputService = game:GetService("UserInputService")local accelerometerEnabled = UserInputService.AccelerometerEnabledif accelerometerEnabled thenprint("Accelerometer enabled!")elseprint("Accelerometer not enabled!")end
장치에 가속 센서가 있으면 장치의 가속을 사용하여 UserInputService:GetDeviceAcceleration() 함수나 이벤트를 사용하여 현재 가속을 얻을 수 있습니다. 기기가속이 UserInputService.DeviceAccelerationChanged 이벤트를 사용하여 변경되면 트랙을 사용하여 현재 가속을 얻을 수 있습니다
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이고, 사용자 장치에 키보드가 없는 경우 false입니다.
사용자가 사용 가능한 키보드가 있는지 여부를 결정하는 데 사용할 수 있습니다. - 이 경우 키보드 입력을 확인하려면 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입니다.
다음 값 세 개로 설정할 수 있습니다.
- 기본 : 마우스는 사용자 화면 주위를 자유롭게 이동합니다.
- 잠금 센터 : 마우스가 잠겨 있으며 사용자 화면의 중심에서 이동할 수 없습니다.
- 현재 위치 잠금 잠금CurrentPosition lockCurrentPosition : 마우스가 잠겨 있으며, 잠긴 상태의 사용자 화면에서 현재 위치를 잠긴 상태로 변경할 수 없습니다.
이 속성의 값은 이벤트 추적 마우스 이동 민감도에 영향을 주지 않습니다. 예를 들어, GetMouseDelta는 마우스가 잠겨 있든 여부에 관계없이 동일한 Vector2 화면 위치를 반환합니다. 결
이 속성은 GuiButton 와 Modal 이 활성화되어 있는 경우에만 GuiButton.Visible 이 아님에 따라 재정의됩니다.
참고로, 마우스가 잠겨 있으면 UserInputService.InputChanged 는 플레이어가 마우스를 이동할 때 여전히 작동하고 마우스가 이동하려는 델타를 패스합니다. 또한, 플레이어가 게임에서 킥당하면 마우스가 강제로 잠금 해제됩니다.
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() 또는 Vector3.new()
코드 샘플
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이고, 사용 가능한 마우스가 없는 경우 false입니다.
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
이 중 UserInputService 마우스 함수를 사용하기 전에 확인하는 것이 좋습니다.
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>와 같은 특정 UI 개체
커서를 완전히 숨기려면 투명한 이미지를 사용하지 마십시오. 대신 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> 를 설정하여 4>Enums.RunContext.Client4> 에 대해
또한 OnScreenKeyboardVisible 및 OnScreenKeyboardSize 을 참조하십시오.
코드 샘플
local UserInputService = game:GetService("UserInputService")
print(UserInputService.OnScreenKeyboardPosition)
OnScreenKeyboardSize
이 속성은 화면 키보드의 크기를 픽셀로 설명합니다. 키보드의 크기는 보이지 않을 때 Vector2.new(0, 0)입니다.
Class.UserInputService 는 클라이언트 사이드만 사용할 수 있으므로, 이 속성은 LocalScript 또는 Script 에서만 사용할 수 있습니다. 1>Class.BaseScript.RunContext|RunContext1> 를 설정하여 4>Enums.RunContext.Client4> 에 대해
또한 OnScreenKeyboardVisible 및 OnScreenKeyboardPosition 을 참조하십시오.
OnScreenKeyboardVisible
이 속성은 사용자 화면에 현재 키보드가 표시되는지 여부를 설명합니다.
Class.UserInputService 는 클라이언트 사이드만 사용할 수 있으므로, 이 속성은 LocalScript 또는 Script 에서만 사용할 수 있습니다. 1>Class.BaseScript.RunContext|RunContext1> 를 설정하여 4>Enums.RunContext.Client4> 에 대해
또한 OnScreenKeyboardSize 및 OnScreenKeyboardPosition 을 참조하십시오.
TouchEnabled
이 속성은 사용자의 현재 장치에 터치 화면이 있는지 여부를 설명합니다.
속성은 사용자 기기터치 화면이 있는지 여부를 결정하기 위해 사용되며, 따라서 터치 이벤트가 발생하는지 여부를 결정합니다. 터치Enabled가 사용자 입력 서비스(예: 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() 를 사용하십시오.
클라이언트 사이드 전용인 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
이 함수는 현재 연결된 게임 패드의 배열을 반환합니다. 게임 패드가 연결되지 않으면 이 배열은 비어 있습니다. 또한, 게임 패드가 연결되지 않으면 키보드 개체가 아닌 게임 패드 개체만 반환합니다. 예를 인스턴스, 이 이벤트는 연결된 Gamepad1 개체를 반환하지만 키보드 개체는 반환하
예를 들어 다음 코드 덩어리는 연결된 게임 패드를 검색하고 해당 게임 패드를 변수 connectedGamepads 에 저장합니다.
local UserInputService = game:GetService("UserInputService")local connectedGamepads = UserInputService:GetConnectedGamepads()
특정 게임 패드가 연결되어 있는지 확인하려면 UserInputService:GetGamepadConnected() 를 사용합니다.
클라이언트 사이드 전용인 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
이 함수는 사용자의 장치가 게임 내에서 중력에 영향을 주거나 공을 이동하는 등의 작업을 수행할 수 있게 하도록 사용할 수 있습니다.
장치에 장착된 자이로스콜 기능을 사용하는 플레이어만 중력을 추적합니다. - 예를 들어, 모바일 기기.
사용자의 장치에 장착된 자이로스코프가 있는지 확인하려면 UserInputService.GyroscopeEnabled 값을 확인하십시오. 장치에 장착된 자이로스코프가 있는 경우 UserInputService.DeviceGravityChanged 이벤트를 사용하여 사용자의 장치에서 중력 힘이 변경될 때를
클라이언트 사이드 전용인 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을 반환하고 기기현재 회전 벡터를 설명하는 Datatype.CFrame를 반환합니다.
이 메서드는 입력 개체에 대해 호출됩니다. 입력 개체의 위치 속성은 각 로컬 장치 축에 대한 총 회전을 추적하는 Enum.InputType.Gyroscope입니다.
장치 회전은 장치에 장착된 gyroscope 만 추적할 수 있습니다.
이 함수가 로컬에서 실행되므로 LocalScript 내에서만 사용할 수 있습니다.
반환
다음 속성을 포함하는 템플릿:
- 델타 속성은 마지막으로 발생한 회전 량을 설명합니다.
- 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를 반환합니다. 사용자가 텍스트 상자를 수동으로 선택하거나 TextBox:CaptureFocus() 함수를 사용하여 선택을 강제할 수 있습니다. 텍스트 상자가 선택되지 않으면 이 함수는 nil를 반환합니다.
클라이언트 사이드 전용인 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
이 함수는 지정한 Enum.UserInputType 게임 패드가 클라이언트에 연결되어 있는지 여부를 반환합니다.
이 도구는 클라이언트 기기연결된 특정 게임 패드, 예를 들어 게임 패드1 이 연결되어 있는지 확인하는 데 사용할 수 있습니다.
연결된 모든 게임 패드 목록을 검색하려면 UserInputService:GetConnectedGamepads()를 사용하십시오.
클라이언트 사이드 전용인 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 현재 상태를 나타내는 배열.
GetImageForKeyCode
이 메서드는 요청한 Enum.KeyCode 를 가져와 현재 연결된 게임 패드 장치(Xbox, PlayStation 및 Windows)에 대해 연관된 이미지를 반환합니다(제한: Xbox 1 컨트롤러). 즉, 연결된 컨트롤러가 Xbox 컨트롤러인 경우 사용자
매개 변수
연관된 이미지를 검색할 Enum.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() 을 사용합니다.
클라이언트 사이드 전용인 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
이 함수는 사용자의 가장 최근 입력과 관련된 '열거형.UserInputType'를 반환합니다.
예를 들어, 사용자의 이전 입력이 스페이스 바를 누르고 있었다면 Enum.UserInputType 반환 된 것은 키보드 였습니다.
사용자가 사용하는 마지막 UserInputService.LastInputTypeChanged 이벤트를 사용하여 사용자가 변경한 마지막 Enum.UserInputType를 추적할 수 있습니다.
클라이언트 사이드 전용인 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>
이름 | 설명 |
---|
함수가 호출될 때 사용자가 아무 마우스 버튼을 눌러 내리지 않으면 빈 배열을 반환합니다.
클라이언트 사이드 전용인 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 , 결과에 영향을 미칠 수 있습니다.
클라이언트 사이드 전용인 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
이 함수는 플레이어의 Vector2의 현재 화면 위치를 나타내는 Mouse를 반환합니다. 이 함수는 상위 왼쪽 모서리에 대한 GUI의 인센트를 계산하지 않습니다.
마우스 포인터의 위치가 오프스크린인 경우 또는 플레이어의 장치에 마우스가 없는 경우 반환된 값은 결정되지 않습니다.
클라이언트 사이드 전용인 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 탐색에 사용할 게임 패드 배열을 반환합니다. UserInputTypes 연결되고 활성화된 게임 패드 배열이 있습니다. 이 목록은 우선 순위가 내리는 순서로 정렬되므로 게임 패드에서 탐색 컨트롤이 있는 경우에만 반복할 수 있습니다.
연결된 게임 패드가 탐색 게임 패드인지 여부는 탐색 GUI를 제어하는 게임 패드(s)만 결정합니다. 이것은 탐색 컨트롤에 영향을 주지 않습니다.
Class.UserInputService 는 클라이언트 사이드 기능이므로 이 함수는 LocalScript 에서만 사용할 수 있습니다.
또한 참조하십시오.
- UserInputService:SetNavigationGamepad() , 게임 패드를 GUI 탐색에 사용하도록 설정하거나 사용하지 않도록 설정하십시오.
- UserInputService:IsNavigationGamepad() , 게임 패드가 GUI 탐색에 사용 가능한지 여부를 확인하려면
- UserInputService:GetConnectedGamepads() , 모든 게임 패드를 연결하는 것은 관계 없이 반환합니다.
반환
우선 순위가 내려진 순서로 GUI 탐색에 사용할 수 있는 UserInputTypes 배열.
GetStringForKeyCode
GetStringForKeyCode 는 사용자가 입력하려는 키를 나타내는 문자열을 반환하지만 키보드 레이아웃을 유지하는 데 필요한 키를 나타냅니다. 키 코드에 모드 변경기를 보유해야 하는 경우 이 함수는 키를 모드 변경기 대신 반환합니다. 예를 위해 아래에서 자세한 설명
Roblox에서 일반 키보드 레이아웃을 사용하는 경우 키 코드는 상당한 정보를 기반으로 맵
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>열거형 키 코드</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>열거형 키 코드.</code></td><td><code>2</code> 은 왜냐하면 <code>@</code>는 <kbd>Shift</kbd>로 입력되고 <kbd>2</kbd>는 2>입력 된2></td></tr></tbody>
키 코드 | 값 반환 |
---|
AZERTY 키보드의 예
<tbody><tr><td><code>열거형 키 코드</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>열거형 키 코드.</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 는 일부 경우 PlayStation 맵을 사용하여 올바른 버튼을 표시합니다. 모든 사용자가 올바른 버튼을 볼 수 있도록 하려면 둘 다 PlayStation 맵을 사용하십시오.
<tbody><tr><td><code>열거형 키 코드 버튼</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>열거형 키 코드 버튼</code></td><td><code>버튼 트라이앤글</code></td><td><code>버튼Y</code></td></tr><tr><td><code>열거형 키 코드 버튼 L1</code></td><td><code>ButtonL1</code></td><td><code>ButtonLB</code></td></tr><tr><td><code>열거형 키 코드 버튼 L2</code></td><td><code>ButtonL2</code></td><td><code>버튼LT</code></td></tr><tr><td><code>Enum.KeyCode.ButtonL3</code></td><td><code>ButtonL3</code></td><td><code>ButtonLS</code></td></tr><tr><td><code>열거형 키 코드 버튼 R1</code></td><td><code>ButtonR1</code></td><td><code>버튼 RB</code></td></tr><tr><td><code>열거형 키 코드 버튼 R2</code></td><td><code>ButtonR2</code></td><td><code>버튼RT</code></td></tr><tr><td><code>enum.keycode.buttonr3</code></td><td><code>ButtonR3</code></td><td><code>버튼 RS</code></td></tr><tr><td><code>열거형 키 코드 버튼 시작</code></td><td><code>버튼 옵션</code></td><td><code>버튼 시작</code></td></tr><tr><td><code>열거형 키 코드 버튼 선택</code></td><td><code>ButtonTouchpad</code> 및 <code>ButtonShare</code></td><td><code>버튼 선택</code></td></tr></tbody>
키 코드 | PlayStation 반환 값 | Xbox 반환 값 |
---|
키 코드에 대한 시스템 이미지
사용자 인터페이스에 있는 Enum.KeyCode 같은 이미지를 나타내는 것이 좋은 표시인 경우 ImageLabel 를 사용하는 것이 좋습니다. 그러나 이 경우 더 이상 권장되지 않습니다. Class.UserInputService: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>열거형 키 코드 버튼</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>열거형 키 코드 버튼</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>열거형 키 코드 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>열거형 키 코드 오른쪽 패드</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>열거형 키 코드 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>열거형.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>열거형 키 코드 버튼 선택</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>열거형 키 코드 버튼 시작</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>열거형 키 코드 버튼 L1</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>열거형 키 코드 버튼 R1</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>열거형 키 코드 버튼 L2</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>열거형 키 코드 버튼 R2</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>열거형 키 코드 백스페이스</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>열거형 키 코드 반환</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>열거형.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>열거형 키 코드 탭</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>열거형 키 코드 아포스트로프</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>열거형 키 코드 콤마</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>열거형 키 코드 기간</code></td><td><img src="../../../assets/scripting/controls/period.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/period.png</code></td></tr><tr><td><code>열거형 키 코드 공간</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과 함께 지원하는 배열의 키입니다.
이 함수는 연결된 게임 패드에서 지원되지 않는 키 코드를 식별하는 데 사용할 수 있습니다. 특정 키 코드가 지원되는지 여부를 결정하려면 UserInputService:GamepadSupports()를 사용하십시오.
존재하지 않거나 연결되지 않은 게임 패드에서 호출하면 이 함수는 빈 배열을 반환합니다.
클라이언트 사이드 전용인 UserInputService 함수는 LocalScript 에서만 사용할 수 있습니다.
또한 참조하십시오.
매개 변수
게임 패드의 Enum.UserInputType입니다.
반환
코드 샘플
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 를 반환합니다.
유효한 사용자 입력 유형
지정된 게임 패드는 다음 UserInputType 열거형 값 중 하나여야 합니다.
<tr><td>게임패드1-8</td></tr>
이름 |
---|
유효한 키 코드
지정된 버튼은 다음 KeyCodes 열거형 값 중 하나여야 합니다.
<tr><td>열거형 키 코드 버튼X</td></tr><tr><td>열거형 키 코드 버튼Y</td></tr><tr><td>열거형 키 코드 버튼A</td></tr><tr><td>열거형 키 코드 버튼B</td></tr><tr><td>열거형 키 코드 버튼 R1</td></tr><tr><td>열거형 키 코드 버튼 L1</td></tr><tr><td>열거형 키 코드 버튼 R2</td></tr><tr><td>열거형 키 코드 버튼 L2</td></tr><tr><td>열거형 키 코드 버튼 R3</td></tr><tr><td>열거형 키 코드 버튼 L3</td></tr><tr><td>열거형 키 코드 버튼 시작</td></tr><tr><td>열거형 키 코드 버튼 선택</td></tr><tr><td>열 키 코드.DPadLeft</td></tr><tr><td>열 키 코드.DPadRight</td></tr><tr><td>열 키 코드 업데이트</td></tr><tr><td>열 키 코드 다운</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 에서만 사용할 수 있습니다.
또한 참조하십시오.
매개 변수
지정된 게임 패드의 Enum.UserInputType입니다.
지정된 버튼의 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
이 함수는 사용자가 착용한 헤드셋의 현재 방향으로 CFrame VR 헤드셋의 CFrame.new() 의 현재 방향을 설정합니다. 이를 통해 헤드셋의 현재 방향이 설정되어 있습니다.
이 함수를 사용하여 CFrame 헤드셋을 이상한 오프셋에 있는 경우 플레이 영역의 중심으로 이동합니다.
이 함수는 VRService 함수와 동일하게 작동합니다, VRService:RecenterUserHeadCFrame() .
Class.UserInputService 는 클라이언트 사이드 기능이므로 이 함수는 LocalScript 에서만 사용할 수 있습니다.
반환
코드 샘플
local UserInputService = game:GetService("UserInputService")
UserInputService:RecenterUserHeadCFrame()
SetNavigationGamepad
SetNavigationGamepad 함수는 지정된 Enum.UserInputType 게임 패드가 GUI 탐색기를 이동할 수 있는지 여부를 설정합니다. 게임 패드에서 허용하는 게임 탐색기는 게임 패드로 간주됩니다.
게임 패드에 게시된 모든 글은 저작권이 있습니다.
특정 Gamepad가 탐색 게임패드로 설정되어 있는지 확인하려면 UserInputService:IsNavigationGamepad() 함수를 사용할 수 있습니다. UserInputService:GetNavigationGamepads()를 사용하여 모든 탐색 게임패드의 목록을 검색할 수도 있습니다.
Class.UserInputService 는 클라이언트 사이드 기능이므로 이 함수는 LocalScript 에서만 사용할 수 있습니다.
또한 참조하십시오.
매개 변수
지정된 게임 패드의 Enum.UserInputType입니다.
지정된 게임 패드가 GUI 탐색기를 이동할 수 있는지 여부.
반환
코드 샘플
local UserInputService = game:GetService("UserInputService")
UserInputService:SetNavigationGamepad(Enum.UserInputType.Gamepad1, true)
이벤트
DeviceAccelerationChanged
가속도 센서가 있는 장치를 사용자가 이동하면 DeviceAccelerationChanged 이벤트가 발생합니다.
가속도 (속도 변경)를 측정하는 대부분의 모바일 장치에서 가속도 센서는 구성 요소입니다.
사용자의 장치에 가속 센서가 있는지 여부를 결정하려면 UserInputService.AccelerometerEnabled 을 참조하십시오.
이 이벤트는 가속 센서가 있는 장치의 이동을 추적하는 데 사용할 수 있습니다. 샘플 사용은 이동 장치가 가속할 때 플레이어 캐릭터를 이동하는 것을 포함합니다.
또한, 이 이벤트는 UserInputService:GetDeviceAcceleration() 와 함께 사용하여 장치에 가속도 센서가 있는 경우 사용자의 장치의 현재 이동을 결정할 수 있습니다.
이 이벤트는 로컬에서만 발생합니다. 즉, 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장치 이동 장
매개 변수
Class.InputObject 와 UserInputType 의 Class.InputObj 을 가진 Accelerometer 및 1>Class.InputObj.Position|Position1> 는 각 로컬 장치 축에 대한 중력의 힘을 표시합니다.
코드 샘플
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 에 속성 Class.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
사용자가 가속 센서가 있는 장치를 회전할 때 장치 회전 변경 이벤트가 발생합니다.
자이로스코프는 방향과 회전 속도를 감지하는 대부분의 모바일 장치에서 찾을 수 있는 구성 요소입니다.
이 이벤트는 사용자가 기기회전하는 방향을 추적하는 데 유용합니다. 현재 장치 회전을 결정하려면 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
게임 패드 연결 이벤트는 클라이언트에 게임 패드가 연결될 때 발생합니다.The GamepadConnected event fires when a gamepad is connected to the client.
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입니다.
GamepadDisconnected
게임 패드 연결 해제 이벤트는 게임 패드가 연결 해제되면 발생합니다.The GamepadDisconnected event fires when a gamepad is disconnected.
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 이 됩니다. 이는 또한
코드 샘플
-- 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
사용자가 인간-컴퓨터 인터페이스 장치(마우스 버튼 다운, 터치 시작, 키보드 버튼 다운 등)를 통해 상호 작용하는 방식을 변경할 때 입력 변경 이벤트가 발생합니다.The InputChanged event fires when a user changes how they're interacting via a Human-Computer Interface device (Mouse button down, touch begin, keyboard button down, etc).
Roblox가 자동으로 처리하는 이벤트, 예를 들어 스크롤 في ScrollingFrame , 게임 처리된 이벤트 인수가 잘못 되었는지 확인하십시오. 이 이벤트는 UserInputService.InputBegan 및 1> Class.UserInputService.INPUT
이 이벤트는 Roblox 클라이언트 창이 포커스 상태일 때만 발생합니다. 예를 들어, 창이 최소화되면 입력이 캡처되지 않습니다.
이 이벤트는 로컬에서만 발생하므로 LocalScript 에만 사용할 수 있습니다.
매개 변수
사용자의 입력에 대한 정보를 포함하는 InputObject 인스턴스.
이 입력을 내부적으로 게임 엔진이 관찰하고 행동하는지 여부를 나타냅니다. 일반적으로 이것은 UI 처리와 관련이 있으므로 버튼을 터치하거나 클릭하면 gameProcessedEvent 이 되고 연결된 입력 이벤트를 통해 true 이 됩니다. 이는 또한
코드 샘플
-- 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 이 됩니다. 이는 또한
코드 샘플
-- 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 점프 요청 이벤트는 클라이언트에서 점프 요청을 수신하는 경우, 예를 들어 클라이언트가 모바일에서 스페이스 바나 점프 버튼을 누르는 경우에 발생합니다.
이 이벤트는 사용자가 Class.Player.Character 을 만들려고 시도할 때마다 발생합니다. 기본 동작은 플레이어의 Class.Humanoid.Jump 을 설정하여 점프 요청에 응답하여 플레이어의 캐릭터를 점프하도록 합니다.
이벤트는 플레이어가 점프하기를 추적하는 데 사용됩니다. 플레이어가 점프하기를 만드는 대신 이 이벤트는 기본 점프 동작을 변경하는 데 사용됩니다. 예를 들어, 점프를 비활성화하는 것과 같은 기본 점프 동작을 변경할 수 있습니다.
예를 들어, 다음 코드는 플레이어가 점프 요청을 보낼 때마다 "점프"를 프린트합니다.
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
클라이언트가 인간-컴퓨터 인터페이스 기기통해 상호 작용하는 방식을 변경할 때마다 UserInputService.LastInputTypeChanged 이벤트가 발생합니다. (예: 마우스 이동에서 마우스 휠 또는 싫어 스틱1에서 싫어 스틱2로).
마지막 입력 유형의 값을 변경했는지 여부에 관계없이 값을 가져오려면 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
텍스트 상자 초점 잃음 이벤트는 클라이언트가 텍스트 상자에 텍스트 입력을 완료하지 못할 때 발생합니다. 일반적으로 클라이언트가 다른 곳에서 텍스트 입력을 완료하여 텍스트 상자에 텍스트를 다시 집중하면 발생합니다.
예를 들어 아래 코드는 이벤트가 발생했을 때 TextBox가 포커스를 잃을 때 이름을 표시합니다.
local UserInputService = game:GetService("UserInputService")
function TextBoxFocusReleased(textbox)
print(textbox.Name)
end
UserInputService.TextBoxFocusReleased:Connect(TextBoxFocusReleased)
텍스트 상자가 포커스를 얻고 잃을 때를 추적하는 데 사용할 수 있습니다.
이 이벤트는 로컬에서만 발생하므로 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 이벤트는 클라이언트가 텍스트 입력을 시작하려고 텍스트 상자에 집중할 때 발생합니다. 이 이벤트는 일반적으로 클라이언트가 텍스트 상자를 클릭/탭하여 텍스트 입력을 시작하면 발생합니다. 이 이벤트는 또한 Class.Toolbar:CaptureFocus() 를 사용하여 텍스트 입력을 시작
예를 들어 아래 코드는 이벤트가 발생했을 때 TextBox의 이름을 인쇄합니다.
local UserInputService = game:GetService("UserInputService")
function TextBoxFocused(textbox)
print(textbox.Name)
end)
UserInputService.TextBoxFocused:Connect(TextBoxFocused)
텍스트 상자의 초점을 잡고 잃을 때를 추적하는 데 사용할 수 있습니다 UserInputService.FocusReleased 와 함께.
이 이벤트는 로컬에서만 발생하므로 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 이벤트는 사용자가 터치 기기화면에서 손가락을 떼면 발생하며, 기기함께 터치 입력을 끝내는 장치.
이 이벤트는 사용자가 기기화면을 터치하는 시간을 결정하는 데 사용할 수 있습니다. 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 이 됩니다. 이는 또한
코드 샘플
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
사용자가 최소 하나의 짧은 시간 동안 동일한 화면 위치의 터치 활성화 기기손가락을 누르고 있으면 발동됩니다.
이 이벤트는 사용자가 게임 내 GUI 또는 요소에 싫어를 누르는 시간을 결정하는 데 사용할 수 있습니다.
아래 예에서는 사용자가 최소 하나의 손가락을 동일한 화면 위치에 대기한 동안 길게 누르면 사용자가 하는 일을 인식하는 데 도움이 됩니다. 가능한 상태는 다음과 같습니다: state, 변경, 종료,
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 이 됩니다. 이는 또한
코드 샘플
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
사용자가 터치 장치에서 손가락을 이동할 때 터치 이동 이벤트가 발생합니다.The TouchMoved event fires when a user moves their finger on a TouchEnabled 기기.
이 이벤트는 사용자가 터치 기기화면을 터치하는 동안 손가락을 움직이는 시간을 결정하는 데 사용할 수 있습니다. 사용자가 손가락을 화면에 이동하는지 여부를 추적하는 것이 유용할 수 있습니다. 또한 사용자가 손가락을 화면에서 이동하는 위치를 추적하는 것이 유용할 수 있습니다.
아래 코드는 사용자의 터치 장치에 대해 이전 Vector2 위치에서 "Touch moved from" 를 "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 와 함께 사용하여 사용자가 화면을 터치하기 시작했을 때, 그들이 화면을 터치하는 동안 손가락이 어디로 이동하는지 결정하고, 그들이 화면을 떠나게 할 때 손가락이 어디로 이동하는지 결정할 수 있습니다.
사용자의 장치가 TouchEnabled인지 여부를 확인하고 이 장치 이벤트가 발생하는지 여부를 확인하려면 UserInputService.TouchEnabled 를 참조하십시오.
이 이벤트는 Roblox 클라이언트 창이 포커스 상태일 때만 발생합니다. 예를 들어, 창이 최소화되면 입력이 캡처되지 않습니다.
이 이벤트는 로컬에서만 발생하므로 LocalScript 에만 사용할 수 있습니다.
또한 참조하십시오.
매개 변수
사용자의 입력에 대한 정보를 포함하는 InputObject 인스턴스.
이 입력을 내부적으로 게임 엔진이 관찰하고 행동하는지 여부를 나타냅니다. 일반적으로 이것은 UI 처리와 관련이 있으므로 버튼을 터치하거나 클릭하면 gameProcessedEvent 이 되고 연결된 입력 이벤트를 통해 true 이 됩니다. 이는 또한
코드 샘플
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 이벤트는 사용자가 최소 하나의 손가락을 TouchEnabled 기기드래그하면 발생합니다.
이 이벤트는 사용자가 터치 장치의 화면을 스크롤할 때 사용자의 손가락이 화면을 스크롤하는지 여부를 결정하는 데 사용됩니다. 예를 들어, 사용자가 사용자 카메라 스크립트를 사용하여 Camera를 회전하는 것과 같이.
아래 스냅싱은 사용자가 화면에서 손가락을 드래그할 때 사용자의 손가락이 화면에 닿는 속도를 따라 인쇄합니다.The snippet below prints "Speed of touch drag" followed by the velocity of the user's touch when the user drags their finger on the screen.
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 개체 배열, 손가락(예: 손가락)이 제스처에 관련된 위치를 나타냅니다.
팬 제스처의 크기(in pixels).
초당 팬 제스처의 속도(in pixels).
그리기 도구의 Enum.UserInputState 입니다.
이 입력을 내부적으로 게임 엔진이 관찰하고 행동하는지 여부를 나타냅니다. 일반적으로 이것은 UI 처리와 관련이 있으므로 버튼을 터치하거나 클릭하면 gameProcessedEvent 이 되고 연결된 입력 이벤트를 통해 true 이 됩니다. 이는 또한
코드 샘플
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 기기화면에 불이 붙었습니다.
인스턴스들어 아래 스냅샷은 터치 핀치가 시작된 이후 카메라 확대 크기가 얼마나 변경되었는지 보여줍니다.
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 배열, 피칭 손 움직임에 대한 화면 위치를 나타내는 픽스 위치 인 경우.
시작부터 끝까지의 핀치 크기(픽셀)를 시작 핀치 위치에 대해 나눕니다.
착시 속도(in 픽셀) 당 피치 제스처의 속도.
그리기 도구의 Enum.UserInputState 입니다.
이 입력을 내부적으로 게임 엔진이 관찰하고 행동하는지 여부를 나타냅니다. 일반적으로 이것은 UI 처리와 관련이 있으므로 버튼을 터치하거나 클릭하면 gameProcessedEvent 이 되고 연결된 입력 이벤트를 통해 true 이 됩니다. 이는 또한
코드 샘플
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
TouchRotate 이벤트는 사용자가 두 개의 손가락을 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 배열, 손가 움직임에 관련된 위치를 나타냅니다.
이 그림자의 시작 이후 회전된 도 수.
변경 사항(초)에 대한 회전 변경(도)의 변화량.
그리기 도구의 Enum.UserInputState 입니다.
이 입력을 내부적으로 게임 엔진이 관찰하고 행동하는지 여부를 나타냅니다. 일반적으로 이것은 UI 처리와 관련이 있으므로 버튼을 터치하거나 클릭하면 gameProcessedEvent 이 되고 연결된 입력 이벤트를 통해 true 이 됩니다. 이는 또한
코드 샘플
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 이벤트는 사용자가 장치에 손가락을 올 때 발생하며, 장치와 함께 시작하는 장치 입력을 시작합니다.The TouchStarted event fires when a user places their finger on a TouchEnabled 기기, beginning touch input with the 기기.
이 이벤트는 사용자가 기기화면을 터치하기 시작했을 때를 결정하는 데 사용할 수 있습니다. UserInputService.TouchEnded와 함께 사용하여 사용자가 화면을 터치하기 시작하고 멈춤을 결정할 수 있습니다.
터치 입력 개체는 터치의 수명 동안 동일한 입력 개체입니다. 따라서 터치 개체가 터치 개체인지 여부를 결정하려면 InputObjects 을 비교하는 것이 좋습니다.
사용자의 장치가 TouchEnabled인지 여부를 확인하고 이 장치 이벤트가 발생하는지 여부를 확인하려면 UserInputService.TouchEnabled 를 참조하십시오.
이 이벤트는 Roblox 클라이언트 창이 포커스 상태일 때만 발생합니다. 예를 들어, 창이 최소화되면 입력이 캡처되지 않습니다.
이 이벤트는 로컬에서만 발생하므로 LocalScript 에만 사용할 수 있습니다.
또한 참조하십시오.
매개 변수
사용자의 입력에 대한 정보를 포함하는 InputObject 인스턴스.
이 입력을 내부적으로 게임 엔진이 관찰하고 행동하는지 여부를 나타냅니다. 일반적으로 이것은 UI 처리와 관련이 있으므로 버튼을 터치하거나 클릭하면 gameProcessedEvent 이 되고 연결된 입력 이벤트를 통해 true 이 됩니다. 이는 또한
코드 샘플
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
TouchSwipe 이벤트는 사용자가 TouchEnabled 기기손가락을 움직이면 발생합니다.
이 이벤트는 사용자가 기기의 화면에 손가락을 스와이프했을 때 사용자가 스와이프한 방향을 결정하는 데 사용할 수 있습니다.
터치 입력 이동에 대한 더 정확한 추적을 위해 UserInputService.TouchMoved를 사용하세요
사용자의 장치가 TouchEnabled인지 여부를 확인하고 이 장치 이벤트가 발생하는지 여부를 확인하려면 UserInputService.TouchEnabled 를 참조하십시오.
이 이벤트는 Roblox 클라이언트 창이 포커스 상태일 때만 발생합니다. 예를 들어, 창이 최소화되면 입력이 캡처되지 않습니다.
이 이벤트는 로컬에서만 발생하므로 LocalScript 에만 사용할 수 있습니다.
또한 참조하십시오.
매개 변수
사용자가 스와이프한 방향을 나타내는 Enum.SwipeDirection 입니다.
이 동작에 관련된 손가락 수(예: 손가락).
이 입력을 내부적으로 게임 엔진이 관찰하고 행동하는지 여부를 나타냅니다. 일반적으로 이것은 UI 처리와 관련이 있으므로 버튼을 터치하거나 클릭하면 gameProcessedEvent 이 되고 연결된 입력 이벤트를 통해 true 이 됩니다. 이는 또한
코드 샘플
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
터치탭 이벤트는 TouchEnabled 기기사용자가 화면에서 손가락을 터치/탭할 때 발생합니다.
이 이벤트는 사용자가 게임 세계를 만질/탭할 때 발생하거나 GUI 요소를 탭할 때 발생합니다. 사용자가 게임 세계를 만질/탭할 때만 발생하는 이벤트를 검색하려면 UserInputService.TouchTapInWorld 를 사용하십시오.
사용자의 장치가 TouchEnabled인지 여부를 확인하고 이 장치 이벤트가 발생하는지 여부를 확인하려면 UserInputService.TouchEnabled 를 참조하십시오.
이 이벤트는 Roblox 클라이언트 창이 포커스 상태일 때만 발생합니다. 예를 들어, 창이 최소화되면 입력이 캡처되지 않습니다.
이 이벤트는 로컬에서만 발생하므로 LocalScript 에만 사용할 수 있습니다.
매개 변수
Datatype.Vector2 개체 배열, 입 위치를 나타내는 톡 제스처에 관련된 손가 위치를 나타냅니다.
이 입력을 내부적으로 게임 엔진이 관찰하고 행동하는지 여부를 나타냅니다. 일반적으로 이것은 UI 처리와 관련이 있으므로 버튼을 터치하거나 클릭하면 gameProcessedEvent 이 되고 연결된 입력 이벤트를 통해 true 이 됩니다. 이는 또한
코드 샘플
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 기기사용자가 화면에서 손가락을 터치/탭하면 발생합니다. 이 이벤트는 게임 세계에서 사용자가 탭하면 발생합니다.
이 이벤트는 사용자가 화면을 탭하고 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 클라이언트가 초점을 잃을 때마다 *“창 초점 해제”*를 인쇄합니다.
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 클라이언트가 초점을 맞출 때마다 *“창 초점”*을 출력합니다.
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)