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掃描二維碼加羣,行業縱橫頗多,每個人精通領域各異,旨在交流,

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