입력 동작 시스템

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

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

  • 플레이어가 전투 모드에 있는지 관객 모드에 있는지에 따라 동작이 동적으로 교체되는 1인칭 슈팅 시스템.
  • 가속/감속, 자동차 부스터 및 연료 보급소가 장착된 포괄적인 주행 시스템.
  • 격투 게임에서 플레이어가 펀치를 놓치지 않고도 동작을 원활하게 교체할 수 있도록 하는 능력 시스템의 핫키.

입력 컨텍스트

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

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

  1. 권장
    ReplicatedStorage 내에 Inputs라는 이름의 Folder를 생성하여 다양한 입력 컨텍스트를 보관합니다.

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

    ReplicatedStorage 내의 새 InputContext 인스턴스, PlayContext로 이름 변경
  3. 선택 사항
    속성 창에서 Priority2000으로 설정하고 Sink를 활성화합니다. Sink가 활성화된 컨텍스트는 해당 우선 순위 수준에서 바인딩된 KeyCodes에 대한 입력 이벤트를 소비하여 이러한 입력이 낮은 우선 순위의 컨텍스트에 도달하지 못하도록 차단합니다. 이는 인벤토리 화면과 같은 특정 게임 플레이 입력을 열어두는 동안 억제해야 하는 경우에 유용합니다. 이 예제에서는 PlayContext에 기본 PlayerScripts 컨텍스트가 처리하기 전에 바인딩된 입력을 차단할 수 있을 만큼 높은 Priority가 부여됩니다.

    우선 순위가 2000으로 설정되고 Sink가 활성화된 InputContext

입력 동작

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

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

입력 동작 유형예제 사용
Bool점프, 사격, 스프린트 등과 같은 트리거 동작으로, 아날로그 입력에서 눌림/해제 임계값을 지원합니다.
Direction1D자동차의 가속 페달이나 뷰 스코프의 줌 레벨과 같은 가변 제로-풀 동작.
Direction2D카메라 회전 또는 표준 Roblox 캐릭터 이동과 같은 2D 방향 이동.
Direction3D공중에 떠 있는 차량과 같이 위/아래로 떠오르고, 가속/감속하며, 좌/우로 드리프트할 수 있는 3D 방향 이동.
ViewportPosition마우스 입력과 같은 2D 뷰포트 좌표로, 사용자 정의 커서 또는 세계 객체 선택을 위한 레이캐스팅에 사용됩니다.

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

  1. 권장
    탐색기에서 최상위 Workspace 객체를 선택한 다음, 속성 창에서 PlayerScriptsUseInputActionSystem 속성을 Enabled로 설정합니다.

  2. ReplicatedStorage 내의 PlayContext 컨텍스트에 새 InputAction을 생성하고 이름을 CharacterSprint로 변경하여 전용 동작을 나타냅니다.

    InputContext 내의 새 InputAction 인스턴스, CharacterSprint로 이름 변경
  3. 속성 창에서 동작의 TypeBool(기본값)임을 확인합니다. 이는 캐릭터가 스프린트 중인지 아닌지를 나타내는 불리언 true/false 동작으로서 간단한 캐릭터 스프린트에 적합한 논리적 유형입니다.

    InputAction의 Type 속성이 Bool로 설정됨

입력 바인딩

InputBinding은 어떤 하드웨어 바인딩이 부모 InputAction을 트리거해야 하는지를 정의합니다. 예를 들어, 키 누름, 게임패드 버튼 또는 터치 지원 장치에서의 탭 등이 있습니다. 크로스 플랫폼 호환성을 위해 각 InputAction게임패드, 키보드/마우스, 터치에 대한 InputBinding을 가져야 하며, 이는 다음과 같이 설명됩니다.

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

