0
\$\begingroup\$

I am developing a Mobile game for Android and iOS on Unity.

Currently Im in the optimisation stage of development and trying to work out what is the best way to detect device capabilities, with the aim of then setting an appropriate quality setting.

OS/platform detection is simple, but how can I detect between a high performance android device and a low or medium performance device at runtime?

I did find this question that is similar https://stackoverflow.com/q/21565468/4148676 but the question is old, the answers not great and hoping there's a better way in the last 4 years of solving the problem.

The only other solution I have is monitor the average FPS and adjust the quality based on the frame rate.

Any advice would be appreciated.

\$\endgroup\$
1
\$\begingroup\$

I cannot give "the best practice" because it really depends on your situation. But I can give two real world examples from games I worked on.

In Love & Hip Hop, we checked the RAM of the device. At the time, 2GB devices could definitely render a lot more than 1GB devices. So we tried to target the lowest 2GB devices with high-resolution assets, and others with low-resolution assets.

Dead by Daylight has a resolution changer that drops resolution if the framerate is crap for too many frames. Then it bumps it back up later if it's smooth for long enough. Though this game is made with Unreal 4, there's no reason Unity couldn't use this tactic. DbD also has user-selected quality settings for graphics since PC hardware is so varied.

\$\endgroup\$
0
\$\begingroup\$

The first step is to determine the list of devices you'd like to target/support. To construct this list, simply go to each major phone manufacturer and go backwards from their most recent models until you find a device that you no longer want to support. The simpler or more light-weight your game is to run, the farther back in the model history you can go.

Once you think you have your list of supported devices, compare the specs of the lowest ranking ones. The ideas is for the minimum specs to be similar. You may support the 7 most recent iPhone models but only the 4 most recent Samsungs for example.

Then make your game work for the least powerful supported device. In initialization there's a whole list of device properties you can check to see what the particular active device can support. Since you know the specs of the lowest tier devices that you will support, you have your checks verify these minimums and adjust accordingly.

While device hardware is technically what limits framerate, using the raw framerate to estimate device specs can be deceiving because there other factors that can bottleneck performance such as unoptimized code or heavy art assets. When in doubt, add graphics options to your game so the user can lower quality when they know their device is not up to par.

\$\endgroup\$
  • \$\begingroup\$ This really isn't a practical way of doing this, especially when you consider a) how many android devices there are and b) how often new devices come out and how often you would have to update your app. The only similar way to this would be to look at GPU and ram and then segment that way as there are far less options to take into account. \$\endgroup\$ – unknownSPY Mar 2 at 13:56
  • \$\begingroup\$ I didn't say it was easy, but I used to work at a mobile game studio for a popular mobile game and this was our process. a) Yes, there are a lot of android devices. This is a pain for devs, just focus on the major manufacturers and draw the line somewhere. b) New devices coming out has zero impact on your game. All new devices will automatically meet your min specs. You don't need to update your app every time a new phone comes out. \$\endgroup\$ – RAM804 Mar 4 at 7:52
  • \$\begingroup\$ "all new phones meet your mine spec" that just really isn't true. Manufacturers release low end phones every year.. (I do work currently at mobile studio, just not one using Unity that's why I wondered if there was a unity way of detecting performance). \$\endgroup\$ – unknownSPY Mar 4 at 8:00
  • \$\begingroup\$ you would have to be crazy to go by device ID as there are thousands of android device when you take into account all of the Chinese brands and knock offs \$\endgroup\$ – unknownSPY Mar 4 at 8:00
  • \$\begingroup\$ Ok, true, I made the mistake of assuming you were talking about modern smartphones. For our target market, new phones were never the concern, just older models. I don't know what you're talking about with device IDs? I never mentioned device IDs, because you're right, that wouldn't make sense. Our QA and engineering teams had about 50 devices of different models (a few duplicates). We tested on each monthly. If you don't have the kind of budget or manpower for that kind of testing, then the solution we used will likely not be viable for you. All I can say is it worked. \$\endgroup\$ – RAM804 Mar 4 at 8:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.