개요
ContextActionService는 게임플레이 중 키보드, 마우스, 터치 등 다양한 입력 방식을 효과적으로 처리하고, 상황에 맞는 인터페이스를 손쉽게 구현할 수 있도록 도와줍니다. 이를 통해 플레이어 입력을 간편하게 관리하고, 게임 내 Context에 따라 유연하게 동작을 할당하거나 해제할 수 있습니다.
특징
키보드, 마우스, 터치 등 여러 입력 장치를 동일한 방식으로 처리할 수 있습니다.
PC 환경의 Studio 와 모바일 플랫폼에서 호환되며, 입력 처리를 간소화합니다.
메뉴 화면, 게임플레이 등 특정 상황에 따라 필요한 입력만 활성화할 수 있습니다.
UserInputState 를 통해 입력 상태를 구분해 세부적인 동작을 설정할 수 있습니다.
사용 방법
1. 액션 생성하기
LocalScript에서 BindAction 함수 를 이용해 액션을 생성할 수 있습니다. 액션을 생성할 때, 액션의 이름과 TouchButton 생성 여부, PC에서 사용할 입력 키를 지정할 수 있습니다.
Copy local ContextActionService = game: GetService ( "ContextActionService" )
local ActionName = "JumpAction"
local IsCreateTouchButton = true
local KeyCode = Enum.KeyCode.F
local function OnAction ( actionName , inputState , inputObject )
if inputState == Enum.UserInputState.Begin then
print (actionName .. " triggered!" )
end
end
ContextActionService: BindAction (ActionName, OnAction, IsCreateTouchButton, KeyCode)
생성한 액션은 다음과 같이 글자나 버튼의 이미지, 위치를 설정할 수 있습니다.
Copy ContextActionService: SetTitle (ActionName, "TEST" )
ContextActionService: SetImage (ActionName, "ovdrassetid://1234" )
ContextActionService: SetPosition (ActionName, UDim2. new ( 0.5 , 0 , 0.8 , 0 ))
2. 액션 해제하기
상점에 입장했을 때 공격 버튼을 비활성화하는 등, 특정 액션이 필요하지 않을 때 UnbindAction 함수 를 이용해 비활성화할 수 있습니다.
Copy local ContextActionService = game: GetService ( "ContextActionService" )
local ActionName = "JumpAction"
ContextActionService: UnbindAction (ActionName)
3. 입력 상태별 처리
UserInputState 를 이용하여 입력 시작, 입력 중, 입력 종료와 같은 상태별 처리를 구현할 수 있습니다.
Copy local function OnAction ( actionName , inputState , inputObject )
if inputState == Enum.UserInputState.Begin then
print ( "Begin!" )
elseif inputState == Enum.UserInputState.Change then
print ( "Change!" )
elseif inputState == Enum.UserInputState.End then
print ( "End!" )
elseif inputState == Enum.UserInputState.Cancel then
print ( "Cancel!" )
end
end
ContextActionService: BindAction (ActionName, OnAction, IsCreateTouchButton, KeyCode)
입력이 중단될 때 (예 : 입력점이 버튼 영역에서 이탈)
4. 특정 액션 가져오기
GetButton 함수 로 특정 버튼을 가져올 수 있습니다.
Copy local ActionButton = ContextActionService: GetButton (ActionName)
5. 생성된 액션 모두 가져오기
GetAllBoundActionInfo 함수 로 모든 버튼을 가져올 수 있습니다.
Copy local ContextActionService = game: GetService ( "ContextActionService" )
local AllActions = ContextActionService: GetAllBoundActionInfo ()
for actionName, actionInfo in pairs (AllActions) do
print ( "Action Name : " , actionName)
print ( "Input Types : " , actionInfo.InputTypes)
end