사용자 입력 감지

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

사용자 입력을 액션에 연결하면 사용자에게 경험의 기능에 대한 훨씬 더 나은 및 더 직관적인 제어를 제공합니다. 이 튜토리얼에서 특정 키에 다시 로딩 액션을 바인딩합니다.

시작하기

이 튜토리얼에서는 Blaster 도구를 사용하여 만든 인стру먼트를 생성합니다. 이 도구를 만들려면 생성 플레이어 도구 를 참조하십시오. 이 도구를 만들거나 Blaster 모델을 다운로드하고 2>StarterPack2> 에 삽입할 수 있습니다.

모델은 인벤토리에 추가하여 모든 경험에서 사용할 수 있습니다. 모델을 경험에 추가하려면:

  1. 브라우저에서 모델 페이지를 열고, 가져오기 버튼을 클릭하십시오. 이렇게 하면 모델이 인벤토리에 추가됩니다.
  2. In Studio, go to the 보기 tab and click on the 도구 상자.
  3. 도구 상자 창에서 인벤토리 버튼을 클릭한 다음 내 모델에 드롭다운이 있는지 확인하십시오.
  4. 경험에 추가할 Blaster 모델을 선택합니다.

액션 핸들러 생성

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

  1. Blaster 내의 도구 컨트롤러 LocalScript를 엽니다.

  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. 사용자 입력을 감지할 때 실행되는 함수 onAction 에 다음과 같은 세 가지 인수를 받습니다. actionName, inputState, 및 inputObject 입니다. 이것은 사용자 입력이 감지될 때 실행되는 함수입니다.


    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 (시작 상태)이라는 점을 확인하십시오. 이는 함수가 매번 2> 输入状态2> 이 변경될


    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 의 모든 크기를 감지하고 연관합니다.

키 코드는 키보드 키 또는 컨트롤러 버튼과 같은 다양한 입력 버튼을 나타내는 값입니다. 전체 목록은 here 에 있습니다.

  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 함수를 비활성화한 다음 재장전 애니메이션이 완료될 때 다시 활성화하십시오.