个人Unity合理跳过启动LOGO动画|多平台兼容|官方API

716 阅读1分钟

前提说明

在2019.2后的Unity可使用官方加入的停止启动动画的API

相关连接

停止启动动画API,SplashScreen.StopBehavior.StopImmediate

自定义启动场景前的回调内容,RuntimeInitializeOnLoadMethodAttribute

原理

  1. 使用RuntimeInitializeOnLoadMethod标记方法,传入 RuntimeInitializeLoadType.BeforeSplashScreen可在场景初始化前的动画加载前进行相关操作。
  2. 然后调用
//停止启动LOGO动画的播放
SplashScreen.Stop(SplashScreen.StopBehavior.StopImmediate)

这个动画是个同步过程,并且不会因为加载完成而自动关闭,动画本身会浪费1~2秒

完整脚本

using UnityEngine;
using UnityEngine.Rendering;

public class SkipLogo
{
    // 指定此方法在加载时立即调用,在显示启动动画前之前执行
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)]
    private static void BeforeSplashScreen()
    {
        //平台适配
        #if UNITY_WEBGL
        // 如果在 WebGL 平台上运行,立即停止启动动画
        SplashScreen.Stop(SplashScreen.StopBehavior.StopImmediate);
        #else   
        // 如果不是在 WebGL 平台上,启动一个异步任务来停止启动动画
        System.Threading.Tasks.Task.Run(()=>
        {
            SplashScreen.Stop(SplashScreen.StopBehavior.StopImmediate);
        });
        #endif
    }
}

不用挂载到物体上,直接创建脚本,方法加上[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)]后会自动在动画启动前执行

亲测Web平台和PC平台有效

添加自己的启动动画(WEB平台)

原理

在WebGL平台中Unity的画面是通过createUnityInstance渲染到canvs上的 并且这个方法有个回调,回调的参数就是加载的状态 从0到1 如果为1就是资源加载完成,所以可以很简单的在canvs上盖一个自己加载动画的图片或者div 在加载回调中判断状态为1的时候直接隐藏盖在canvs上面的画面即可

例子

image.png