동작마우스/키보드게임패드터치
Roblox 메뉴 열기Esc시작 버튼 (ButtonStart)해당 없음
개발자 콘솔F9해당 없음해당 없음
전체 화면 모드 (Windows)
바탕화면 보기 (Mac)
F11해당 없음해당 없음
비디오 녹화 (Windows)F12해당 없음해당 없음
스크린샷 찍기PrintScreen해당 없음해당 없음

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

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

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

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

  3. StarterGui 내의 ScreenGui 컨테이너 안에 화면 버튼을 생성하고 이름을 SprintButton으로 변경한 후 원하는 대로 위치/크기 조정합니다.

  4. 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 속성을 통해 키보드 키 또는 기본 마우스/게임패드 버튼에서 오는 불리언 입력, 또는 바인딩의 UIButton 속성을 통해 GuiButton의 누름/해제.
  • Pressed 이벤트:
    • 눌렸을 때 true
  • Released 이벤트:
    • 해제되었을 때 true
  • StateChanged 이벤트:
    • true(눌림) 또는 false(해제됨)
바인딩의 KeyCode 속성을 통해 게임패드 트리거(ButtonL2/ButtonR2)에서 오는 가변 입력량.

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

  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)

입력 동작 관리자

입력 동작 관리자 도구는 입력 아키텍처를 설계, 감사 및 확장하기 위한 통합된 매트릭스 스타일 인터페이스입니다.

이를 사용하려면, Studio의 메뉴로 이동하여 입력 ⟩ 입력 동작 관리자를 선택합니다. 게임이 이미 입력 컨텍스트, 동작 또는 바인딩을 사용하고 있다면, 관리자는 자동으로 DataModel을 스캔하고 기존 인스턴스를 편집기 그리드로 추출합니다. 새로운 입력 관련 인스턴스는 자동으로 ReplicatedStorage 내의 Inputs 폴더에 채워집니다.

ReplicatedStorage 내의 Inputs라는 이름의 폴더

위 섹션에서 설명한 대로 캐릭터 스프린트를 위한 입력 설정을 구성하려면:

  1. 권장
    탐색기에서 최상위 Workspace 객체를 선택한 다음, 속성 창에서 PlayerScriptsUseInputActionSystem 속성을 Enabled로 설정합니다.

  2. StarterGui 내의 ScreenGui 컨테이너 안에 화면 버튼을 생성하고 이름을 SprintButton으로 변경한 후 원하는 대로 위치/크기 조정합니다.

  3. 입력 동작 관리자에서 컨텍스트 열 머리글 위에 마우스를 올리고 버튼을 클릭합니다. 새 컨텍스트에 적절한 이름을 입력하고 PlayContext와 같은 이름을 입력한 후 Enter를 누릅니다. 일치하는 이름의 InputContextReplicatedStorage에 나타납니다.

    ReplicatedStorage 내의 새 InputContext 인스턴스, PlayContext로 이름 변경
  4. 새 컨텍스트 위에 마우스를 올리고 버튼을 클릭합니다. 팝업 메뉴에서 Bool을 선택하고 동작의 이름으로 CharacterSprint를 입력한 후 Enter를 누릅니다. 일치하는 이름의 InputAction이 컨텍스트 아래에 나타납니다.

    InputContext 내의 새 InputAction 인스턴스, CharacterSprint로 이름 변경
  5. CharacterSprint 행에서 각 입력 유형에 대한 바인딩을 할당합니다:

    1. 키보드 및 마우스 — 화살표 버튼을 클릭하고 선택기 메뉴에서 LeftShift를 선택합니다.
    2. 터치 — 셀을 클릭한 다음, 탐색기 계층에서 이전에 ScreenGui에 삽입한 SprintButton 객체를 클릭합니다.
    3. 게임패드 — 화살표 버튼을 클릭하고 선택기 메뉴에서 ButtonY를 선택합니다.
  6. CharacterSprint 트리에 새 Script를 삽입하고 다양한 입력 바인딩과 함께 배치합니다. 그런 다음 RunContextClient로 설정하고 이름을 OnActivate로 변경합니다.

  7. 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)
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.