Search
🧑‍💻

(개발자용) 컨트롤러 입력 구분하는 방법

이 문서는 게임 개발 환경에서 게임패드 플레이어 번호 확인하는 방법에 대해 설명합니다.
예시는 자동 완성으로 만들어진 코드로써, 실제 개발할 때는 다르게 적용되어야 할 수도 있습니다.

유니티 엔진에서 둘 이상의 게임패드에 대한 컨트롤러 버튼 확인 방법

유니티에서는 Input.GetButton 함수에 게임패드 번호를 지정하여, 해당 번호에 해당하는 게임패드의 버튼 입력을 확인할 수 있습니다. 다음 예시는 1번째와 2번째 게임패드의 버튼 입력을 확인하는 예시입니다.
bool buttonA = Input.GetButton("1_ButtonA"); bool buttonB = Input.GetButton("1_ButtonB"); bool buttonStart = Input.GetButton("1_ButtonStart"); if (buttonA) { Debug.Log("Button A pressed on joystick 1"); } if (buttonB) { Debug.Log("Button B pressed on joystick 1"); } if (buttonStart) { Debug.Log("Button Start pressed on joystick 1"); } buttonA = Input.GetButton("2_ButtonA"); buttonB = Input.GetButton("2_ButtonB"); buttonStart = Input.GetButton("2_ButtonStart"); if (buttonA) { Debug.Log("Button A pressed on joystick 2"); } if (buttonB) { Debug.Log("Button B pressed on joystick 2"); } if (buttonStart) { Debug.Log("Button Start pressed on joystick 2"); }
C#
복사
위 코드는 1번째와 2번째 게임패드의 버튼 입력을 확인하고, 각 버튼에 대한 메시지를 출력합니다.

언리얼 엔진에서 둘 이상의 게임패드에 대한 컨트롤러 버튼 확인 방법

언리얼 엔진에서는 FSlateApplication::Get().GetPlatformApplication()->GetJoystickState 함수를 사용하여 해당 게임패드의 상태를 가져올 수 있습니다. 다음 예시는 1번째와 2번째 게임패드의 버튼 입력을 확인하는 예시입니다.
for (int32 i = 0; i < FSlateApplication::Get().GetPlatformApplication()->NumJoysticks(); i++) { const FJoystickState& JoyState = FSlateApplication::Get().GetPlatformApplication()->GetJoystickState(i); FString JoyName = JoyState.GetDisplayName().ToString(); if (JoyState.IsButtonPressed(EJoystickButton::LeftStick)) { UE_LOG(LogTemp, Warning, TEXT("Joystick %d (%s) left stick button pressed"), i, *JoyName); } else if (JoyState.IsButtonPressed(EJoystickButton::RightStick)) { UE_LOG(LogTemp, Warning, TEXT("Joystick %d (%s) right stick button pressed"), i, *JoyName); } else if (JoyState.IsButtonPressed(EJoystickButton::FaceButtonBottom)) { UE_LOG(LogTemp, Warning, TEXT("Joystick %d (%s) button A pressed"), i, *JoyName); } else if (JoyState.IsButtonPressed(EJoystickButton::FaceButtonRight)) { UE_LOG(LogTemp, Warning, TEXT("Joystick %d (%s) button B pressed"), i, *JoyName); } else if (JoyState.IsButtonPressed(EJoystickButton::SpecialLeft)) { UE_LOG(LogTemp, Warning, TEXT("Joystick %d (%s) button Start pressed"), i, *JoyName); } }
C++
복사
위 코드는 1번째와 2번째 게임패드의 버튼 입력을 확인하고, 각 버튼에 대한 메시지를 출력합니다.

안드로이드 Java/Kotlin 언어를 사용할 때,

게임패드의 컨트롤러 아이디를 확인하려면, Activity 클래스에서 각 KeyEvent 또는 MotionEvent 값을 확인하여야 합니다.
사용 중인 기기가 컨트롤러로 인식된 경우, 컨트롤러 ID 값을 직접 불러오는 것이 가능합니다. (안드로이드 5.0 이상) 아래 예시는 대표적인 버튼 이벤트 확인 구간인 dispatchKeyEvent 함수를 통해 작성하는 예시입니다.
예시 코드:
@Override public boolean dispatchKeyEvent(KeyEvent event) { int controllerId = event.getControllerId(); // controllerId를 이용해서 컨트롤러를 구분하거나 처리할 수 있습니다. return super.dispatchKeyEvent(event); }
Java
복사
override fun dispatchKeyEvent(event: KeyEvent?): Boolean { val controllerId = event?.controllerId // controllerId를 이용해서 컨트롤러를 구분하거나 처리할 수 있습니다. return super.dispatchKeyEvent(event) }
Kotlin
복사
위 코드에서는 KeyEvent 객체의 getControllerId 메소드를 사용하여 컨트롤러의 controllerId를 가져오고, 이를 이용하여 컨트롤러를 구분하거나 처리합니다.

iOS Swift 네이티브에서 플레이어 인덱스를 통해 컨트롤러를 구분하는 방법

iOS Swift 네이티브에서는 Game Controller 프레임워크를 사용하여 여러 개의 게임 컨트롤러를 지원합니다. GCController 클래스의 controllers 속성을 사용하여 현재 시스템에 연결된 모든 컨트롤러의 배열을 가져올 수 있습니다. 또한 GCController 클래스의 playerIndex 속성을 사용하여 멀티플레이어 게임에서 어떤 플레이어가 컨트롤러를 사용하는지 식별할 수 있습니다. 다음은 연결된 컨트롤러를 반복하고 입력 값을 처리하는 방법을 보여주는 코드 스니펫입니다:
// Game Controller 프레임워크를 가져옵니다. import GameController // 연결된 컨트롤러의 배열을 가져옵니다. let controllers = GCController.controllers() // 컨트롤러를 반복합니다. for controller in controllers { // 컨트롤러의 플레이어 인덱스를 가져옵니다. let playerIndex = controller.playerIndex // 확장 게임패드 프로필을 가져옵니다. if let gamepad = controller.extendedGamepad { // 왼쪽 써클 패드의 입력 값을 읽습니다. let xValue = gamepad.leftThumbstick.xAxis.value let yValue = gamepad.leftThumbstick.yAxis.value // 플레이어 인덱스에 따라 입력 값을 기반으로 작업을 수행합니다. switch playerIndex { case .index1: // 플레이어 1에 대한 작업을 수행합니다. print("Player 1 left thumbstick: (\\(xValue), \\(yValue))") case .index2: // 플레이어 2에 대한 작업을 수행합니다. print("Player 2 left thumbstick: (\\(xValue), \\(yValue))") case .index3: // 플레이어 3에 대한 작업을 수행합니다. print("Player 3 left thumbstick: (\\(xValue), \\(yValue))") case .index4: // 플레이어 4에 대한 작업을 수행합니다. print("Player 4 left thumbstick: (\\(xValue), \\(yValue))") default: // 알 수 없는 플레이어에 대한 작업을 수행합니다. print("Unknown player left thumbstick: (\\(xValue), \\(yValue))") } } }
Swift
복사