头图

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

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没打进包内。

感谢Knight-132872@UWA问答社区提供了回答

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资源的压缩前和压缩后的大小是否相同,如果相同,就没有被压缩,如果不一样,则是被二次压缩了。

感谢Xuan@UWA问答社区提供了回答

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

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

UWA官网:[链接]

33 声望
12 粉丝
0 条评论
推荐阅读
Wwise内存问题
Q:Unity自带的Profiler工具不能对Wwise内存进行Profiler,用Wwise Profiler只能看到一个总的Total Used,具体加载了哪些没有一个具体的表格,有什么工具或者方法可以截取音频的内存快照呢?

侑虎科技阅读 79

封面图
「持续兼容」微信H5选择照片(图片&视频)及拍照&录像
做过H5调用手机相册或者拍照的同学可能深有体会,在不同型号手机和不同的浏览器上表现各有差异,实属头疼。由于手机自带浏览器或者第三方浏览器实在太多,结合最近正在做的项目用户群体P90在微信上,文本单从兼容...

wuwhs6阅读 2.5k

封面图
网易云音乐开源全链路埋点方案-曙光埋点(dawn)
网易云音乐开源了曙光埋点 dawn,一个跨多端的全链路埋点解决方案,旨在构造一个完美的数据理想国。曙光埋点创造性的提出了埋点虚拟树(VTree),并在此基础上实现了诸多能力,解决大前端侧埋点困难、精度差、不...

云音乐技术团队3阅读 2.5k

封面图
直播回顾 | 点击率提升400%,Ta是怎么做到的?
Discovery第18期直播已于3月30日圆满结束,本期直播邀请天眼查做客直播间,从天眼查与华为Push用户增长服务合作历程切入,聚焦用户增长,分享提升应用活跃度和渠道ROI的经验与见解。一起来回顾本期精彩内容吧!

HMSCore阅读 6.4k

Android Crash 前的最后抢救
众所周知,当 Andoird 程序发生未捕获的异常的时候,程序会直接 Crash 退出。而所谓安全气囊,是指在 Crash 发生时捕获异常,然后触发兜底逻辑,在程序退出前做最后的抢救。

xiangzhihong1阅读 1.4k

教你如何在 Andorid 上使用OpenAI API 调用ChatGpt
现在Chat GPT功能越来越强了,几乎你想问实际问题它都能给你回答。正好,小组结课的 Android项目 有一个解梦的功能。正好调用chatGpt的Api来实现。下面就来简单实现在Andorid项目中打造一个简易的聊天机器人。

weiweiyi1阅读 1k

一名七年老安卓的一二月小结
你好,我是 shixin,一名工作七年的安卓开发。每两个月我会做一次总结,记下这段时间里有意义的事和值得反复看的内容,为的是留一些回忆、评估自己的行为、沉淀有价值的信息。一转眼 2023 年过去了六分之一,这两...

shixinzhang2阅读 774

封面图

UWA官网:[链接]

33 声望
12 粉丝
宣传栏