Unity 打包取消默认启动Logo

| 分类 游戏开发之unity  好好玩游戏  | 标签 游戏  Unity  UI  Logo  打包  SplashScreen 

Unity 打包的应用,在启动的时候都会有一个默认的Unity Logo,使用Unity 升级版和破解版是可以随意清除和更换的,但是免费的Unity 个人版是无法通过Unity 的打包设置去进行更改的

Unity 暴露了SplashScreen.Stop() 停止启动屏的API,跳过Unity Logo 可是付费版用户的特权啊

只需要写个静态方法,使用 [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)] 即在在显示启动画面之前调用这个静态方法,在静态方法中调用 SplashScreen.Stop(SplashScreen.StopBehavior.StopImmediate) 来立即停止启动屏

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

#if !UNITY_EDITOR
using UnityEngine;
using UnityEngine.Rendering;
 
[UnityEngine.Scripting.Preserve]
public class SkipUnityLogo
{
    // https://docs.unity3d.com/cn/2021.3/ScriptReference/RuntimeInitializeOnLoadMethodAttribute.html
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)]
    private static void BeforeSplashScreen()
    {
#if UNITY_WEBGL
        Application.focusChanged += Application_focusChanged;
#else
        System.Threading.Tasks.Task.Run(AsyncSkip);
#endif
    }
 
#if UNITY_WEBGL
    private static void Application_focusChanged(bool obj)
    {
        Application.focusChanged -= Application_focusChanged;
        SplashScreen.Stop(SplashScreen.StopBehavior.StopImmediate);
    }
#else
    private static void AsyncSkip()
    {
        SplashScreen.Stop(SplashScreen.StopBehavior.StopImmediate);
    }
#endif
}
#endif

RuntimeInitializeLoadType 的取值有

  • AfterSceneLoad:在场景加载后
  • BeforeSceneLoad:在场景加载前
  • AfterAssembliesLoaded:加载完所有程序集并初始化预加载资源时的回调
  • BeforeSplashScreen:在显示启动画面之前
  • SubsystemRegistration:用于子系统注册的回调

将SkipUnityLogo.cs 放到对应的Unity 项目的任意目录下面(注意是运行时代码,不是Editor 代码),然后打包之后,再次打开可运行文件,可以看到启动之后不会再显示Unity 官方Logo




如果本篇文章对您有所帮助,您可以通过微信(左)或支付宝(右)对作者进行打赏!


上一篇     下一篇