사용자 입력을 동작에 연결하면 사용자가 게임 기능을 훨씬 더 잘 이해하고 직관적으로 제어할 수 있습니다. 이 튜토리얼에서는 특정 키에 재장전 동작을 바인딩합니다.
시작하기
이 튜토리얼은 플레이어 도구 만들기에서 생성된 Blaster 도구를 사용합니다. 도구를 만들기 위한 지침을 따르거나 Blaster 모델을 다운로드하여 StarterPack에 삽입할 수 있습니다.
모델은 모든 게임 간에 사용할 수 있도록 인벤토리에 추가할 수 있습니다. 게임에 모델을 추가하려면:
- 브라우저에서 모델 페이지를 열고 Get 버튼을 클릭합니다. 이렇게 하면 모델이 인벤토리에 추가됩니다.
- 드롭다운이 My Models로 설정되어 있는지 확인합니다.
- Blaster 모델을 선택하여 게임에 추가합니다.
동작 핸들러 만들기
먼저, 사용자 입력이 감지될 때 처리할 함수가 필요합니다.
Blaster 내부의 ToolController LocalScript를 엽니다.

동작의 이름을 저장할 변수를 만듭니다.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function toolEquipped()tool.Handle.Equip:Play()endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)actionName, inputState, inputObject라는 세 개의 인수를 받는 onAction이라는 함수를 만듭니다. 이 함수는 사용자 입력이 감지될 때 실행됩니다.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()end함수 내부에서 주어진 actionName이 재장전 동작 이름과 일치하는지 확인하고 inputState가 UserInputState.Begin(시작 상태)인지 확인합니다. 이는 중요합니다. 왜냐하면 함수는 inputState가 변경될 때마다 실행되지만, 재장전은 한 번만 발생해야 하기 때문입니다.
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendend사용자가 재장전할 때 명확하게 보이도록 도구의 TextureId를 "rbxassetid://6593020923"로 잠시 변경한 후, 원래 값인 "rbxassetid://92628145"로 다시 변경합니다.
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endend
동작 바인딩
ContextActionService를 사용하여 특정 입력에 함수를 바인딩할 수 있습니다. BindAction 함수는 여러 인수를 받습니다:
- 동작의 이름.
- 동작을 처리할 함수(콜백이라고도 함).
- 터치스크린 버튼을 표시할지 여부.
- 동작과 연결할 Enum.KeyCodes의 수량.
KeyCodes는 키보드 키 또는 컨트롤러 버튼과 같은 다양한 입력 버튼을 나타내는 값입니다. 전체 코드 목록은 여기에서 확인할 수 있습니다.
스크립트 상단에서 ContextActionService를 가져옵니다.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"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 thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()end도구를 장착하고 키보드에서 R 키를 눌러 플레이 테스트를 진행합니다. 배낭 아이콘이 잠시 대기 기호로 변경되어 무기가 재장전되고 있음을 알립니다:
동작 바인딩 해제
사용자가 도구의 장착을 해제할 때, 동작은 바인딩 해제되어야 하며, 도구가 장착되지 않은 상태에서 재장전할 수 없도록 해야 합니다.
toolUnequipped라는 새 함수를 만들고 UnbindAction을 호출하여 동작 이름을 전달합니다.
local function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)toolUnequipped 함수를 Unequipped 이벤트에 연결하여 이벤트가 발생할 때 함수가 실행되도록 합니다.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Unequipped:Connect(toolUnequipped)tool.Activated:Connect(toolActivated)모든 것이 올바르게 작동하는지 확인하기 위해 플레이 테스트를 진행합니다. 도구가 장착된 상태에서는 재장전할 수 있지만, 장착 해제된 상태에서는 재장전할 수 없어야 합니다.
이제 재장전 애니메이션이 완료되었습니다. 추가 도전 과제로, 블래스터가 발사될 때마다 탄약 카운터를 세어보세요. 그런 다음 총에 탄약이 없을 때 toolActivated 함수를 비활성화하고, 재장전 애니메이션이 끝나면 다시 활성화할 수 있습니다.