Skip to content
This repository has been archived by the owner on Nov 28, 2023. It is now read-only.

A complete yet filthy way to remove Unity splash screen for free

Notifications You must be signed in to change notification settings

kiraio-moe/remove-unity-splash-screen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 

Repository files navigation

Remove Unity Splash Screen

Announcements

Hi guys. Some of you may know, working directly with the hex and changing the value manually would be a hassle and may lead to a problem.

But, worry not. I've made a tool to accomodate this. It's called Unity Splash Screen Remover (USSR). Check this out!
Please give your feedbacks and don't forget to give it a ⭐ ^0^

Introduction

Unity Splash Screen

Well, pretty damn controversial.., huh?

Are you a Unity Developer? Did you bother this logo appear in your game? Didn't have much money to buy the license? No worry, I will share to you how to remove Unity splash screen for free without any license $hit!

I haven't tried on some platforms because I haven't installed the dependencies needed to build games on those platforms in Unity. But, if you manage to remove the Unity splash screen using the method below, please make an Issue or contact me through my social media and let me know the details so I can get it straight away updating this thread.

Without further ado, let's do it!

Table of Contents

Disclaimer

By doing this, of course you violate the applicable terms of Unity Technologies. #DWYOR!

Prerequisites

Install the following tools before proceed to Step-by-step section:

General (Required)

Platform Specific

Install the following tools if you wanna work with another platform:

Step-by-step

Before doing the actual work, don't forget to always backup the original files.

If you build a new game with different Project Settings, you need to remove the splash screen again to avoid any errors. Don't just replacing using the old modded globalgamemanagers or data.unity3d file.

You may want to read PC, Mac, Linux Standalone section first and the rest to know the context then read the Universal section.

Universal

data.unity3d

Unity will use globalgamemanagers file directly in your game if you choose the Compression Method to Default. While LZ4 & LZ4HC, Unity will pack/compress globalgamemanagers file and other resources file into data.unity3d file. So, removing Unity splash screen will be much more easy if we can get globalgamemanagers directly.

Unity Compression Method

Sadly, if I try to open data.unity3d file using UABE, UABE can't open it.

UABE can't open data.unity3d file

But, with this great fork of UABE, UABE Avalonia can read data.unity3d file seamlessly. UABEA is similiar with UABE, but the downfall of it is that UABEA didn't support editing like UABE. That's ok, we can edit it with external tools. Okay, let's remove the splash screen.

  • Open data.unity3d file using UABEA. If UABEA prompting to decompress the data to File or in Memory, I prefer to Memory.

  • Choose globalgamemanagers then Export. Save it as globalgamemanagers-mod (or whatever name you want).

    Exporting globalgamemanagers

  • Start editing globalgamemanagers-mod either using UABE or HxD. How to do it? Read PC, Mac, Linux Standalone section.

  • After removing the splash screen in globalgamemanagers-mod, back to UABEA. Still choosing globalgamemanagers, Import globalgamemanagers-mod, it will replacing the original globalgamemanagers from data.unity3d.

  • You're done! Save it as data-mod.unity3d. Move or rename original data.unity3d to data-original.unity3d, then rename data-mod.unity3d to data.unity3d.

  • data.unity3d file size produced by UABEA is much more larger than the original file, you can compress that. Open modded data.unity3d in UABEA, then go to File > Compress. Choose either LZ4 or LZMA (LZ4HC), it's up to you.

    UABEA compression method

unity default resources

This is the easiest way to remove Unity splash screen. You just need to edit unity default resources file in your build.
PC: GameTitle_Data/Resources/.
Android: assets/bin/Data/. Steps for decompile & recompile APK file, please refer to Android section.

  • Open unity default resources file using UABE.

  • Search for UnitySplash-cube which is type of Texture2D then view the data.

    Searching unity default resources file

  • Set the m_Width and m_Height variable to 0 by double click it.

    Set m_Width and m_Height variable to 0

  • Don't forget to set the Draw Mode to All Sequential and Unity logo duration to 2 second, Player will not notice that blank Made with Unity splash. If the Draw Mode is Unity Logo Below, it will resulting in a weird splash screen where your logo isn't in center but on top.

    Setting Draw Mode & Logo Duration

  • DONE! Save then replace original unity default resources file.

