It’s a bug alright.
I’ve compared attachControl() methods of FreeCameraGamepadInput and ArcRotateCameraGamepadInput, and this is this is missing for arc rotate camera:
// if no xbox controller was found, but there are gamepad controllers, take the first one
if (!this.gamepad && manager.gamepads.length) {
this.gamepad = manager.gamepads[0];
}
Filed the bug here: ArcRotateCamera gamepad input other than XBOX
Works for me with this workaround:
const gamepadManager = this.scene.gamepadManager;
this.gamepadInput = new BABYLON.ArcRotateCameraGamepadInput();
const oldAttach = this.gamepadInput.attachControl;
this.gamepadInput.attachControl = () => {
oldAttach;
if (!this.gamepadInput.gamepad && gamepadManager.gamepads.length ) {
this.gamepadInput.gamepad = gamepadManager.gamepads[0];
}
}
Regarding to the original code, note that we don’t need to create new GamepadManager, Scene already contains one.