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:一张 2048×2048 的图片但理论像素只有 512×512,和一张 512×512 的图片有什么区别?咱们在制作相似纸娃娃的零碎,想定一个规范。目前定的 512×512 的尺寸(为扩展性思考)。然而大多数打扮尺寸理论可能只有 250×250,想晓得实际上在加载和内存中会有区别吗?
A1:试验的数据,同样一张图大小为 1024 的图,在工程设置如下,比拟出后果:
以上测试数据是在 PC 下的测试数据。手机上的数据,楼主能够本人测试一下就晓得了。后期能够思考应用 512 的尺寸制作原图,而后制作一个工具,在出包时抉择本人须要的压缩尺寸。
感激廖武兴 @UWA 问答社区提供了答复
A2:续接楼上的答复。
纹理加载进内存当前占用内存计算公式是:
纹理内存(字节)= 宽 x 高 x 像素字节
像素字节 = 像素通道数 (R/G/B/A) x 通道大小
也就是说:运行时大小 = 长 x 宽 x 每个像素占的大小举例:RGBA 8888 示意的是通道 RGBA 每个通道都占用 8bit 那么也就是一个像素占用了 4bytes。故,图片大小若为 1024×1024,则大小 =1024x1024x4/1024/1024 = 4MB。
楼上的例子中采纳了 ASTC 4×4 block 压缩格局。
ASTC 4×4 block 压缩格局,每个像素占用 1 字节,8bits。一张 1024×1024 大小的贴图压缩后的大小为 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(原群已满员)