1)用Compute Shader处理图像数据后在安卓机上不能正常显示渲染纹理
2)折叠屏适配问题
3)Prefab对DLL中脚本的引用丢失
4)如何优化Unity VolumeManager中的ReplaceData
这是第378篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。
Shader
Q:我用Compute Shader来做2D游戏图像数据的处理工作。
这是一款老2D游戏,客户端资源中大量图像都是以UShort[]数组存储的。读取后数组中的一个UShort值对应一个像素颜色值,通过写一个Compute Shader,将这些像素颜色值写到RenderTexture上,然后用Canvas+RawImage显示在主摄像机中。
在编辑器中已经正常运行了,每帧渲染耗时8-10ms(因为换装游戏的关系,需要对颜色值做很多叠加计算等处理)。
我打包出APK包,在安卓手机真机上却无法像在编辑器里一样显示图像。
在安卓手机运行时,打Log检测:
SystemInfo.supportsComputeShaders
安卓真机系统是支持这个Compute Shader的。
用FrameDebugger查看时,在编辑器里:
可以看到运行了Compute Shader,而且显示了这个Compute Shader的名称:XImageComputeShader。
上图第二红框中就是渲染出的RenderTexture图像内容。通过绑定RawImage,在游戏画面中可以正常显示。
但在安卓机里,看不到运行Compute Shader的地方,而RenderTexture的图像内容全部为空。
而游戏画面中,也是空白内容,没有图像。请教各位大佬,问题可能出在哪里?
另外,我用了华佗热更,再用IL2CPP,是否会因为某些原因被裁剪掉?如何验证修复呢?
针对以上问题,有经验的朋友欢迎转至社区交流分享:
UWA问答 | 游戏开发者互动问答社区 | 侑虎科技
UI
Q:请问大家有处理过折叠屏的适配吗?有没有好的思路?
目前项目直接SetResolution后,无法自适应折叠屏开关变化;但又不想一直Update监听屏幕的尺寸。请问大家还有更好的思路吗?
针对以上问题,有经验的朋友欢迎转至社区交流分享:
UWA问答 | 游戏开发者互动问答社区 | 侑虎科技
Prefab
Q:开发时,不希望策划看到源码,于是将源码替换成DLL,但是这样挂在Prefab上的脚本引用会丢失,请问怎么解决?
A1:写了个Demo测试了下,如果工程里的DLL对应GUID维持不变(对应Meta文件不变),DLL重新构建并导入替换,并不会影响Prefab上挂接的DLL里的Mono脚本。
感谢JGIbhXxT@UWA问答社区提供了回答
A2:思路可以参考该以下工具,实际使用需要修改一下源码。
DLLSwitcher | 实用工具 工具 | Unity Asset Store
DLLSwitcher | Utilities Tools | Unity Asset Store
感谢草莓声明@UWA问答社区提供了回答
Script
Q:请问Unity VolumeManager中ReplaceData怎么优化?为什么每帧都会更新所有的参数?
A:优化方式是减少项目中VolumeComponent,有一些没有用到的就不需要加入到type[]中了,本身CPU耗时就是For循环所有的参数和VolumeComponent开销比较大。
感谢菜鸟@UWA问答社区提供了回答
封面图来源于网络
今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。
UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com