사용자 입력을 작업에 연결하면 사용자가 경험의 기능에 대해 훨씬 더 나은 및 직관적인 제어를 할 수 있습니다.이 자습서에서는 특정 키에 재로드 작업을 바인딩하는 방법을 살펴봅니다.
시작하기
이 자습서에서는 블래스터 도구를 사용하여 플레이어 도구 생성에서 생성된 도구를 사용합니다.이 지침을 따라 도구를 만들거나 블래스터 모델을 다운로드하여 스타터 팩 에 삽입할 수 있습니다.
모델은 경험 간에 사용되도록 인벤토리에 추가될 수 있습니다. 경험에 모델을 추가하려면:
- 브라우저에서 모델 페이지를 열고 가져오기 버튼을 클릭하십시오. 이렇게 하면 모델이 인벤토리에 추가됩니다.
- Studio에서 보기 탭으로 이동하고 도구 상자 를 클릭하십시오.
- 도구 상자 창에서 재고 버튼을 클릭하십시오. 그런 다음 드롭다운이 내 모델 에 있는지 확인하십시오.
- 경험에 추가할 블래스터 모델을 선택하십시오.
액션 처리기 생성
먼저, 사용자 입력이 감지될 때 처리할 함수가 필요합니다.
블래스터 내부에서 툴컨트롤러 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 인지(시작 상태) 확인합니다.이는 함수가 변경될 때마다 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
동작 액션
는 여러 인수를 받는 함수를 사용하여 특정 입력에 함수를 바인딩하는 데 사용할 수 있습니다:
- 액션이름
- 작업을 처리하는 함수(콜백이라고도 함)
- 터치스크린 버튼을 표시해야 하는지 여부
- 액션을 감지하고 연결하기 위한 모든 금액의 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 함수를 비활성화한 다음 재장전 애니메이션이 완료되면 다시 활성화할 수 있습니다.