Maybe I missed something, but here is my list.
Some of these points should be converted into tasks and implemented by default in templates/plists/default values and so on, but for now, I would recommend taking a look at these things.
All platforms
- Check counters for components in game.project. Using counters with values that are closer to the real count of components in collections with factories, will save the memory your game is using(See information about component max count optimizations)
- Similiar to the Node Count field in GUI components (each GUI has its own counter)
- Make sure you are using texture compression in your texture profile (see this manual). If you don’t know what to use try to start with this one as the default or a starting point for customizations:
- mipmaps: false;
- premultiply_alpha: true;
- format: TEXTURE_FORMAT_RGBA;
- compression_level: NORMAL;
- compression_type: COMPRESSION_TYPE_BASIS_UASTC.
-
Create and specify AppManifest for your game (see this manual). Exclude modules you don’t use in your game.
-
Make sure you use the right Display settings (more info):
- Most of the time you want to use High DPI;
- For UpdateFrequency/Swap Interval/Vsync defaults most of the time the best fit.
-
Resources in Bundle Resources copy/paste into the bundle folder as is. If you use images there, make sure you optimize the size and remove metadata. Also, it is up to you to make optimizations for the other file formats.
-
Check this manual for performance optimizations.
-
Check your bundle size report maybe you’ll find something you can improve.
-
Size of your fonts will be smaller if you specify what symbols you gonna use from the fon and use them in Extra Characters instead of the All Chars checkbox.
-
Make sure you save Symbols for each build you upload to a distribution platform. It will help you with crash symbolication in the future.
HTML5 specific
- Make sure you use minimal but enough for your game heap size. You can play a bit HTML5 version of the game in the most “heavy” level you have and then open inspector in the browser and write in the console: HEAP8.length / 1024 / 1024. Take this number add 10-15% and set it as Heap Size in your game.
- Make sure you handle the sound off when the user switches the browser tab or when you show ADS (if you use some html5 ADS framework).
- Don’t use too big a splash screen. Use webp version of the splash screen if it’s possible (this might help)
- It’s better to add a loading percentage number and some animated spinner on the loading screen. People need to be sure and see that loading is in progress.
- The Keyboard Show method doesn’t work in HTML5 because of the browser’s security policy. Make your in-game keyboard for input in HTML5 or use this trick.
- Check this checklist, most of the points are valid for any html5 game
iOS specific
- Make sure you specify Localizations in game.project.
sys.get_info()will never return language which isn’t in this list.
Android specific
Even if your game supports only landscape or only portrait, you may want a user to choose what size he should rotate the phone. In this case change the settings in your AndroidManifest.xml:
android:screenOrientation=“sensorLandscape”
or
android:screenOrientation=“userLandscape” (for API 18+)
(similiar for portrait “sensorPortrait” or “userPortrait”). I think we will do it by default in the next version together with NDK/Android SDK update.
2. Upload symbols to Google Play together with a bundle uploading:
- Add to archive symbol-folders for both architectures
YourProjectName.symbols/lib/arm64-v8aandYourProjectName.symbols/lib/armeabi-v7. So in the root of your archive should be two folders:arm64-v8aandarmeabi-v7 - Upload it
UPD: Android p1 implemented by Default in 1.4.3
