게임패드 입력
GameMaker는 여러 개의 연결된 게임패드에서 아날로그 및 디지털 컨트롤을 감지할 수 있는 전용 함수들을 제공합니다. 이 함수들은 Device Inputs와 유사하게 작동하며, 최대 4개의 XInput 게임패드(및 최대 8개의 DirectInput 게임패드)를 감지하고 각 입력을 처리할 수 있습니다.
게임패드가 장치에 연결되거나 제거될 때 비동기 시스템 이벤트가 발생하며, 이를 적절한 함수로 처리할 수 있습니다. 게임패드를 감지하고 사용하는 방법을 이해하기 위해 Movement And Controls의 Gamepad Movement 예제를 읽는 것이 좋습니다.
게임패드 "슬롯"은 0부터 시작하여 인덱스가 매겨지며, 실제 슬롯은 다양한 요인에 따라 달라집니다. Windows 타겟에서는 슬롯 0-3이 XInput 게임패드 전용입니다. 그러나 슬롯 4-11에서는 DirectInput 게임패드를 감지할 수 있습니다. 다른 플랫폼에서는 OS가 할당한 슬롯에서 패드를 감지할 수 있습니다. 예를 들어, Android 장치는 블루투스 게임패드를 슬롯에 저장하고 이후에도 해당 슬롯을 예약합니다. 따라서 연결된 게임패드가 슬롯 0에 연결되어 있다고 가정할 수 없습니다.
이로 인해 연결된 게임패드를 감지할 때 AsyncSystemevent를 사용하는 것이 좋습니다. Windows에서 DirectInput 게임패드를 사용할 때, 버튼이 눌렸을 때 예상하는 것과 다를 수 있습니다. 따라서 게임 내에서 게임패드 버튼을 재정의할 수 있는 설정 화면을 만드는 것이 좋습니다.
입력 상수
게임패드 기능을 사용할 때 입력은 축, 버튼 또는 해치에서 올 수 있으며, GameMaker는 다음과 같은 내장 상수에 할당합니다:
상수 | 설명 |
---|---|
gp_axislh | 왼쪽 스틱 수평 축 (아날로그) |
gp_axislv | 왼쪽 스틱 수직 축 (아날로그) |
gp_axisrh | 오른쪽 스틱 수평 축 (아날로그) |
gp_axisrv | 오른쪽 스틱 수직 축 (아날로그) |
DualSense 게임패드에서만 사용할 수 있는 상수:
상수 | 설명 |
---|---|
gp_axis_acceleration_x | 게임패드의 X축 가속도 |
gp_axis_acceleration_y | 게임패드의 Y축 가속도 |
gp_axis_acceleration_z | 게임패드의 Z축 가속도 |
gp_axis_angular_velocity_x | 게임패드의 X축 각속도 |
gp_axis_angular_velocity_y | 게임패드의 Y축 각속도 |
gp_axis_angular_velocity_z | 게임패드의 Z축 각속도 |
gp_axis_orientation_x | 게임패드의 X 방향 |
gp_axis_orientation_y | 게임패드의 Y 방향 |
gp_axis_orientation_z | 게임패드의 Z 방향 |
gp_axis_orientation_w | 게임패드의 W 방향 |
함수 목록
다음은 모든 게임패드 함수 목록입니다:
함수 | 설명 |
---|---|
gamepad_is_supported | 게임패드 지원 여부 확인 |
gamepad_is_connected | 게임패드 연결 여부 확인 |
gamepad_get_guid | 게임패드 GUID 가져오기 |
gamepad_get_device_count | 연결된 게임패드 수 가져오기 |
gamepad_get_description | 게임패드 설명 가져오기 |
gamepad_get_button_threshold | 버튼 임계값 가져오기 |
gamepad_get_axis_deadzone | 축 데드존 가져오기 |
gamepad_get_option | 게임패드 옵션 가져오기 |
gamepad_set_button_threshold | 버튼 임계값 설정 |
gamepad_set_axis_deadzone | 축 데드존 설정 |
gamepad_set_vibration | 진동 설정 |
gamepad_set_colour | 색상 설정 |
gamepad_set_option | 게임패드 옵션 설정 |
gamepad_axis_count | 축 수 가져오기 |
gamepad_axis_value | 축 값 가져오기 |
gamepad_button_check | 버튼 체크 |
gamepad_button_check_pressed | 버튼 눌림 체크 |
gamepad_button_check_released | 버튼 떼어짐 체크 |
gamepad_button_count | 버튼 수 가져오기 |
gamepad_button_value | 버튼 값 가져오기 |
gamepad_hat_count | 해치 수 가져오기 |
gamepad_hat_value | 해치 값 가져오기 |
게임패드의 물리적 입력을 직접 매핑하는 함수도 존재합니다. 이 함수들은 Windows Desktop, Ubuntu, macOS 및 Android 플랫폼에서만 사용됩니다.
함수 | 설명 |
---|---|
gamepad_get_mapping | 매핑 가져오기 |
gamepad_test_mapping | 매핑 테스트 |
gamepad_remove_mapping | 매핑 제거 |
DirectInput 게임패드는 협력 모드로 실행되며, 게임이 포커스를 잃으면 입력이 감지되지 않습니다. 게임이 포커스를 다시 얻으면 입력이 다시 감지됩니다.
호환성
현재 플랫폼 간 호환성 목록은 다음과 같습니다:
플랫폼 | 지원 여부 | 최대 연결 장치 수 |
---|---|---|
Windows | 완전 지원 | 12개 (0-11) |
macOS | 지원 | 4개 |
Ubuntu | 지원 | - |
HTML5 | 지원 | - |
iOS | 지원 | - |
Android | 지원 | - |
게임패드 입력을 활용한 다양한 예제:
// 게임패드 연결 확인
if (gamepad_is_connected(0)) {
show_message("게임패드가 연결되었습니다.");
}
// 왼쪽 스틱의 수평 축 값 가져오기
var left_stick_x = gamepad_axis_value(0, gp_axislh);
if (left_stick_x > 0) {
// 오른쪽으로 이동
} else if (left_stick_x < 0) {
// 왼쪽으로 이동
}
// 버튼 눌림 체크
if (gamepad_button_check(0, gp_face1)) {
// 버튼 1이 눌렸을 때의 동작
}
// 진동 설정
gamepad_set_vibration(0, 1.0, 1.0); // 왼쪽, 오른쪽 진동
이와 같은 방식으로 게임패드를 활용하여 다양한 입력을 처리할 수 있습니다.