입력 작업 시스템

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

크로스 플랫폼 입력 작업 시스템을 사용하면 작업을 연결하고 다양한 하드웨어 입력에 대해 바인딩을 배열할 수 있습니다. 컨텍스트와 결합하여 플레이의 어떤 단계에서든 모든 장치에서 작동하는 모듈식 입력 시스템을 쉽게 구성하고 편집할 수 있습니다. 사용 사례에는 다음이 포함됩니다:

  • 플레이어가 전투 모드인지 관중 모드인지에 따라 작업이 동적으로 교체되는 1인칭 슈팅 게임 시스템.
  • 가속/감속, 자동차 부스터, 연료 보급소를 갖춘 종합적인 운전 시스템.
  • 격투 게임에서 플레이어가 펀치를 놓치지 않고도 즉시 교체할 수 있는 능력 시스템의 핫키.

입력 컨텍스트

InputContext는 관련된 입력 작업을 보유하는 작업의 모음입니다. 예를 들어 PlayContext는 게임 내 캐릭터 조정을 위한 것과 NavContext는 UI 메뉴를 탐색하기 위한 조정입니다. 인벤토리 메뉴가 열릴 때 NavContext를 활성화하고 플레이어가 메뉴를 닫고 기본 게임 플레이로 돌아갈 때 PlayContext로 변경하는 것과 같이 Enabled 속성을 통해 컨텍스트를 활성화/비활성화할 수 있습니다.

게임이 처음에는 여러 입력 컨텍스트를 사용하지 않더라도, 모든 입력 시스템의 최상위 레벨에서 기본 컨텍스트를 만드는 것이 좋습니다. 예를 들어 게임 플레이 중 입력을 위한 PlayContext 인스턴스를 만듭니다.

  1. 추천
    ReplicatedStorage 내에 Inputs라는 Folder를 생성하여 다양한 입력 컨텍스트를 보관합니다.

    ReplicatedStorage 내에 생성된 새 폴더, 이름이 Inputs로 변경됨
  2. 폴더에 새 InputContext를 삽입하고 이름을 PlayContext로 변경합니다.

    ReplicatedStorage 내의 새 InputContext 인스턴스, 이름이 PlayContext로 변경됨
  3. 속성 창에서 Priority2000으로 설정하고 Sink를 활성화합니다. Sink가 활성화된 컨텍스트는 해당 우선 순위 수준에서 바인딩된 KeyCodes의 입력 이벤트를 소비하여 특정 입력이 낮은 우선 순위의 컨텍스트에 도달하지 못하도록 차단합니다. 이는 인벤토리 화면과 같이 열려 있을 때 특정 게임 플레이 입력을 억제해야 하는 사용 사례에 실용적입니다. 이 예시에서는 PlayContext가 기본 PlayerScripts 컨텍스트가 이를 처리하기 전에 바인딩된 입력을 침수시키기 위해 충분히 높은 Priority를 부여받습니다.

입력 작업

InputAction은 "점프", "스프린트" 또는 "사격"과 같은 게임 플레이 동작 메커니즘을 정의합니다. 이러한 작업은 입력 바인딩을 사용하여 하드웨어 입력에 매핑됩니다.

InputActionType 속성(Enum.InputActionType)에 따라 여러 변형이 있을 수 있습니다. 기본값은 Bool로, ButtonA, E, 또는 MouseLeftButton과 같은 입력의 누름/릴리스에서 true/false 값을 수신하도록 설계되었습니다.

입력 작업 유형예시 사용
Bool점프, 사격, 스프린트 등과 같은 트리거 동작으로 아날로그 입력에서 눌림/릴리스 임계값을 지원합니다.
Direction1D자동차의 가속 페달이나 뷰 스코프의 확대/축소 수준과 같은 가변적인 영-전체 작업.
Direction2D카메라 회전이나 표준 Roblox 캐릭터 이동과 같은 2D 방향 이동.
Direction3D공중에 떠 있는 차량과 같이 위/아래로 뜨거나 가속/감속 가능하며 좌/우로 이동하는 3D 방향 이동.
ViewportPosition마우스 입력과 같은 2D 뷰포트 좌표로, 커스텀 커서 또는 광선 투사를 통해 월드 객체를 선택하는 데 사용됩니다.

간단한 캐릭터 스프린트를 위한 InputAction을 테스트하려면:

  1. ReplicatedStoragePlayContext 컨텍스트 내에 새 InputAction을 생성하고 이름을 CharacterSprint로 변경하여 전용 작업을 나타냅니다.

    InputContext 내의 새 InputAction 인스턴스, 이름이 CharacterSprint로 변경됨
  2. 속성 창에서 작업의 TypeBool(기본값)인지 확인합니다. 이는 캐릭터 스프린트를 위한 논리적 유형으로, 캐릭터가 스프린트를 하거나 하지 않는 부울 true/false 동작입니다.

    입력 작업의 타입 속성이 Bool로 설정됨

입력 바인딩

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

부모 InputAction에 할당된 Type은 자식 InputBinding 인스턴스에 대해 유효한 일반 입력 유형(키/버튼/탭, 아날로그 트리거, 썸스틱 등)에 직접 영향을 미칩니다. 이를 통해 부모 작업의 연결된 이벤트에 전달되는 값은 바인딩의 선택된 입력 유형에 따라 다릅니다. 작업 유형, 바인딩 및 반환 값 간의 상관관계에 대한 자세한 내용은 입력 이벤트를 참조하십시오.

