隨筆:說說第一次在android中嵌入非全屏顯示的unity遊戲時的坑之——界面切換時出現延遲/卡頓/花屏等現象解決方法

One
最近對接了個unity3D做的小遊戲到android項目中:遊戲嵌入項目的界面且非全屏顯示,項目幾經波折,到我手上的時候,已經採用了在同一個activity中用兩個View來分別顯示android界面和unity遊戲界面部分,顯示android部分的View在上層,通過顯示與隱藏操作實現對於下層unity遊戲界面View的顯示和隱藏。

Two
所以本篇暫時只記錄下對接過程中遇到的坑,可能夾雜有一些吐槽,如果談及的問題剛好你也遇到了並給了你一些啓發,那感情好。至於如何在一個android項目中嵌入unity項目,等稍得空再另開一篇簡述,以便日後查閱。

Three
和博主對接的人不懂android,博主不懂unity,真是GG。unity給博主的初步印象就是做動畫方面比較擅長,但是呢也對於android設備的性能要求較高,同型號的設備,在博主這測試往往啥事沒有,一交給測試就各種問題,卡頓,花屏,甚至卡死。往往這種不報錯的問題是最爲頭痛的,而且還出現在對接項目中,雙方都沒改動代碼的情況下出錯卻不報錯,彼此大眼瞪小眼(`_ゝ´) (`ι_´メ)。

Foru
不報錯也要解決啊,只能祭出 Log大法,對於每一關鍵步驟,都打印日誌查看,最終鎖定了就是兩個view的顯示切換的時候,往往會出現不可控的卡頓問題。初步歸結爲android設備性能問題(或者unity方優化不足),一時半會兒解決不了(總不能大批量換高性能的設備吧)。

Five
坑一:當將顯示android界面的view隱藏,露出下方的unity的view的時候,這個過程有可能需要等待不可控的時間,而且每臺設備每個時間可能不完全一樣,用戶體驗爲卡頓

解決方案:添加一個加載中界面,強制等待1-3秒再切換至顯示unity界面的view

Six
坑二:當unity遊戲結束,需要將android的view設置爲顯示來達到隱藏unity界面的效果時,明明已經設置了visibility,但是界面不出現,要等待很久或者卡死

這個問題當時我幾乎認爲要無解了,百度沒有相似案例,log已鎖定就是這個步驟出問題了,但是咋辦呢?百思不得其解,說來也巧了不是,正當我對着卡死的界面愁眉苦臉的時候,不小心點出了一個彈窗,界面頓時就刷新了,我猛地一個機靈,爲了確認是否有效,又反覆試了多次,果然,在設置了visibility之後卡死這段時間內,如果跳一個彈窗出來,界面就會刷新
先別急,我們來稍微探究下原因:設想是彈窗的出現達到了刷新界面的效果,那麼調用view自身的invalidate和postInvalidate是否可行?view中的子view 即 RecyclerView的adapter如果調用notifyDataChanger呢?亦或者調用一個Toast呢?試過之後發現....不行,好吧,我只能先用看起來很low的彈窗方案了:設置了visibility之後,調用一個透明彈窗,一秒鐘(甚至更短時間)後自動關閉,這樣用戶幾乎毫無察覺。

Seven
坑三:當界面上非全屏顯示unity遊戲時,如果此時剩餘空間內用一個view在播放視頻,那麼有概率出現屏幕花屏的現象,沒錯,是花屏,而且換個視頻就沒事了,同樣格式的視頻,至今不明白這個問題
好在只是特定一個視頻會這樣,不知有沒有路過的大神知道咋回事的,望悉知

End
初次接觸unity,可以說很印象深刻了,鑑於以上問題百度無果,特此記錄,以免少走彎路。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章