版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/qq_37717853/article/details/87715126
最近对接了个unity3D做的小游戏到android项目中:游戏嵌入项目的界面且非全屏显示,项目几经波折,到我手上的时候,已经采用了在同一个activity中用两个View来分别显示android界面和unity游戏界面部分,显示android部分的View在上层,通过显示与隐藏操作实现对于下层unity游戏界面View的显示和隐藏。
所以本篇暂时只记录下对接过程中遇到的坑,可能夹杂有一些吐槽,如果谈及的问题刚好你也遇到了并给了你一些启发,那感情好。至于如何在一个android项目中嵌入unity项目,等稍得空再另开一篇简述,以便日后查阅。
和博主对接的人不懂android,博主不懂unity,真是GG。unity给博主的初步印象就是做动画方面比较擅长,但是呢也对于android设备的
性能要求较高,同型号的设备,在博主这测试往往啥事没有,一交给测试就各种问题,
卡顿,花屏,甚至卡死。往往这种不报错的问题是最为头痛的,而且还出现在对接项目中,双方都没改动代码的情况下出错却不报错,彼此大眼瞪小眼(`_ゝ´) (`ι_´メ)。
不报错也要解决啊,只能祭出
Log大法,对于每一关键步骤,都打印日志查看,最终锁定了就是两个view的显示切换的时候,往往会出现不可控的卡顿问题。初步归结为android设备性能问题(或者unity方优化不足),一时半会儿解决不了(总不能大批量换高性能的设备吧)。
坑一:当将显示android界面的view隐藏,露出下方的unity的view的时候,这个过程有可能需要等待不可控的时间,而且每台设备每个时间可能不完全一样,用户体验为卡顿
解决方案:添加一个加载中界面,强制等待1-3秒再切换至显示unity界面的view
坑二:当unity游戏结束,需要将android的view设置为显示来达到隐藏unity界面的效果时,明明已经设置了visibility,但是界面不出现,要等待很久或者卡死
这个问题当时我几乎认为要无解了,百度没有相似案例,log已锁定就是这个步骤出问题了,但是咋办呢?百思不得其解,说来也巧了不是,正当我对着卡死的界面愁眉苦脸的时候,不小心点出了一个弹窗,界面顿时就刷新了,我猛地一个机灵,为了确认是否有效,又反复试了多次,果然,在设置了visibility之后卡死这段时间内,如果跳一个弹窗出来,界面就会刷新
先别急,我们来稍微探究下原因:设想是弹窗的出现达到了刷新界面的效果,那么调用view自身的invalidate和postInvalidate是否可行?view中的子view 即 RecyclerView的adapter如果调用notifyDataChanger呢?亦或者调用一个Toast呢?试过之后发现....不行,好吧,我只能先用
看起来很low的弹窗方案了:设置了visibility之后,调用一个透明弹窗,一秒钟(甚至更短时间)后自动关闭,这样用户几乎毫无察觉。
坑三:当界面上非全屏显示unity游戏时,如果此时剩余空间内用一个view在播放视频,那么有概率出现屏幕花屏的现象,没错,是花屏,而且换个视频就没事了,同样格式的视频,至今不明白这个问题
好在只是特定一个视频会这样,不知有没有路过的大神知道咋回事的,
望悉知。
初次接触unity,可以说很印象深刻了,鉴于以上问题百度无果,特此记录,以免少走弯路。