emove Unity Splash Screen
Introduction
Updated version can be found here: GitHub - kiraio-moe/remove-unity-splash-screen: A complete yet filthy way to remove Unity splash screen for free
Do you hate this logo appears when you are going to play games? Bother? For some people, yes. This time I will share one of the things I learned when I Reverse Engineering the Unity game, removing the Unity splash screen XD.
I haven’t tried on some platforms because I haven’t installed the dependencies needed to build games on those platforms in Unity, maybe I’ll try them in the future.
But if you manage to remove the Unity splash screen using another version of Unity with different platforms, please make a Pull Request or contact me on my social media and let me know the details so I can get it straight away updating this article.
Without further ado, let’s do it!
Prerequisite
Install the following tools before proceed to Step-by-step section:
General
Platform Specific
Install the following tools if you wanna work with another platform:
Android
WebGL
- Coming soon… I guess?
Step-by-step
I don’t know how games built with IL2CPP looks like on PC platforms. If you don’t mind, please create a Dummy project and build with IL2CPP scripting backend and send the build to me via email: [email protected] . I’ll try playing with it
PC (Mono)
-
Go to the
Game Name_Data
folder and backup theglobalgamemanagers
file in case of errors. -
Open the
globalgamemanagers
file using Unity Asset Bundle Extractor (UABE). -
Click
globalgamemanagers (Assets)
in Files and Components. SelectUnnamed asset
which is of typePlayerSettings
then click View Data and…
-
BOOM! Error…
This happens in games using Unity version >= 2020 where it seems Unity has encrypted (probably) the PlayerSettings part but not the other part. Whereas when I try to open the PlayerSettings section of the game built using Unity 2019, UABE can still access it. -
We will fix the problems in the Unity 2020 version later. For now, let’s focus on games built using Unity <= 2019. As you can see, we can access PlayerSettings. If we change the value of
m_ShowUnitySplashScreen
tofalse
(by double clicking) then the Splash Screen will not appear when starting the game (the Made with Unity logo will also not appear automatically) and as you can guess, if we change the value ofm_ShowUnitySplashLogo
tofalse
then the Made with Unity logo will not appear.
But, just removing the Made with Unity logo will not work if the Made with Unity splash logo is still listed inm_SplashScreenLogos
. To fix this, we can simply delete the array item that contains the Made with Unity logo. Great!
-
Now let’s move on to other settings. Move to Asset List and open
BuildSettings
:
-
Save your changes (IDK why Apply does nothing). UABE cannot overwrite the file being edited, so just save it as
globalgamemanagers-mod
.
-
Close
globalgamemanagers
on UABE or simply close UABE app, delete the originalglobalgamemanagers
file (Remember! you have a backup, don’t worry…) and renameglobalgamemanagers-mod
toglobalgamemanagers
. -
Try running the game and be surprised!
Fix for Unity >= 2020
If you’ve read all the steps above, you should know what the problem is, UABE can’t deserialize PlayerSettings on Unity >= 2020 because it’s encrypted (probably). That’s why the Hex Editor is coming for! Make sure you meet the prerequisite!
- Open
globalgamemanagers
file using HxD. - Look for Decoded Text which contains Company Name and Product Name (in my case it’s offset: 1060). Notice the first Question Mark (?) after the product name, right after that there’s a hex value
01 01
(highlighted). If you change the hex value of the first01
to00
then the Splash Screen will be disabled, while the following01
sets whether the Made with Unity logo will appear or not. If you don’t want Made with Unity to appear, just change it to00
.
- Boolean Splash Screen (
m_ShowUnitySplashScreen
) was discovered by the YouTube channel Awesomegamergame in his video https://www.youtube.com/watch?v=xvh0AeZCX9E. But the way he just change the Splash Screen boolean value to false doesn’t work in other versions of Unity. I think this article as a complement to the tutorial. - After changing the Splash Screen boolean, now change the
m_hasPROVersion
boolean exactly like the method above.
Android (Mono, IL2CPP)
- Prepare a Unity Android game.
- Open APKToolGUI (Make sure you meet APKToolGUI requirements). Drag and Drop the APK file (which you guys think is the main APK, in my case
base.apk
) to the APK Files section. APKToolGUI will automatically decompile the APK.
- Go to the decompiled APK folder and go to
assets/bin/Data
folder, you will find theglobalgamemanagers
file.
- Do the same as in PC (Mono) section.
- After finish editing
globalgamemanagers
, go to APKToolGUI and re-compile the decompiled APK folder.
- DONE!
- For those who have uploaded the game to the App Store (such as Google Play), make sure to sign your APK consistently. If not, when you update your game that is already installed on Android, an error
Signature is inconsistent with an existing application
will appear. For new apps, it might be time for you to start signing APKs consistently. You can generate Keystore in Unity, go toProject Settings > Publishing Settings
.
Notes
- There is no difference affecting the splash screen in the
globalgamemanagers
file between Development builds and Release builds. - Yep, that’s my Android game I used as a test subject. You can see find it at Google Play Store XD (Pssttt… a remake is in the works).
Result
Tested and work on games built with the following versions of Unity:
Unity 2020.3.39.26224 (LTS)
- PC/Windows x86_64 (Mono)
- Android (Mono, IL2CPP)
Unity 2019.4.12f1 (LTS)
- Android (Mono, IL2CPP)
Worked? Please give it a star and tell everyone on Pull Request.
Something is missing? Make an Issue.
Huge Thanks
Many thanks to this fellas:
- SeriousCache for Unity Asset Bundle Extractor (UABE)
- Maël Hörz for HxD Hex Editor
- iBotPeaches for Apktool CLI
- INF1NUM | AndnixSH for APKToolGUI
- Awesomegamergame for discovering splash screen offset
- and others that I didn’t mention…
Disclaimer
By doing this, of course you violate the applicable terms of Unity. #DWYOR!