关于android:Unity应用在手机息屏或切入后台时与正常运行之间的区别

4次阅读

共计 3558 个字符,预计需要花费 9 分钟才能阅读完成。

1)Unity 利用在手机息屏或切入后盾时与失常运行之前的区别
​2)PSD 转 Prefab 计划的流程
3)HUD UI 的资源加载问题
4)2021.3 Android 从 AssetBundle 中加载视频播放失败问题


这是第 310 篇 UWA 技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫 10 分钟,认真读完必有播种。

UWA 问答社区:answer.uwa4d.com
UWA QQ 群 2:793972859(原群已满员)

Android

Q:想求教一下各位,Unity 利用在手机息屏或者切入后盾时与失常运行之间有哪些区别?除了不须要渲染,是否会降帧运行呢?网络通讯会受影响吗?有没有可能在编辑器上模仿这种息屏或者切后盾的成果?

A1:在 Android 中,Unity 是作为 Activity 运行的,在息屏或者切入后盾后,Activity 会被暂停。Unity 会顺次收到 OnApplicationPause 和 OnApplicationFocus 这两个事件。

网络通讯必定是会受到影响的,在模仿上能够复现这种状况。

感激萧小俊 @UWA 问答社区提供了答复

A2:iOS 是假后盾,渲染会暂定,网络会提早一段时间后断开,必须有断线重连机制。

当初 Android 零碎,如果发现 APP 占用内存大、耗能较高,也会被 kill 掉,倡议监听进入后盾事件,进行相应的同步解决,不便后盾拉起到前台持续游戏。

感激郑骁 @UWA 问答社区提供了答复

UI

Q:找到了一个 PSD 转 Prefab 开源的插件:https://github.com/zs9024/qui…

该计划的思路:
1. 应用 PS 的内置脚本导出 PS 中的图片、文字为一份配置文件(须要命名标准)。
2. 应用 Unity 编辑器解析配置文件,生成 UGUI。

问题:
如果以 PSD 作为 Prefab 的源文件,原则上就不能手动批改 Prefab 了,所有改变都必须通过批改 PSD 来实现,那么 PSD 的标准就须要反对 Unity 的所有组件。如果大型项目组件很多,感觉不太事实。

如果 PSD 不作为源文件,前端能够进行 Prefab 的批改,然而后续有任何改变都不能再应用该工具导出。游戏开发如果是先用长期界面实现开发的,这种状况下工具简直就齐全用不上。

想求教有教训的同学,下面的状况怎么解决能力使该流程通顺?

A1:咱们之前个别只有做新性能的时候,才会用 PSD2UGUI。因为动效、性能、遮罩等因素,Prefab 是不能间接应用的,须要做 UI 的人进行独自调整。之后个别小的改变就间接在 Prefab 上改了,毕竟再走一遍流程还是比拟节约效率的。

其实能够看一下 FairyGUI,而后美术工程全副交由美术治理,效率上会高一点。

感激萧小俊 @UWA 问答社区提供了答复

A2:现实是美妙的。
当初 PSD 转 NGUI、UGUI、FGUI 的办法都大同小异,解析 PSD 文件中的节点,生成对应 UI 框架的配置文件,例如 Prefab、XML 等。题主的想法挺好,然而实现老本较高。

第一点,个别美术来制作 PSD,如果作为 UI 源文件,就须要 PSD 反对自定义属性,其实就是在 PS 里写插件来做一些自定义性能,或者在图素命名的时候,就要标准功能性的内容,不便后续解析。也要依据图层来组织 UI 的构造,这对 UI 美术来说老本极高。

第二点,做一套 Livelink 机制,PS 批改后实时刷新 Prefab。后续需要来了,也要刷新 Prefab 实例化之后的 GameObject。

第三点,PSD2UI 做完了,如果进行微调,必定在引擎里最不便,转身找美术从 PS 开始流程有点繁琐了,是不是还要做一套 UI2PSD?

第四点,总会有一些只能在引擎里表白的节点在 PS 里无奈表白,这一部分二次开发量也不小。

整体算下来,这一套工具链从制作到落地,再到前期保护,有点得失相当。

感激郑骁 @UWA 问答社区提供了答复

AssetBundle

Q:想请问一下 HUD UI 的资源加载问题是怎么解决的,我当初用的 URP 管线,AssetBundle 包的模式,性能曾经实现了,然而打 AssetBundle 资源当前加载进去显示不正确,我想请问下这个有没有什么解决方案?

A1:Shader 失落?先判断 Resouce 模式加载是否失常,Editor 中用 AssetBundle 加载是否失常,不过大概率是 Shader 没打进包内。

感激 [email protected] 问答社区提供了答复

A2:可能起因:Shader 变体失落,未打进 AssetBundle 里。打包时 Shader 和 UI 未进行依赖关系绑定。加载时,依赖的 Shader 未 Load。

感激郑骁 @UWA 问答社区提供了答复

Video

Q:在 Unity 2021.3 版本下,Android 从 AssetBundle 中加载视频播放 AndroidVideoMedia::OpenExtractor could not translate archive

1. 应用的版本是 Unity 2021.3.8
2. 在打包视频的时候设置了不压缩
3. AssetBundle 放在 StreamingAssets 目录下
4. 相干代码

    btn.onClick.AddListener(() =>
        {AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/assetbundle/videos"+ "/1109.ab");
            Debug.Log(ab == null);
            videoPlayer.clip = ab.LoadAsset<VideoClip>("1109");
            videoPlayer.Play();});
///build
 BuildPipeline.BuildAssetBundles(config.OutPath, BuildAssetBundleOptions.UncompressedAssetBundle, config.buildTarget);

呈现的问题:
在 Android 9.0 以下手机加载视频播放不了,日志:

Unity AndroidVideoMedia::OpenExtractor could not translate archive:/CAB-8621c60d70de42f9c22e8270082bc81a/CAB-8621c60d70de42f9c22e8270082bc81a. resource to local file.  Make sure file exists, is on disk (not in memory) and not compressed.

Android 9.0 以上则没有问题。

一些参考:
从论坛帖中理解如果要想从 AssetBundle 加载视频播放必须设置成不压缩:
https://forum.unity.com/threa…

官网文档也阐明了:
Unity supports playback from uncompressed asset bundles. For Android Pie and above, Unity supports playback from compressed asset bundles.

https://docs.unity.cn/cn/2021…

依照下面来说,应该是能够加载视频播放,然而还是有问题,不晓得有没有道友遇到过。

另外请问各位在解决视频资源的时候是什么计划,也是打进 AssetBundle,还是一成不变间接放到资源目录?

A1:个别打包时,AssetBundle 作为二进制文件进行解决,不要基于 AssetBundle 作为资源更新的根本文件,这样很多二进制文件要独自写逻辑解决。

如果依照二进制文件解决,那么视频可间接按原格局打包进包里,就不会呈现上述问题,包含 Lua、静态数据表、版本号记录文件、文件 MD5 文件、依赖关系表等都可解决,一劳永逸。

感激郑骁 @UWA 问答社区提供了答复

A2:有没有可能 StreamingAssets 目录被压缩了,能够从最终的 APK 外面的 AssetBundle 内存大小来 Check,能够解压出 APK 来看 AssetBundle 资源的压缩前和压缩后的大小是否雷同,如果雷同,就没有被压缩,如果不一样,则是被二次压缩了。

感激 [email protected] 问答社区提供了答复

封面图来源于网络


明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在 UWA 问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA 学堂:edu.uwa4d.com
官网技术 QQ 群:793972859(原群已满员)

正文完
 0