간단한 캐릭터 스프린트를 위한 바인딩을 연결하려면:

  1. CharacterSprint 작업에 새 InputBinding을 삽입하고 이름을 KeyboardBinding으로 변경합니다. 그런 다음 바인딩의 KeyCode 속성을 LeftShift로 설정합니다.

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

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

  4. StarterGuiScreenGui 컨테이너 내에 온스크린 버튼을 생성하고, 이름을 SprintButton으로 변경한 후 원하는 대로 위치/크기를 설정합니다.

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

입력 이벤트

InputAction 인스턴스는 InputBindings에서 오는 플레이어 입력을 처리하기 위한 세 가지 내장 이벤트를 가지고 있습니다.

  • Pressed — 이 이벤트는 입력 작업의 TypeBool로 설정되어 있을 때만 발생하며, 상태가 false에서 true로 변할 때만 발생합니다.
  • Released — 이 이벤트는 입력 작업의 TypeBool로 설정되어 있을 때만 발생하며, 상태가 true에서 false로 변할 때만 발생합니다.
  • StateChanged — 이 이벤트는 모든 입력 작업 유형에 대해 상태가 변경될 때 발생하지만, 상태가 동일 상태로 전환되려 할 때는 발생하지 않습니다.

입력 작업의 Type(Bool, Direction1D, Direction2D, Direction3D, 또는 ViewportPosition) 및 자식 InputBinding에서 오는 일반 입력 유형(키/버튼/탭, 아날로그 트리거, 썸스틱 등)에 따라, Pressed, Released, 및 StateChanged 이벤트 핸들러에 반환되는 값이 다릅니다. 다음 표를 검토하여 상관관계를 더욱 잘 이해하십시오.

Bool 유형은 점프, 사격, 스프린트 등과 같은 트리거 동작에 가장 적합하며 아날로그 입력에서 눌림/릴리스 임계값을 지원합니다.

유효한 입력 유형: InputBindings반환된 InputAction 이벤트(들)
바인딩의 KeyCode 속성으로부터 키보드 키 또는 기본 마우스/게임패드 버튼의 부울 입력.
  • Pressed 이벤트:
    • 눌림 시 true
  • Released 이벤트:
    • 릴리스 시 true
  • StateChanged 이벤트:
    • 눌림 시 true (pressed) 또는 릴리스 시 false (released)
바인딩의 KeyCode 속성을 통해 아날로그 입력(게임패드 트리거)으로부터의 가변 입력량.

간단한 캐릭터 스프린트를 위한 이벤트를 연결하려면:

  1. CharacterSprint 트리에 새 Script를 삽입하여 다양한 입력 바인딩과 나란히 두십시오. 그런 다음 RunContextClient로 설정하고 이름을 OnActivate로 변경합니다.

  2. OnActivate 스크립트에 다음 코드를 붙여넣습니다. 스프린트 입력 바인딩이 눌릴 때마다 캐릭터의 걷기 속도를 두 배로 늘리는 Pressed 이벤트 연결을 1315 라인에서 확인하십시오. 그리고 스프린트 입력 바인딩이 릴리스 될 때 걷기 속도를 기본값으로 재설정하는 해당 Released 이벤트 연결을 1618 라인에서 확인합니다.

    OnActivate (클라이언트 스크립트)

    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
  3. 게임을 플레이하고 이전에 선택한 바인딩으로 캐릭터 스프린트 작업을 테스트합니다: 키보드의 LeftShift, 게임패드의 ButtonY, 그리고 터치 장치의 온스크린 SprintButton. 또한 컨트롤러 에뮬레이터를 사용하여 Roblox Studio에서 직접 게임패드 입력을 테스트할 수 있습니다.

컨텍스트 변경

PlayContext와 같은 입력 컨텍스트를 갖추면 실행 중 스크립팅을 통해 컨텍스트를 활성화/비활성화하고, 어떤 작업이 다른 작업보다 우선하는지를 결정하기 위해 Priority를 변경하며, 하위 우선 순위의 컨텍스트에서 처리되는 입력을 Sink하여 차단할 수 있습니다.

  1. 다른 스크립트에서 컨텍스트를 쉽게 전환할 수 있도록 ReplicatedStorage 내의 입력 폴더에 새 BindableEvent를 삽입하고 이름을 ContextEvent로 변경합니다.

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

  3. 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 then
    context.Enabled = enabled
    print(context.Name .. ": " .. tostring(context.Enabled))
    else
    warn("InputContext를 찾을 수 없습니다!")
    end
    end)
  4. UpdateContext 스크립트가 설정된 상태에서 이제 바인더블 이벤트를 발생시켜 이름이 지정된 InputContext를 업데이트할 수 있습니다. 예를 들어 ScreenGui 컨테이너 내의 GuiButton 동작을 제어하는 LocalScript에서 다음과 같이 발생시킬 수 있습니다.

    버튼 스크립트

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    local button = script.Parent
    button.Activated:Connect(function()
    -- 지정된 입력 컨텍스트 및 활성화 상태와 함께 바인더블 이벤트를 발생시킴
    contextEvent:Fire("PlayContext", true)
    end)

기본 바인딩

Roblox는 이동, 카메라 제어 및 기본 환경 상호작용을 위한 기본 입력 바인딩을 제공합니다 — Roblox 플레이어는 이러한 컨트롤에 익숙하므로 특정 경우에만 이를 재정의해야 합니다. 또한 예약된 입력은 재정의할 수 없으며 항상 의도한 목적에 맞게 작동합니다.

동작마우스/키보드게임패드터치
Roblox 메뉴 열기Esc시작 버튼 (ButtonStart)해당 없음
개발자 콘솔F9해당 없음해당 없음
전체 화면 모드 (Windows)
바탕화면 보기 (Mac)
F11해당 없음해당 없음
비디오 녹화 (Windows)F12해당 없음해당 없음
스크린샷 찍기PrintScreen해당 없음해당 없음
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.