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问答社区提供了答复
Texture
Q:想新增图片时,自动化解决图片的设置,后果设置图片时报错了,网上也没有找到解决方案,谬误如下:Selected texture format ‘Unsupported’ for platform ‘Android’ is not valid with the current texture type ‘Sprite’。
Unity版本:2019.4.34f1
public class TextureImporterProcessor : AssetPostprocessor{ void OnPostprocessTexture(Texture2D texture) { bool haveAlpha = textureImporter.DoesSourceTextureHaveAlpha(); textureImporter.isReadable = false; textureImporter.mipmapEnabled = false; textureImporter.alphaIsTransparency = haveAlpha; textureImporter.textureType = TextureImporterType.Sprite; textureImporter.textureCompression = TextureImporterCompression.Compressed; TextureImporterPlatformSettings androidSettings = new TextureImporterPlatformSettings() { name = "Android", overridden = true, format = haveAlpha ? TextureImporterFormat.ASTC_RGBA_6x6 : TextureImporterFormat.ASTC_RGB_6x6, }; textureImporter.SetPlatformTextureSettings(androidSettings); TextureImporterPlatformSettings iOSSetting = new TextureImporterPlatformSettings() { name = "iPhone", overridden = true, format = haveAlpha ? TextureImporterFormat.ASTC_RGBA_6x6 : TextureImporterFormat.ASTC_RGB_6x6, }; textureImporter.SetPlatformTextureSettings(iOSSetting); textureImporter.SaveAndReimport(); }}
A1:可能是纹理格局的问题,我这边把ASTC_RGBA_6x6改成ASTC_6x6就没有这个报错了。
感激宗卉轩@UWA问答社区提供了答复
A2:补充上楼的,TextureImporterFormat格局指定有问题,ASTC整合了带A的格局,所以代码里都对立成ASTC_x了。在新的2020版本里曾经没有ASTC_RGBA与ASTC_RGB的辨别,都对立到一个接口ASTC_x里了,应该是版本过渡的问题,Unity 2019有很多的过渡问题,在2020下面就好很多了。
感激廖武兴@UWA问答社区提供了答复
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问答社区提供了答复
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问答社区提供了答复
封面图来源于:GPU Particles Unity
用于Unity的GPU粒子系统。
明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在UWA问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官网技术QQ群:793972859(原群已满员)