PC, Mac, Linux Standalone


Watch YouTube video
  • Prepare your game that has been built.

    Target Unity game

  • Go to the Game Title_Data folder and backup the globalgamemanagers file in case of errors.

  • Open the globalgamemanagers file using Unity Asset Bundle Extractor (UABE).

  • Click globalgamemanagers (Assets) in Files and Components. Select Unnamed asset which is of type PlayerSettings then click View Data and...

    View Player Settings

  • BOOM! Error................

    View Player Setings Error

    This happens because UABE didn't support parsing those particular data.

  • We will fix that problem later. For now, let's see how to work with UABE if your Unity version is fully supported by UABE.
    As you can see, we can access PlayerSettings. If we change the value of m_ShowUnitySplashScreen to false (by double clicking) then the entire 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 of m_ShowUnitySplashLogo to false then the Made with Unity logo will not appear.

    Accessing PlayerSettings Unity 2019

    But, by just removing the Made with Unity logo will not work if the Made with Unity splash logo is still listed in m_SplashScreenLogos. To fix this, we can simply delete the array item that contains the Made with Unity logo. Great!

    Not tested though. But, it's a great way to ensure that we completely remove the logo.

    Removing Made with Unity logo from Splash Screen Logos array

  • Now let's move on to other settings. Move to Asset List tab and open BuildSettings:

    Viewing BuildSettings Unity 2019

  • Select hasPROVersion and change the value to true:

    Enabling Pro Version

  • Save your changes (IDK why Apply does nothing). UABE cannot overwrite the file that being edited, so just save it as globalgamemanagers-mod.

    Save changes

  • Close globalgamemanagers on UABE or simply close UABE app, delete the original globalgamemanagers file or rename to something else then rename globalgamemanagers-mod to globalgamemanagers.

  • Try running the game and be surprised!

Fix for Unsupported Version

If you've read all the steps above, you should know what the problem is. UABE can't deserialize some or entire data of globalgamemanagers. That's why the Hex Editor is coming for! We will edit boolean m_ShowUnitySplashScreen and hasPROVersion manually using HxD.

  • Open globalgamemanagers file using HxD.

  • First, we remove the splash screen. Search your Company Name or Product Name (in my case it's kiraio and Bungaku) until you get like the image below.
    Notice the first Question Mark (?) after the product name, right after that there's a hex value 01 01 (in my case, it's in offset: 1060 and 1061). If you change the hex value of the first 01 to 00 then the Splash Screen will be disabled, while the following 01 sets whether the Made with Unity logo will appear or not.

    Find Splash Screen boolean

  • Now we need to switch the hasPROVersion boolean to true. Search the name of a scene that you included in the build or your Unity version until you get like the image below. The highlighted hex value (offset: E7A4, 20 offset before the Unity version) is the boolean hasPROVersion. Change to 01 value to enable it.

    Find hasPROVersion boolean

  • Boolean Unity 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 Unity splash screen boolean value to false doesn't work in other versions of Unity. I think this thread as a complement to his tutorial.

Android


Watch YouTube video
  • Prepare your Unity Android game.

    In the image, I used the .apks format which is basically just a .zip file, so I just extracted it and got 2 files namely base.apk and split_config.arm64_v8a.apk. After I finished doing the step below, I archived files again to .zip and changed the name of the extension to .apks.

    Prepare a Unity game

  • Open APKToolGUI (Make sure you meet APKToolGUI requirements).
    Drag and Drop the APK file (If you using .apks file, just drop which you guys think is the main APK, in my case is base.apk) to the APK File section. APKToolGUI will automatically decompile the APK.

    Decompile APK using APKToolGUI

  • Go to the decompiled APK folder then go to assets/bin/Data folder, you will find the globalgamemanagers file.

    Find globalgamemanagers file

  • Do the same as in PC, Mac, Linux Standalone section.

  • After finish editing globalgamemanagers, go to APKToolGUI and re-compile the decompiled APK folder.

    Recompile APK

  • 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.

    Not fully tested!

    For new apps, it might be time for you to start signing APKs consistently.

    You can generate a Keystore in Unity, go to Project Settings > Publishing Settings > Manage Keystore (Make sure you have switched to Android platform).

    Signing APK

Alternative: data.unity3d

