项目场景:
使用 Unity 开发的项目需要在 4.4.2 盒子上运行。
问题描述
1. 会有一个弹框说“从顶部向下滑动退出全屏模式”。 这是 .4 的一项功能传奇sf,称为全模式。 应用开启该模式后,应用的界面会占据整个屏幕,屏幕顶部的状态栏和底部的导航栏将被隐藏。 从屏幕顶部向下滑动,再次呼出状态栏和导航栏。 系统增加提示窗口提醒用户。 这个弹框需要去掉,否则用户无法进行下面的操作。
2.有些项目在启动过程中加载很慢。 经测试,三个项目在启动过程中的加载时间为20-30秒; 加载时间过长,需要优化。
原因分析:
1、 4.4及以上版本特性导致,但大部分盒子都针对该特性进行了优化,部分机型盒子未优化,所以会出现该问题。
2、加载问题的可能原因:资源太大、打包方式有问题、加载方式有问题。
解决方案:
1、
第一种方法:(此方法经测试无效,可能是我这边的问题)
对于某些特殊情况,这个提示很麻烦。 例如,一些深度定制的系统不能使用鼠标或触摸屏。 在打开全屏应用时,一旦出现这个提示安卓游戏盒子,就无法消除,非常影响用户体验。 所以这个提示窗口需要去掉。
这并不是说沉浸模式这个功能要去掉,只是去掉这个提示窗口而已。
相关代码位于/base//src/com////impl/目录下的ation.java文件。 打开这个文件,找到:
private final class H extends Handler {
private static final int SHOW = 0;
private static final int HIDE = 1;
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case SHOW:
handleShow((String)msg.obj);
break;
case HIDE:
handleHide();
break;
}
}
}
这段代码的作用是调出和隐藏提示窗口,我们只需要在方法中屏蔽(()msg.obj)和()即可。
第二种方法:重新方法(这个方法测试cocos后可以去掉,unity中不行)
public void onWindowFocusChanged(boolean hasFocus){
super.onWindowFocusChanged(hasFocus);
if(hasFocus){
showSystemUI();
}
}
public void showSystemUI(){
Handler mHandler = new Handler(){
public void handleMessage(Message msg){
getWindow().getDecorView().setSystemUiVisibility()(
View.SYSTEM_UI_FLAG_STABLE|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
);
}
};
mHandler.sendEmptyMessageDelayed(0,100);
}
重写后,cocos项目可以去掉弹框,正常运行,但是Unity项目还是不行,继续寻找其他解决方案;
其他公司技术支持建议的主题:修改为“@:style/Theme...”
主题改为;
修改主题后还是不行;
第三种方法:使用Unity插件(usBar.aar)
这个插件应该是网上找的,有人打包分享的。 之前遇到这个问题的时候,公司的技术用插件解决了类似的问题安卓游戏盒子,但是用了插件之后还是不行。 怀疑是unity版本的问题。 现在是.4.9f1,以前是.4.5f1; 所以,使用Unity 5.4.5版本创建一个空工程,添加插件在盒子上运行,弹出框成功去除。 所以,把2019年的所有项目降级到5.4.5(降级很痛苦)。
2、加载问题的解决方法:(加载有问题的都是Unity项目,没有加载问题的有3款,有3款有)首先优化包体,包体从38兆优化到15兆,并且加载时间相同; 继续修改打包方式,改成和项目一样的打包方式没有问题,还是不行; 用Unity打包改成导出再打包,还是不行; 从日志中可以看出加载进度在4%,等待20秒后继续加载。 而且中间没有错误; 怀疑是大资源文件引起的。 检查项目发现有一个2.5M大小的大音频文件。 直接去掉这个音频包测试后,加载时间变成了3秒。 问题应该在音频文件中。 继续,继续看另外两款游戏,果然,两款游戏的音频文件都比较大。 压缩音频文件到300Kb大小,打包后测试,加载还是很快的。 至此,问题已经解决。 压缩所有音频文件并将它们全部重新打包。 全部通过了测试。
稍后我会把插件上传到csdn,或者直接私信我获取。