13

RenderTexture导致UI花屏的问题

 4 years ago
source link: https://blog.uwa4d.com/archives/TechSharing_241.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1)RenderTexture导致UI花屏的问题
​2)Unity 2019 ToLua导出ParticleSystem异常
3)UWA GOT在安卓10上的截图问题
4)Addressables.CheckForCatalogUpdates和Addressables.GetDownloadSizeAsync的问题
5)用RenderDoc抓不到华为手机的帧


这是第241篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

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

Rendering

Q:UI花屏该怎么查?出现绿色,也有紫色在闪烁。如下图所示,黑色背景还有紫色在闪烁,截图截不了。只有在真机下才出现,模拟器上是没有的。

这黑色背景是一个RenderTexture的Blur效果,SRP实现的,使用的设备是小米K30。

1.png

A1:建议使用FrameDebugger定位一下是哪些Shader执行出现的问题,出现问题的很有可能是该Shader的渲染执行顺序有问题,看看RenderPassEvent设置是否正确。

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

A2:问题查出来了,用了RenderTexture.GetTemporary,depthBuffer参数传了16导致的,0不会。

感谢题主NG週@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6039ed3fcfa35d5b5366981e


Q:Unity 2019 Tolua导出ParticleSystem异常,如图:

2.png

由于这里Type为null,导致ParticleSystem无法导出。

A:用1.0.8.595处理Unity运行库[out]标记非out参数问题,去官网更新一下。
https://github.com/topameng/tolua/commits
topameng committed on 19 Jun 2020

感谢南神@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6034a2d9cfa35d5b53669654


Android

Q:UWA在安卓10上不能正常使用截图功能,已经按照文档配置了Manifest,如下图:

3.png

A:这个解决方案是针对UWA GOT Online打包的Write权限的问题的,并不能解决截图的问题。目前在安卓10系统的真机上,只有APK设置的TargetSDKVersion<=28时才能截图。TargetSDKVersion设置为<=28(28为安卓9),出的APK仍旧能在安卓10手机上跑的。

感谢Xuan@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/603f384dcfa35d5b5366987a


Addressable

Q:请问大佬,为什么Addressables.CheckForCatalogUpdates和 Addressables.GetDownloadSizeAsync永远返回AsyncOperationStatus.Succeeded?

我http服务器都没开,它还是返回成功。本来是我是通过Addressables.CheckForCatalogUpdates和Addressables.GetDownloadSizeAsync来判断是否需要更新资源,但是http服务器都没开,依然返回成功,检测为不需要更新了。请问如何处理?

Addressable版本1.16.15
Unity 2018.4.14f

A1:翻了代码,最后发现CheckCatalogsOperation中的Execute方法里直接 Complete(result, true, null);这样返回的,所以永远都是成功的。

感谢题主wu@UWA问答社区提供了回答

A2:Addressables.CheckForCatalogUpdates是通过返回一个“catalog ids”的列表来判断是否有更新的,就判断这个列表有没有就可以了。

服务器没开自然是不需要更新,也没法更新。GetDownloadSizeAsync则是通过最新的Catalog内AssetBundle的hash和已经下载的AssetBundle的hash对比来判断是否需要下载,需要下载则把Size累计上。既然catalog没有被更新掉,自然也就没它什么事情了。

怎么处理就看业务层想怎么设计了。比如:
更新服务器开不开都希望进游戏,那么就按现在CheckForCatalogUpdates返回列表为空就当成不需要更新,继续跑就行了。

如果必须在更新服务在线的情况下走,那么就由外部程序来判断服务器是否活着,然后再进到游戏更新逻辑。

感谢黄程@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/600583d510a17c6c2b09db4b


Rendering

Q:最近遇到渲染深度不正确的问题。在骁龙的机型上渲染出来是错的(和编辑器不一致),在华为的机型和iOS上渲染出来是正确的。于是想用RenderDoc抓帧对比下两边的区别,看看到底哪一步不一样。

结果发现同样的包,在骁龙的机型上可以抓到帧(大约几十MB数据的.rdc文件),在华为的机型上抓出来是黑的(只有3MB左右数据的.rdc文件)。

去RenderDoc的Issue里翻了下,找到一条接近的,看作者的意思大概就是这问题没救。请问有没有人遇到过类似的问题,或者给一些建议。
https://github.com/baldurk/renderdoc/issues/2106

测试环境:
Unity 2018.4/Unity 2019.4
OpenGL ES3(如果用Vulkan,在华为手机上也可以正常抓帧)

1加手机抓帧结果:

4.png

华为手机抓帧结果:

5.png

A:后来发现某个用Mali Gpu的OPPO手机可以抓帧,就没用华为手机继续查这问题。

不过查资料过程中发现华为有一个自己改版的RenderDoc,可以用来在华为手机上抓帧:
https://developer.huawei.com/consumer/cn/forum/topic/0203337632069160300

感谢题主deviljz@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6030b41dcfa35d5b53669593


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

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


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK