Hi. I created a scene, similar to the Babylon Viewer. And what happens is that the ArcRotate Camera is SOOOO fast when i test it on mobile (zoom and rotation). I exported the scene from the playground, so it has PEP working (theoretically). Is there a way to change sensibility on mobile for ArcRotate Camera?
Thanks.
Hi @jose_ignacio,
I had a similar question a week ago for my game, where the Camera movement responded way too fast to Input (touch, pinch, etc.) for the User to be good UX. And I got to solve it in my case, so here is the solution.
Input sensitivity properties
The Camera sensitivity of responding to Inputs (such as Pointers and Touches) are settings found within the various CameraInputs found on the CameraInputsManager of the Camera. Look for properties like ‘sensitivity’ and ‘pinch’ in the API:
https://doc.babylonjs.com/api/classes/babylon.arcrotatecamera
https://doc.babylonjs.com/api/classes/babylon.arcrotatecamerainputsmanager
https://doc.babylonjs.com/api/interfaces/babylon.icamerainput
If you don’t find the default CameraInputs (and their properties) of use for your case, you can even create and use your own CameraInputs on the Camera. How to do that is quite well explained in the docs:
https://doc.babylonjs.com/how_to/customizing_camera_inputs
Code sample
Here’s a code snippet example from my game, which is for the default CameraInputs on the FollowCamera (variable named controlledCamera below), but for ArcRotateCamera likewise properties may be found in the API URL’s I have shared above. So you need to set the ones mentioned in those docs for ArcRotateCamera:
// Keyboard
if (controlledCamera.inputs.attached['keyboard'])
{
controlledCamera.inputs.attached.keyboard.keysRadiusModifierAlt = false;
controlledCamera.inputs.attached.keyboard.keysHeightOffsetModifierShift = true;
controlledCamera.inputs.attached.keyboard.heightSensibility = 1/10; // default: 1 (lower is slower)
controlledCamera.inputs.attached.keyboard.radiusSensibility = 1/10; // default: 1 (lower is slower)
//controlledCamera.inputs.attached.keyboard.rotationSensibility = 1; // default: 1 (lower is slower)
}
// Mousewheel
if (controlledCamera.inputs.attached['mousewheel'])
{
//controlledCamera.inputs.attached.mousewheel.wheelDeltaPercentage = 0; // default: 0
//controlledCamera.inputs.attached.mousewheel.wheelPrecision = 3; // default: 3
}
// Pointers
if (controlledCamera.inputs.attached['pointers'])
{
controlledCamera.inputs.attached.pointers.angularSensibilityX = 10/2; // default: 1 (higher is slower)
controlledCamera.inputs.attached.pointers.angularSensibilityY = 2*10; // default: 1 (higher is slower)
//controlledCamera.inputs.attached.pointers.pinchDeltaPercentage = 0; // default: 0
//controlledCamera.inputs.attached.pointers.pinchPrecision = 10000;
}
Let me know if and how you solved your ArcRotateCamera case with my answer.
Q
That code sample from yours worked flawlessly. Yesterday I tried using the same code, but didnt work. It turns out I was missing the first line lol. Thank you very much !!