1)ParticleSystem的内存会受到MaxParticles影响吗
2)使用代码修改图片压缩格式报错
3)Unity纹理导入设置对内存影响
4)Unity中视频播放的解决方案
这是第285篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。
UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)
Memory
Q:ParticleSystem的内存会受到MaxParticles设置的数值影响吗?
A:在真机上做了一个测试,Unity 2020.3.17,小米9。测试的特效是Unity默认的ParticleSystem特效,结果如下:
从上面的图上可以看到,内存受到“实际最多粒子数量”的影响,(可以大约理解为持续时间*每秒发射数量,不考虑Burst的发射方式)。当发射数量为0时,ParticleSystem也是有9416Byte的内存占用,这个是Unity内置的各种序列化的东西的占用。
另外,当“实际最多粒子数量”确定后,Active的粒子数随着播放时间增长越来越多,内存占用是不会变的,如下图所示。
PS
当ParticleSystem发射的是Mesh时,会造成Gfx内存上升,且这个Mesh内存占用是不统计到Assets/Mesh内存占用中的。
感谢Xuan@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6200a0df34a9f84e39f4cd3d
Texture
Q:想新增图片时,自动化处理图片的设置,结果设置图片时报错了,网上也没有找到解决方案,错误如下:Selected texture format ‘Unsupported’ for platform ‘Android’ is not valid with the current texture type ‘Sprite’。
Unity版本:2019.4.34f1
A1:可能是纹理格式的问题,我这边把ASTC_RGBA_6x6改成ASTC_6x6就没有这个报错了。
感谢宗卉轩@UWA问答社区提供了回答
A2:补充上楼的,TextureImporterFormat格式指定有问题,ASTC整合了带A的格式,所以代码里都统一成ASTC_x了。在新的2020版本里已经没有ASTC_RGBA与ASTC_RGB的区分,都统一到一个接口ASTC_x里了,应该是版本过渡的问题,Unity 2019有很多的过渡问题,在2020上面就好很多了。
感谢廖武兴@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/61f11918d8413e18eb9613cd
Texture
Q:一张2048x2048的图片但实际像素只有512x512,和一张512x512的图片有什么区别?我们在制作类似纸娃娃的系统,想定一个标准。目前定的512x512的尺寸(为扩展性考虑)。但是大多数装扮尺寸实际可能只有250x250,想知道实际上在加载和内存中会有区别吗?
A1:实验的数据,同样一张图大小为1024的图,在工程设置如下,比较出结果 :
以上测试数据是在PC下的测试数据。手机上的数据,楼主可以自己测试一下就知道了。前期可以考虑使用512的尺寸制作原图,然后制作一个工具,在出包时选择自己需要的压缩尺寸。
感谢廖武兴@UWA问答社区提供了回答
A2:续接楼上的回答。
纹理加载进内存以后占用内存计算公式是:
纹理内存(字节) = 宽 x 高 x 像素字节
像素字节 = 像素通道数(R/G/B/A) x 通道大小
也就是说:运行时大小 = 长x宽x每个像素占的大小
举例:RGBA 8888表示的是通道RGBA每个通道都占用8bit那么也就是一个像素占用了4bytes。故,图片大小若为1024x1024,则大小=1024x1024x4/1024/1024 = 4MB。
楼上的例子中采用了ASTC 4x4 block压缩格式。
ASTC 4x4 block压缩格式,每个像素占用1字节,8bits。一张1024x1024大小的贴图压缩后的大小为1MB。
感谢马三小伙儿@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/61f21724d8413e18eb976bdb
Video
Q:需要在游戏内播放视频,满足一些基本的需求,比如播放远程视频,边下边播,设置视频播放速度,视频进度条,暂停之类的。
目前已知的可以用自带的Video Player、AVPro和Sofdec2这三款,想问下有没大佬系统研究过视频播放这一块的,可以分享一点经验,不胜感激。
A:就题主提到的三款视频方式,我用过Video Player和AVPro。
在普通使用上Video Player已经能满足大部分需求,但是在对视频兼容性上,以及平台适用性上,AVPro要比Video Player强很多,而且Video Player还需要自己封装一些接口以便方便自己使用。
Video Player在每个平台有一些特定的要求格式,所以在兼容性上也要自己把控,而且很有可能在Android平台上,有些视频会导致一些莫名的黑屏。它的优点在于轻便,不需要过多的集成,与引擎的兼容性很好,升级引擎不会带来版本不一致的烦恼。
AVPro的一些缺点是功能比较多,对于一些不需要的功能,会比较臃肿,与引擎兼容也不如Video Player。优点就明显了,功能上还是很强大的,而且在平台的兼容性有很好的表现。有一些固定的解码算法,在Android平台上的表现最明显。
很多东西都是双刃的。看自己的需求,没有最好的,只有最合适的。有得必有舍,有舍必得。应该针对自己的需求以及当前项目的限制,周全考虑适合自己的。
感谢廖武兴@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/61ee78c5d8413e18eb925149
封面图来源于:GPU Particles Unity
用于Unity的GPU粒子系统。
今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)