크로스 플랫폼 입력 작업 시스템을 사용하면 작업을 연결하고 다양한 하드웨어 입력에 대해 바인딩을 배열할 수 있습니다. 컨텍스트와 결합하여 플레이의 어떤 단계에서든 모든 장치에서 작동하는 모듈식 입력 시스템을 쉽게 구성하고 편집할 수 있습니다. 사용 사례에는 다음이 포함됩니다:
- 플레이어가 전투 모드인지 관중 모드인지에 따라 작업이 동적으로 교체되는 1인칭 슈팅 게임 시스템.
- 가속/감속, 자동차 부스터, 연료 보급소를 갖춘 종합적인 운전 시스템.
- 격투 게임에서 플레이어가 펀치를 놓치지 않고도 즉시 교체할 수 있는 능력 시스템의 핫키.
입력 컨텍스트
InputContext는 관련된 입력 작업을 보유하는 작업의 모음입니다. 예를 들어 PlayContext는 게임 내 캐릭터 조정을 위한 것과 NavContext는 UI 메뉴를 탐색하기 위한 조정입니다. 인벤토리 메뉴가 열릴 때 NavContext를 활성화하고 플레이어가 메뉴를 닫고 기본 게임 플레이로 돌아갈 때 PlayContext로 변경하는 것과 같이 Enabled 속성을 통해 컨텍스트를 활성화/비활성화할 수 있습니다.
게임이 처음에는 여러 입력 컨텍스트를 사용하지 않더라도, 모든 입력 시스템의 최상위 레벨에서 기본 컨텍스트를 만드는 것이 좋습니다. 예를 들어 게임 플레이 중 입력을 위한 PlayContext 인스턴스를 만듭니다.
폴더에 새 InputContext를 삽입하고 이름을 PlayContext로 변경합니다.

입력 작업
InputAction은 "점프", "스프린트" 또는 "사격"과 같은 게임 플레이 동작 메커니즘을 정의합니다. 이러한 작업은 입력 바인딩을 사용하여 하드웨어 입력에 매핑됩니다.
InputAction은 Type 속성(Enum.InputActionType)에 따라 여러 변형이 있을 수 있습니다. 기본값은 Bool로, ButtonA, E, 또는 MouseLeftButton과 같은 입력의 누름/릴리스에서 true/false 값을 수신하도록 설계되었습니다.
| 입력 작업 유형 | 예시 사용 |
|---|---|
| Bool | 점프, 사격, 스프린트 등과 같은 트리거 동작으로 아날로그 입력에서 눌림/릴리스 임계값을 지원합니다. |
| Direction1D | 자동차의 가속 페달이나 뷰 스코프의 확대/축소 수준과 같은 가변적인 영-전체 작업. |
| Direction2D | 카메라 회전이나 표준 Roblox 캐릭터 이동과 같은 2D 방향 이동. |
| Direction3D | 공중에 떠 있는 차량과 같이 위/아래로 뜨거나 가속/감속 가능하며 좌/우로 이동하는 3D 방향 이동. |
| ViewportPosition | 마우스 입력과 같은 2D 뷰포트 좌표로, 커스텀 커서 또는 광선 투사를 통해 월드 객체를 선택하는 데 사용됩니다. |
간단한 캐릭터 스프린트를 위한 InputAction을 테스트하려면:
ReplicatedStorage의 PlayContext 컨텍스트 내에 새 InputAction을 생성하고 이름을 CharacterSprint로 변경하여 전용 작업을 나타냅니다.

입력 바인딩
InputBinding은 어떤 하드웨어 바인딩이 부모 InputAction을 트리거해야 하는지를 정의합니다. 예를 들어 키 누르기, 게임패드 버튼, 터치 장치에서의 탭 등을 포함합니다. 크로스 플랫폼 호환성을 위해 각 InputAction에는 게임패드, 키보드/마우스, 터치에 대한 InputBinding이 있어야 합니다.

부모 InputAction에 할당된 Type은 자식 InputBinding 인스턴스에 대해 유효한 일반 입력 유형(키/버튼/탭, 아날로그 트리거, 썸스틱 등)에 직접 영향을 미칩니다. 이를 통해 부모 작업의 연결된 이벤트에 전달되는 값은 바인딩의 선택된 입력 유형에 따라 다릅니다. 작업 유형, 바인딩 및 반환 값 간의 상관관계에 대한 자세한 내용은 입력 이벤트를 참조하십시오.
간단한 캐릭터 스프린트를 위한 바인딩을 연결하려면:
CharacterSprint 작업에 새 InputBinding을 삽입하고 이름을 KeyboardBinding으로 변경합니다. 그런 다음 바인딩의 KeyCode 속성을 LeftShift로 설정합니다.


마우스 Shift-락이 키 바인딩에 간섭하지 않도록 하기 위해 탐색기에서 StarterPlayer를 선택하고 속성 창에서 EnableMouseLockOption을 비활성화합니다.


CharacterSprint 작업에 두 번째 InputBinding을 삽입하고 이름을 GamepadBinding으로 변경합니다. 그런 다음 바인딩의 KeyCode 속성을 ButtonY로 설정합니다.


CharacterSprint 작업에 세 번째 InputBinding을 삽입하고 이름을 TouchBinding으로 변경합니다. 그런 다음 속성 창에서 바인딩의 UIButton 속성을 이전에 생성한 StarterGui 내의 SprintButton 버튼에 연결합니다.


