시작하기
중급 튜토리얼

사용자 입력 감지

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

사용자 입력을 행동에 연결하면 사용자가 경험의 기능을 훨씬 더 잘 직관적으로 제어할 수 있습니다. 이 튜토리얼에서는 특정 키에 재장전 동작을 바인딩할 것입니다.

시작하기

이 튜토리얼은 플레이어 도구 만들기에서 생성된 Blaster 도구를 사용합니다. 도구를 생성하는 지침을 따르거나 Blaster 모델을 다운로드하고 StarterPack에 삽입할 수 있습니다.

모델은 인벤토리에 추가되어 모든 경험 사이에서 사용될 수 있습니다. 경험에 모델을 추가하려면:

  1. 브라우저에서 모델 페이지를 열고 받기 버튼을 클릭합니다. 이렇게 하면 모델이 인벤토리에 추가됩니다.
  2. Studio의 메뉴나 탭 도구 모음에서 도구 상자를 열고 인벤토리 탭을 선택합니다.
  3. 드롭다운 메뉴가 내 모델로 설정되었는지 확인합니다.
  4. Blaster 모델을 선택하여 경험에 추가합니다.

액션 핸들러 만들기

먼저 사용자 입력이 감지될 때 처리할 함수가 필요합니다.

  1. Blaster 내의 ToolController LocalScript를 엽니다.

    Blaster 도구 내부의 ToolController 스크립트가 선택된 탐색기의 보기

  2. 액션을 위한 이름을 저장할 변수를 만듭니다.


    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  3. 세 개의 인자: actionName, inputState, inputObject를 받는 onAction이라는 이름의 함수를 만듭니다. 이것이 사용자 입력이 감지될 때 실행되는 함수입니다.


    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. 함수 내부에서 주어진 actionName이 재장전 동작 이름과 일치하고 inputStateUserInputState.Begin (시작 상태)인지 확인합니다. 이는 inputState가 변경될 때마다 함수가 실행되지만, 재장전은 한 번만 발생해야 하므로 중요합니다.


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. 사용자가 재장전할 때 명확하게 하도록 도구의 TextureId를 잠깐 "rbxassetid://6593020923"로 변경한 다음 원래 값인 "rbxassetid://92628145"로 다시 변경합니다.


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end

액션 바인딩

ContextActionService를 사용하여 특정 입력에 함수를 바인딩할 수 있습니다. BindAction 함수를 사용하여 여러 인수를 전달합니다:

  • 액션의 이름.
  • 액션을 처리하는 함수(콜백이라고도 함).
  • 터치 버튼을 표시할지 여부.
  • 액션과 연결하여 감지할 수 있는 Enum.KeyCodes의 수.

KeyCodes는 키보드 키 또는 컨트롤러 버튼 등 다양한 입력 버튼을 나타내는 값입니다. 코드의 전체 목록은 여기에서 확인할 수 있습니다.

  1. 스크립트 상단에서 ContextActionService를 가져옵니다.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. toolEquipped 함수 내에서 BindAction을 호출하고 다음 인수를 전달합니다:

    • 액션 이름 (RELOAD_ACTION)
    • 액션 핸들러 (onAction)
    • 터치 버튼을 생성하는 값 (true)
    • 감지할 키 입력 (Enum.KeyCode.R)

    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
  3. 도구를 장착하고 키보드의 R 키를 눌러 플레이테스트를 진행합니다. 백팩 아이콘이 잠깐 기다리는 심볼로 바뀌어 무기가 재장전되고 있음을 나타냅니다:

액션 바인딩 해제

사용자가 도구를 해제하면 액션이 바인딩 해제되어 도구가 장착되지 않은 상태에서 재장전할 수 없게 해야 합니다.

  1. toolUnequipped라는 새 함수를 만들고 UnbindAction을 호출하여 액션 이름을 전달합니다.


    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  2. toolUnequipped 함수를 Unequipped 이벤트에 연결하여 이벤트가 발생할 때 함수가 실행되도록 합니다.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Unequipped:Connect(toolUnequipped)
    tool.Activated:Connect(toolActivated)
  3. 모든 것이 정상적으로 작동하는지 확인하기 위해 플레이테스트를 진행합니다. 도구가 장착되어 있을 때는 재장전할 수 있지만, 해제된 경우에는 재장전할 수 없어야 합니다.

이제 재장전 애니메이션이 완료되었습니다. 추가 도전으로, 블래스터가 발사될 때마다 탄약 카운터를 감소시키기를 시도해 보십시오. 그런 다음 총에 탄약이 없을 때 toolActivated 함수를 비활성화하고 재장전 애니메이션이 끝나면 다시 활성화할 수 있습니다.

©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.