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