随笔:说说第一次在android中嵌入非全屏显示的unity游戏时的坑之——界面切换时出现延迟/卡顿/花屏等现象解决方法

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/qq_37717853/article/details/87715126
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,可以说很印象深刻了,鉴于以上问题百度无果,特此记录,以免少走弯路。

猜你喜欢

转载自blog.csdn.net/qq_37717853/article/details/87715126