Unity 启动 Logo 去除|SkipSplash 未生效问题(PC 版本)
问题现象原因解决方式添加无效启动方法顺序冲突修改启动顺序或调整 JSON仍显示 Logo其他插件抢先执行 BeforeSplashScreen改为或更后不想重新打包手动改修改loadTypes值。
Unity 启动 Logo 去除|SkipSplash 未生效问题(PC 版本)
摘要
Unity 在 PC 平台启动时默认会显示 Unity Logo 启动画面。
通常通过添加SkipSplash.cs脚本可以跳过该启动 Logo。
但有时发现脚本未生效——本文将介绍该问题的原因与解决方案,包括 启动顺序冲突 与 RuntimeInitializeOnLoads.json 手动修复 方法。
一、基础实现:SkipSplash.cs 脚本
在大多数情况下,只需要在项目中添加以下脚本,并确保其位于非 Editor 文件夹中(如 Assets/Scripts),即可跳过启动 Logo。
#if !UNITY_EDITOR
using UnityEngine;
using UnityEngine.Rendering;
public class SkipSplash
{
[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
二、问题:添加脚本后仍未生效
有时即使添加了上述脚本,Unity 启动 Logo 仍会显示。
原因分析
该问题通常是由于:
多个带有
RuntimeInitializeOnLoadMethod的方法在启动时冲突,
导致SkipSplash.BeforeSplashScreen()没有被优先执行。
三、解决方案一:调整启动顺序并重新打包
可通过修改其他脚本的 [RuntimeInitializeOnLoadMethod] 执行时机来避免冲突。
| 枚举值 | 调用时机 | 常见用途 |
|---|---|---|
BeforeSplashScreen |
最早执行(在 Unity Logo 之前) | 初始化框架或日志系统 |
SubsystemRegistration |
注册子系统时 | 注册自定义系统(底层逻辑) |
BeforeSceneLoad |
场景加载前 | 初始化配置、单例管理等 |
AfterSceneLoad |
场景加载后 | 依赖场景内容的初始化 |
AfterAssembliesLoaded |
所有程序集加载后 | 类型缓存、反射系统初始化 |
建议
让 SkipSplash 保持 BeforeSplashScreen,
将冲突脚本(通常来自第三方插件)改为 BeforeSceneLoad 或更后。
修改后重新 Build Player 即可。
四、解决方案二:修改 RuntimeInitializeOnLoads.json
如果不方便改源码或重新打包,也可以直接修改 Unity 打包生成的配置文件。
文件位置
打包后在以下目录找到:
<BuildFolder>/YourApp_Data/RuntimeInitializeOnLoads.json
示例内容如下:
{"root":[
{"assemblyName":"Assembly-CSharp","nameSpace":"","className":"SkipSplash","methodName":"BeforeSplashScreen","loadTypes":3,"isUnityClass":false},
{"assemblyName":"Unity.RenderPipelines.Core.Runtime","nameSpace":"UnityEngine.Rendering","className":"DebugUpdater","methodName":"RuntimeInit","loadTypes":0,"isUnityClass":true},
{"assemblyName":"Unity.VisualScripting.Core","nameSpace":"Unity.VisualScripting","className":"RuntimeVSUsageUtility","methodName":"RuntimeInitializeOnLoadBeforeSceneLoad","loadTypes":1,"isUnityClass":true},
{"assemblyName":"Coffee.UIEffect","nameSpace":"Coffee.UIEffectInternal","className":"UIExtraCallbacks","methodName":"InitializeOnLoad","loadTypes":1,"isUnityClass":false},
{"assemblyName":"Coffee.UIEffect","nameSpace":"Coffee.UIEffects","className":"ImageProxy","methodName":"InitializeOnLoad","loadTypes":1,"isUnityClass":false},
{"assemblyName":"Coffee.UIEffect","nameSpace":"Coffee.UIEffects","className":"TmpProxy","methodName":"InitializeOnLoad","loadTypes":1,"isUnityClass":false},
{"assemblyName":"UniTask","nameSpace":"Cysharp.Threading.Tasks","className":"PlayerLoopHelper","methodName":"Init","loadTypes":2,"isUnityClass":false},
{"assemblyName":"Vuplex","nameSpace":"Vuplex.WebView","className":"StandaloneWebView","methodName":"_initializePlugin","loadTypes":3,"isUnityClass":false},
{"assemblyName":"Vuplex","nameSpace":"Vuplex.WebView.Internal","className":"BaseWebView","methodName":"_staticInit","loadTypes":1,"isUnityClass":false},
{"assemblyName":"Vuplex","nameSpace":"Vuplex.WebView.Internal","className":"ThreadDispatcher","methodName":"_initialize","loadTypes":1,"isUnityClass":false},
{"assemblyName":"Vuplex","nameSpace":"Vuplex.WebView.Internal","className":"WebPluginFactory","methodName":"_beforeSceneLoad","loadTypes":1,"isUnityClass":false},
{"assemblyName":"Vuplex","nameSpace":"Vuplex.WebView.Internal","className":"MacWebPluginRegistrant","methodName":"_registerPlugin","loadTypes":1,"isUnityClass":false},
{"assemblyName":"Vuplex","nameSpace":"Vuplex.WebView.Internal","className":"WindowsWebPluginRegistrant","methodName":"_registerPlugin","loadTypes":1,"isUnityClass":false}]}
冲突点
可以看到:
{"className":"SkipSplash","methodName":"BeforeSplashScreen","loadTypes":3}
{"className":"StandaloneWebView","methodName":"_initializePlugin","loadTypes":3}
loadTypes 都为 3 (BeforeSplashScreen),说明它们执行顺序冲突。
解决办法
-
将冲突的插件(如
Vuplex.WebView.StandaloneWebView)的loadTypes值修改为 其他非 3 值(如 1 或 2)。 -
保存文件
-
再次启动 Unity,即可看到启动 Logo 被成功跳过
五、总结
| 问题现象 | 原因 | 解决方式 |
|---|---|---|
添加 SkipSplash.cs 无效 |
启动方法顺序冲突 | 修改启动顺序或调整 JSON |
| 仍显示 Logo | 其他插件抢先执行 BeforeSplashScreen | 改为 BeforeSceneLoad 或更后 |
| 不想重新打包 | 手动改 RuntimeInitializeOnLoads.json |
修改 loadTypes 值 |
实践建议
-
优先方法:修改脚本启动顺序(代码层面最干净)
-
调试时机:使用
Debug.Log("BeforeSplash")验证执行顺序 -
谨慎操作:直接编辑
RuntimeInitializeOnLoads.json时务必备份
参考资料与扩展阅读
-
Vuplex WebView 插件文档
SEO 标签(关键词)
Unity 启动画面、SkipSplash 无效、Unity SplashScreen 去除、
RuntimeInitializeOnLoadMethod 执行顺序、Unity PC 启动优化、
RuntimeInitializeOnLoads.json、Unity 启动 Logo 跳过、Unity BeforeSplashScreen 冲突
!仅记录方法,内容格式由Ai整理优化,可能存在错误
这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!
更多推荐


所有评论(0)