If you want an easiest way, please go to Universal: data.unity3d section.

I just discovered that my Unity Android game is using data.unity3d file to store the globalgamemanagers file like in WebGL:

data.unity3d file

The steps to remove the splash screen is same as before. The boolean m_ShowUnitySplashScreen is same after the first question mark:

Boolean m_ShowUnitySplashScreen location

While boolean hasPROVersion is slightly different with globalgamemanagers in PC, Mac, Linux Standalone.
12 offset before the 'cutted' Unity version:

Signing APK

WebGL


Watch YouTube video

I thought I would give up on the WebGL build because I think the globalgamemanagers file was in WebGL.wasm file which is currently there's no good tool to decompile Web Assembly.
But after digging deeper, I found a hint that the globalgamemanagers file is in the WebGL.data file, in the end I was able to remove the Unity splash screen in the WebGL build :)

  • Prepare your Unity WebGL game, then go to Build folder.

    WebGL Build folder structure

  • If you build using Brotli (.br) or Gzip (.gzip) compression, you can install PeaZip or any archiving tool to extract WebGL.data.br or WebGL.data.gzip and get the WebGL.data file. After removing the splash screen, you can archive it back into the original extension.

    Did you know? You can unpack the content of WebGL.data file using Asset Studio, there you will get this:

    WebGL.data contents

    The globalgamemanagers file is inside data.unity3d file. I tried to open it in UABE but UABE unable to open it. If you know how to unpack and repack data.unity3d file, let me know!

    Even I can unpack WebGL.data, still I didn't know how to repack it back :(

  • With all the limitations above, there is no other way but to edit the WebGL.data file directly. Open the WebGL.data file using HxD (Don't forget to backup the original file!).

  • Search your Company Name or any of string I highlighted below:

    Searching boolean splash screen

  • This time, boolean m_ShowUnitySplashScreen isn't after the first question mark that appear after the Product Name, but after the Double Quote ("). Change the hex value (in my case, it's offset: 59CEF7) to 00 to disable the splash screen.

    Boolean splash screen location

    If you change the following highlighted hex value: 01 to 00, will resulting in some sort of Active Input Handler error. So, don't do that!

  • Now, we need to search where boolean hasPROVersion located. This is the trickiest part...
    I found a hint to search the boolean using the first 40 characters (from the front) of m_AuthToken string.

    077fc7b716f3938b594d7ec67f4107f3e125c97d

    I got it from the globalgamemanagers file of my game that was built on another platform.

    Searching hasPROVersion boolean using m_AuthToken string

    m_AuthToken is different for every installed machine. So, you need to build your game into another platform first. If you dilligent enough, you can manually search the string from offset 5A3E00 to offset 5A4000 or use the string I highlighted below:

    Searching hasPROVersion boolean using hinted string

  • I tried reversing every hex that has 00 or 01 value before the string we are looking for.
    Finally, I found it! The red highlighted hex (offset: 5A3EBA) which has a value of 01 (I have changed it to 00 in the picture) is the boolean hasPROVersion, while the black highlighted hex (offset: 5A3EBE) is the boolean isDebugBuild.

    I'm confused why 00 which should be false becomes true and vice versa.

    hasPROVersion boolean location

  • Save & DONE!

Notes

  • If you choose Compresssion Method in Build Settings to Default, Unity will use globalgamemanagers directly without packing it into data.unity3d file. So, it will be much easier to remove the splash screen.
  • No difference between Development build and Release build.
  • No difference either Mono/IL2CPP scripting backend.

Result

  • Android

    MOD Result Android

  • PC

    MOD Result PC

  • WebGL

    MOD Result WebGL

Tested and work on games built with the following versions of Unity:

  • Unity 2021.3.39f1
    • Android (#2)
  • Unity 2020.3.39f1
    • PC, Mac, Linux Standalone
    • Android
    • WebGL
  • Unity 2019.4.12f1
    • PC, Mac, Linux Standalone
    • Android
    • WebGL

Contribute

Worked? Please, give it a star ⭐ and tell everyone by making an Issue.
Have a trouble? Make an Issue.
Have another way in mind? Make a Pull Request.

Huge Thanks

Many thanks to this fellas:

About

A complete yet filthy way to remove Unity splash screen for free

Topics

Resources

Stars

Watchers

Forks