사용자 입력 감지

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

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

시작하기

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

모델은 모든 게임 간에 사용할 수 있도록 인벤토리에 추가할 수 있습니다. 게임에 모델을 추가하려면:

  1. 브라우저에서 모델 페이지를 열고 Get 버튼을 클릭합니다. 이렇게 하면 모델이 인벤토리에 추가됩니다.
  2. Studio의 Window 메뉴 또는 Home 탭 도구 모음에서 Toolbox를 열고 Inventory 탭을 선택합니다.
  3. 드롭다운이 My Models로 설정되어 있는지 확인합니다.
  4. Blaster 모델을 선택하여 게임에 추가합니다.

동작 핸들러 만들기

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

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

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

  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'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.