사용자 입력을 행동에 연결하면 사용자가 경험의 기능을 훨씬 더 잘 직관적으로 제어할 수 있습니다. 이 튜토리얼에서는 특정 키에 재장전 동작을 바인딩할 것입니다.
시작하기
이 튜토리얼은 플레이어 도구 만들기에서 생성된 Blaster 도구를 사용합니다. 도구를 생성하는 지침을 따르거나 Blaster 모델을 다운로드하고 StarterPack에 삽입할 수 있습니다.
모델은 인벤토리에 추가되어 모든 경험 사이에서 사용될 수 있습니다. 경험에 모델을 추가하려면:
- 브라우저에서 모델 페이지를 열고 받기 버튼을 클릭합니다. 이렇게 하면 모델이 인벤토리에 추가됩니다.
- 드롭다운 메뉴가 내 모델로 설정되었는지 확인합니다.
- 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 함수를 비활성화하고 재장전 애니메이션이 끝나면 다시 활성화할 수 있습니다.