Unity3d打包后移动端启动黑屏时间太久

欢迎加入Unity业内qq交流群:956187480

qq扫描二维码加群,行业纵横颇多,每个人精通领域各异,旨在交流,


.公司性质使然,经手很多小项目。在美术资源少,代码框架简单的情况下一般不会考虑到性能优化,资源管理优化的问题。包体小启动速度基本也没有很明显的延迟。但是经过去年的一个项目跟今年的一个项目的洗礼后发现即便你的资源管理做过优化,项目框架也没什么大问题(其实也就是能顺利运行)的情况下在移动端启动应用的时候会黑屏很长一段时间,测试过最高一次是12秒,简直不能忍受。当然这个时间是根据不同性能的手机变化的(千元机)。由此引发以下疑问:

打包安装到手机上,启动应用,这时会黑屏一阵子,然后u3d的logo出来,过一段时间logo消失,然后进入游戏场景。如果是收费版隐藏掉unitylogo后黑屏时间就会更长。

1,黑屏的时候在干什么,如何减少这个黑屏的时间(比如Resrources里塞太多东西是否会对此有影响)。

开始黑屏的时候在加载资源。有人说先是 Unity Player 的内核,然后再到你游戏里的资源。Resrources里塞太多东西会对加载速度有影响。解决的办法是通过代码实现动态加载

2,如何解决黑屏太久体验差的问题。

优化resources内的资源,尽量用动态加载的方式,尽量使resources内资源量最少。另外在移动端写自己自定义的界面在启动的时候就调用显示遮挡黑屏,在unity界面出现后再隐藏原生界面(目前最直接有效的方法android和Ios都可以)后面会记录安卓端的处理方式

 

3,u3d收费版提供了一个自定义启动画面的功能,这个功能是否仅仅只是替换黑屏后的u3d logo为自定义画面?

其实在最初网上搜寻资料的时候发现很多人都认为unity本身已经做过优化了,说是收费版提供的自定义的logo界面可以降低启动黑屏的体验差感。后来测试根本无效,这个功能是否仅仅只是替换黑屏后的u3d logo为自定义画面而已对启动速度或者启动界面来讲没有任何优化,只是减短黑屏时间而已。

4,官方为啥不提供某个全平台统一的方式来达到:点击app icon -> 快速启动某个用户自定义界面 -> 引擎初始化,第一个游戏场景加载(此过程耗时不定) -> 加载完成后通知用户,关掉启动界面,显示游戏场景。

这些功能需要开发者自己写程序来实现。因为开发者的需求多种多样,引擎一般不会提供太多傻瓜式的一体化方案。Unity3D引擎编译出来的游戏,安装包都偏大,在移动设备上的加载速度确实是偏慢的


下面记录安卓端的启动原生界面流程

先声明此种做法可能会引起一些完美主义或者强迫症者的反感,勿喷。虽然也算是取巧走了歪路单也算是能满足领导需求。所有的解决方案以满足需求为主。

1.unity跟安卓交互参考之前的记录博客

2.安卓端代码:记得把显示的图片放到资源目录drawable里面

public class MyActivity extends UnityPlayerActivity {
    private ImageView bgView = null;

    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);

        SetSplash();
    }
    public void SetSplash( )
    {
        bgView = new ImageView(mUnityPlayer.currentActivity);
        bgView.setBackgroundResource(R.drawable.loadingsplash);
        bgView.setScaleType(ImageView.ScaleType.FIT_XY);
        mUnityPlayer.addView(bgView);
    }

    public void HideSplash()
    {
        new Handler(Looper.getMainLooper()).post(new Runnable() {
            @Override
            public void run() {
                if(bgView != null)
                {
                    mUnityPlayer.removeView(bgView);
                    bgView = null;
                }
            }
        });
    }

 

3.unity端代码:略只需要在加载 第一个unity界面的时候调用HideSplash()方法即可。


欢迎加入Unity业内qq交流群:956187480

qq扫描二维码加群,行业纵横颇多,每个人精通领域各异,旨在交流,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章