사용자 입력을 액션에 연결하면 사용자에게 경험의 기능에 대한 훨씬 더 나은 및 더 직관적인 제어를 제공합니다. 이 튜토리얼에서 특정 키에 다시 로딩 액션을 바인딩합니다.
시작하기
이 튜토리얼에서는 Blaster 도구를 사용하여 만든 인стру먼트를 생성합니다. 이 도구를 만들려면 생성 플레이어 도구 를 참조하십시오. 이 도구를 만들거나 Blaster 모델을 다운로드하고 2>StarterPack2> 에 삽입할 수 있습니다.
모델은 인벤토리에 추가하여 모든 경험에서 사용할 수 있습니다. 모델을 경험에 추가하려면:
- 브라우저에서 모델 페이지를 열고, 가져오기 버튼을 클릭하십시오. 이렇게 하면 모델이 인벤토리에 추가됩니다.
- In Studio, go to the 보기 tab and click on the 도구 상자.
- 도구 상자 창에서 인벤토리 버튼을 클릭한 다음 내 모델에 드롭다운이 있는지 확인하십시오.
- 경험에 추가할 Blaster 모델을 선택합니다.
액션 핸들러 생성
먼저, 사용자 입력이 감지되면 처리할 함수가 필요합니다.
Blaster 내의 도구 컨트롤러 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)사용자 입력을 감지할 때 실행되는 함수 onAction 에 다음과 같은 세 가지 인수를 받습니다. actionName, inputState, 및 inputObject 입니다. 이것은 사용자 입력이 감지될 때 실행되는 함수입니다.
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 (시작 상태)이라는 점을 확인하십시오. 이는 함수가 매번 2> 输入状态2> 이 변경될
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 의 모든 크기를 감지하고 연관합니다.
키 코드는 키보드 키 또는 컨트롤러 버튼과 같은 다양한 입력 버튼을 나타내는 값입니다. 전체 목록은 here 에 있습니다.
스크립트 상단에 있는 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 함수를 비활성화한 다음 재장전 애니메이션이 완료될 때 다시 활성화하십시오.