Determinating default settings for a wide range of Android devices

Hi,

I’m working on an app for mobile devices. For Android I tested with an Samsung S7 and a Galaxy Tab 10.1 so far. While everything is running smooth on my S7, the game only gets 12 FPS on my Tablet.

The reason for it is that my tablet has a very high resolution but the hardware isn’t powerful enough to run games on it natively. When I play games like Real Racing 3 on the tablet I noticed the game uses a very low resolution and when reducing my Screens resolution with Screen.SetResolution(Screen.width/2 , Screen.height/2, true, 60); it works with 60 FPS on my tablet too.


However, with the extremly wide range of Android devices, how do I find correct default settings for each and everyone? I don’t want to have people to navigate to settings and change them at 10 FPS (no Android game I ever played even has settings you can change).

I could try to benchmark by running 10 sec of renderings behind a black screen or determinate the default settings on the type of hardware (CPU cores, CPU ghz, etc) but both feels not very thought through. Also just starting of with very low settings (which I experienced at a couple of PC games) doesn’t seem to be good as most people won’t bother looking for the settings to change on Android IMO. What is the industry standard solution on this?

Unfortunately, you would have to create a system that benchmarks the device itself and chooses an appropriate quality setting for it based on its given score. I believe there are some assets in the Asset Store that does that but developing one should be doable.

@tehb0x,

In our game we have made a similar system,
we have used the fact that a screen DPI of above 150 will not result on almost any noticeable change in game graphics,

So in short, we divide 150 on the the device’s DPI,
something like:


float ResFactor = 150 / Screen.DPI;

it gives a factor, for example: ResFactor = 0.4,
then use it to change the resolution:


Screen.SetResolution(Screen.width * ResFactor  , Screen.height * ResFactor , true, 60);

Beware that its better to use a max or clamp function to clamp the new resolution, so that it never goes above a factor of 1 (same as native) or 0 (causing problems),


float ResFactor = Mathf.clamp((150 / Screen.DPI), 0.2f, 1f);

And at last we have but a resolution slider for the player to give him the choice to change it,
hope this answer helped :), good luck,
And check on the validity of code blocks if there where and error on them.