입력 이벤트
InputAction 인스턴스는 InputBindings에서 오는 플레이어 입력을 처리하기 위한 세 가지 내장 이벤트를 가지고 있습니다.
- StateChanged — 이 이벤트는 모든 입력 작업 유형에 대해 상태가 변경될 때 발생하지만, 상태가 동일 상태로 전환되려 할 때는 발생하지 않습니다.
입력 작업의 Type(Bool, Direction1D, Direction2D, Direction3D, 또는 ViewportPosition) 및 자식 InputBinding에서 오는 일반 입력 유형(키/버튼/탭, 아날로그 트리거, 썸스틱 등)에 따라, Pressed, Released, 및 StateChanged 이벤트 핸들러에 반환되는 값이 다릅니다. 다음 표를 검토하여 상관관계를 더욱 잘 이해하십시오.
Bool 유형은 점프, 사격, 스프린트 등과 같은 트리거 동작에 가장 적합하며 아날로그 입력에서 눌림/릴리스 임계값을 지원합니다.
| 유효한 입력 유형: InputBindings | 반환된 InputAction 이벤트(들) |
|---|---|
| 바인딩의 KeyCode 속성으로부터 키보드 키 또는 기본 마우스/게임패드 버튼의 부울 입력. |
|
| 바인딩의 KeyCode 속성을 통해 아날로그 입력(게임패드 트리거)으로부터의 가변 입력량. |
|
간단한 캐릭터 스프린트를 위한 이벤트를 연결하려면:
CharacterSprint 트리에 새 Script를 삽입하여 다양한 입력 바인딩과 나란히 두십시오. 그런 다음 RunContext를 Client로 설정하고 이름을 OnActivate로 변경합니다.

OnActivate 스크립트에 다음 코드를 붙여넣습니다. 스프린트 입력 바인딩이 눌릴 때마다 캐릭터의 걷기 속도를 두 배로 늘리는 Pressed 이벤트 연결을 13
15 라인에서 확인하십시오. 그리고 스프린트 입력 바인딩이 릴리스 될 때 걷기 속도를 기본값으로 재설정하는 해당 Released 이벤트 연결을 1618 라인에서 확인합니다.OnActivate (클라이언트 스크립트)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)게임을 플레이하고 이전에 선택한 바인딩으로 캐릭터 스프린트 작업을 테스트합니다: 키보드의 LeftShift, 게임패드의 ButtonY, 그리고 터치 장치의 온스크린 SprintButton. 또한 컨트롤러 에뮬레이터를 사용하여 Roblox Studio에서 직접 게임패드 입력을 테스트할 수 있습니다.
컨텍스트 변경
PlayContext와 같은 입력 컨텍스트를 갖추면 실행 중 스크립팅을 통해 컨텍스트를 활성화/비활성화하고, 어떤 작업이 다른 작업보다 우선하는지를 결정하기 위해 Priority를 변경하며, 하위 우선 순위의 컨텍스트에서 처리되는 입력을 Sink하여 차단할 수 있습니다.
다른 스크립트에서 컨텍스트를 쉽게 전환할 수 있도록 ReplicatedStorage 내의 입력 폴더에 새 BindableEvent를 삽입하고 이름을 ContextEvent로 변경합니다.

동일한 수준에 새 Script를 생성하고 RunContext를 Client로 설정한 후 이름을 UpdateContext로 변경합니다.

UpdateContext 스크립트 내에 다음 코드를 붙여넣습니다:
UpdateContext (클라이언트 스크립트)local ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")-- 바인더블 이벤트 연결contextEvent.Event:Connect(function(targetContext, enabled)local context = inputsFolder:FindFirstChild(targetContext)if context thencontext.Enabled = enabledprint(context.Name .. ": " .. tostring(context.Enabled))elsewarn("InputContext를 찾을 수 없습니다!")endend)UpdateContext 스크립트가 설정된 상태에서 이제 바인더블 이벤트를 발생시켜 이름이 지정된 InputContext를 업데이트할 수 있습니다. 예를 들어 ScreenGui 컨테이너 내의 GuiButton 동작을 제어하는 LocalScript에서 다음과 같이 발생시킬 수 있습니다.
버튼 스크립트local ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")local button = script.Parentbutton.Activated:Connect(function()-- 지정된 입력 컨텍스트 및 활성화 상태와 함께 바인더블 이벤트를 발생시킴contextEvent:Fire("PlayContext", true)end)
기본 바인딩
Roblox는 이동, 카메라 제어 및 기본 환경 상호작용을 위한 기본 입력 바인딩을 제공합니다 — Roblox 플레이어는 이러한 컨트롤에 익숙하므로 특정 경우에만 이를 재정의해야 합니다. 또한 예약된 입력은 재정의할 수 없으며 항상 의도한 목적에 맞게 작동합니다.
| 동작 | 마우스/키보드 | 게임패드 | 터치 |
|---|---|---|---|
| Roblox 메뉴 열기 | Esc | 시작 버튼 (ButtonStart) | 해당 없음 |
| 개발자 콘솔 | F9 | 해당 없음 | 해당 없음 |
| 전체 화면 모드 (Windows) 바탕화면 보기 (Mac) | F11 | 해당 없음 | 해당 없음 |
| 비디오 녹화 (Windows) | F12 | 해당 없음 | 해당 없음 |
| 스크린샷 찍기 | PrintScreen | 해당 없음 | 해당 없음 |



