실행 가능한 접근 방식을 찾았습니다. DS4Tool 소스를 잡고 필요한 비트를 Unity 프로젝트에 복사하여 장치에서 직접 보고서를 읽을 수있었습니다.
(즉,의 NativeMethods의 Kernel32.dll에서와 인터페이스 클래스에서 장치 열거 HidDevices 과에서 보고서 읽기 HidDevice의 . 클래스를 나는 가능한 한 간단하게 물건을 유지하기 위해 나머지를 잘라 - 그냥 새에 대한 스레드 폴링있어 데이터를 최대한 빨리)
이 안내서 는 64 바이트 보고서에서 모션 센서 데이터를 찾을 수있는 위치를 알려줍니다. 약간의 경험적 테스트이며 다음과 같이 데이터를 gs 및 라디안 / 초로 가져옵니다.
accel = new Vector3(
System.BitConverter.ToInt16(_inputBuffer, 19),
System.BitConverter.ToInt16(_inputBuffer, 21),
System.BitConverter.ToInt16(_inputBuffer, 23)
)/8192f;
gyro = new Vector3(
System.BitConverter.ToInt16(_inputBuffer, 13),
System.BitConverter.ToInt16(_inputBuffer, 15),
System.BitConverter.ToInt16(_inputBuffer, 17)
)/1024f;
x + 오른쪽, y + 위, z +가 플레이어를 가리키는 오른손 좌표계입니다.
이 방법으로 데이터를 가져 오는 것은 Unity의 InputManager를 방해하지 않으며, 표준이 아닌 드라이버를 다운로드하거나 백그라운드에서 추가 소프트웨어를 실행할 필요없이 버튼과 스틱을 계속 예상합니다.
업데이트 : 무선 (블루투스)
무선으로 작동하도록 두 가지 문제와 두 가지 솔루션을 발견했습니다.
DualShock 4는 Windows (Windows 8 이전)와 페어링 상태를 유지하는 것을 좋아하지 않습니다 . 이 바보 같은 절차 는 Windows 7에서 해결되는 것 같습니다.
Bluetooth를 통해 연결된 모션 센서 데이터가 없습니다 . 모션 데이터를 전송하도록 동축하기 위해서는 출력 보고서를 장치에 기록해야합니다 (메소드 번호는 HidDevice, 매직 번호는 DS4Device 참조). 이 작업이 완료되면 다시 입력 한 보고서가 2 바이트 씩 이동합니다.