티스토리 뷰

2016/01/15 - 지금 이 포스트의 내용을 다시 검토하고 있습니다. 자세한 것은 이 포스트(http://blog.kuax.org/89)를 참고해 주세요.

 

2016/01/29 - 테스트 결과 exe 프로그램에서도 작동하는게 확인되었습니다. 정상적인 방법은 아니지만, 작동은 합니다. 물론 정식으로 게임 개발을 하는 개발사에선 그런 식으로 구현하는 것에 대해 라이선스 위반인지 확실하지 않습니다.

 

그와는 별개로 아래 포스트에서 소개하는 방법은 공식으로 MSDN에 올라온 내용에 따라 테스트한 결과입니다.

 



Table of Contents
   0. 서론
   1. 개념
   2. 라이브러리
   3. 프로그램
   4. 결론
Appendix
   a) 프로그램 설치 방법
   b) WinRT API
   c) Universal App

 

 

 

 

 

 

0. 서론

 XBOX One Controller(이하 엑원 패드)의 주요 특징 중 하나인 임펄스 트리거는 작은 모터를 트리거에 달아 패드 고유의 진동 외에도 추가로 진동을 발생시킨다. XB360 컨트롤러에는 존재하지 않는 부품이므로, XB360을 기반으로 설계한 PC 게임에선 당연히 임펄스 트리거를 사용할 수 없다. 그러나 최근에 출시한 차세대 콘솔 전용 게임에서도 임펄스 트리거는 PC에서 작동하지 않는데, 이게 기술적인 문제인지, MS의 드라이버 지원이 없는건지, 게임 개발사의 노력에 따라 추가될 수 있는 부분인지 알아보기 위해 테스트를 준비하였다.

 테스트에 사용한 컨트롤러는 XBOX One Controller CoD:AW 버전으로 기능상의 차이는 없고, 3.5mm 스테레오 잭이 없는 초기형 모델이다. 사용한 시스템은 Windows 10, 프로그래밍 환경은 VS2015 Universal App 프로젝트이다.

 

 

 

1. 개념

 그동안의 PC 게임은 컨트롤러를 다루는 방법으로 XInput을 사용하였다. 본래 XB360 컨트롤러를 Windows에서 사용하기 위해 제작된 API로, Windows XP SP1부터 지원되기 시작, 현재 최신 버전은 1.4이다.

 철저히 XB360 컨트롤러에 맞춰져 있으므로 엑원 패드의 트리거 모터에 접근, 제어할 방법이 없다. XInput으로 설계된 기존의 게임들도 당연히 트리거 진동을 제어하지 못한다.

 Windows 10이 출시되면서 XInput에 대응되는 Windows Gaming Input이 새로 제공되었다. 이 라이브러리에서는 PC에서 엑원 패드의 트리거 모터를 제어할 수 있다.

 여기서 질문이 생기는데, '개발사에서 기존의 XInput을 사용하는 게임들을 Windows Gaming Input도 추가하여 지원하면 되는거 아닌가?' 였다. 실제로 간단한 테스트 프로그램을 짜서 무엇이 문제이며 왜 패치를 안해주는지 알아보기로 했다.

 

2. 라이브러리

 namespace Windows.Gaming.Input (MSDN Link)

 Windows Runtime API에 속해있고, Windows 10 전용이므로 개발을 위해서는 Windows 10 SDK를 설치해야 한다. 그리고 이 라이브러리는 기존의 Win32 프로그램 개발에 사용할 수 없다.

 Universal App, 즉 메트로 앱이라고 생각하면 편한데, 모바일 - 태블릿 - 데스크톱 모두에서 작동하게 만드는 어플리케이션이라고 보면 된다. 실제로 유니버셜 앱을 패키징 할 때 ARM 프로세서용 패키지도 따로 컴파일된다. exe가 당연히 아니고 Microsoft Store로 배포하는게 기본 방식이다. 로컬로 내보내면 개발자 모드를 활성화해야 설치 및 사용이 가능하다.

 

3. 프로그램

 C++ 로 코딩하였다. 위의 네임스페이스를 C++로 사용하면

 

Windows::Gaming::Input 

 

가 된다. 이 네임스페이스를 이용하여 Gamepad를 Eventhandler를 통해 추가시킬 수 있다.

Windows::Gaming::Input::Gamepad::GamepadAdded = Pad init

좌 우 모터에 진동 값을 설정하였다.

vib.LeftTrigger = 0.3; vib.RightTrigger = 0.3; Vibration = vib;

결과는? 진동이 잘 온다. 매우 잘 온다...

대체 왜 개발사는 지원을 안해주는 걸까? 라고 생각하던 중, 지인들에게 테스트용 샘플을 배포하려니까 딱 감이 왔다...

이 트리거 진동을 사용하려면 게임은 유니버셜 앱(Universal App)이어야 하며, 이 유니버셜 앱은 Windows 10 전용 앱이며, 기존 exe로 실행하는 프로그램이 아니고 Microsoft Store를 통해 배포해야만 하는 형태이다. 전자 인증서도 있고... 하여튼 여러모로 복잡하다.

 

4. 결과

즉 게임회사에서 마소 스토어로 게임을 낼 게 아니라면 임펄스 트리거를 작동시키는 코드를 짤 수 없다는 말이 된다. 내가 모르는 방법이 있을 수도 있다. 그걸 찾으려고 구글링을 했지만, 자료가 없다. Win10에서 추가된 이 API를 기존 프로그램에서 접근할 방법이 없어보인다. 즉 간단히 말하자면, 임펄스가 되는 게임은 마소 스토어에서 배포해야 한다.

테스트 목적으로 작성한 프로그램은 PC에서 엑원패드 트리거 진동 작동 테스트를 목적으로 설계된 것이지, 안되는 게임에서 되게하는 그런게 아니다. (아래 부록에서 설치 방법을 다룬다.) 임펄스 트리거를 게임에서 되게 하려면, 게임 개발사에서 마소 스토어 용으로 만들어야 한다.

 

Appendix a. 프로그램 설치 방법

 

 

자료를 다운받기 전, Windows 10 개발자 모드를 활성화 시킨다. (테스트 후 이 개발자 모드를 끄지 않아 발생하는 모든 책임은 나완 관계없다.)

* 시작 -> 설정 -> 업데이트 및 복구 -> 개발자용 -> 개발자 모드 체크

 

아래 자료를 다운받는다. (7.38MB)

Google Drive 링크

 

압축을 풀고 Add-AppDevPackage.ps1 우클릭 -> PowerShell 에서 실행을 선택한다.

인증서를 깔겠냐는 메시지나 설치하겠냐는 메시지 모두 Y 및 엔터로 설치한다. 

설치가 완료되면 시작 -> 모든 앱 -> X 항목에 XO Controller Vibe Test를 실행한다.

실행 후 연결된 엑원 패드에 아무 버튼이나 누른다.

정상작동 시 좌/우 번갈아가며 트리거에 진동이 온다.

 

Appendix b. WinRT API

https://msdn.microsoft.com/en-us/library/windows/apps/br211377.aspx

MSDN, 영문

 

Appendix c. Universal App

https://msdn.microsoft.com/library/dn975273.aspx

MSDN, 한국어

'Code' 카테고리의 다른 글

엑박원 임펄스 트리거에 대해...  (2) 2016.01.15
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday