1)TextMeshPro 备用字体疑难
2)iOS 的局部语言的 float 分隔符变成了逗号
3)ASTC 格局反对与官网文档不符
4)对于音效背景音乐的音频文件的格局设置求教
5)LightProbe 的信息地位
这是第 269 篇 UWA 技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫 10 分钟,认真读完必有播种。
UWA 问答社区:answer.uwa4d.com
UWA QQ 群 2:793972859(原群已满员)
Text
Q:TextMeshPro 设置的 Fallback“字体 B”,文本字体是“字体 A”,如果文本显示的字符都是字体 A 的,CPU 会不会收集字体 B 的贴图信息数据发送给 GPU 用来渲染?
不是很了解这个 Fallback 字体,发现字体 A、字体 B 都在内存中,也就是说其实都是关联上的。是不是所有的后备字体都会在内存中呈现?
A:问题一:TMP 中所谓 Fallback,也就是后备字体,其含意在于当理论应用中呈现了以后字体所不反对的字符时,依照:主字体(也就是以后字体)、主字体的后备字体、后备字体的后备字体、通用后备字体、通用后备字体的后备字体、通用默认字体、通用默认字体的后备字体等等的序列遍历所有设置的后备字体,直到找到可能反对的字体为止。
所以,引擎只有在内存中保留 Fallback 字体资源,能力在以后字体无奈显示所有字符时采纳 Fallback 字体。问题中提到的字体 B 也在内存中是正当的。
当然,如果开发者能确定字体 A 能够反对我的项目中呈现的所有字体,那么齐全能够查看 Project Settings 中全局的 Default Font Asset、全局的 Fallback Font Assets List、字体 A 的 Fallback Font Assets,以上三处设置为空,则能够肯定水平上节俭内存。
问题二:我补充做了试验。对照状况是用某一种主字体显示“New Text”这一串字符,显然足够反对、而内存中也只有该主字体。而后在方才提到的主字体的后备字体、后备字体的后备字体、通用后备字体、通用后备字体的后备字体、通用默认字体、通用默认字体的后备字体这个序列的每个环节加上不同的字体,显然它们没有被理论用到,但都进入内存了。List 外面有几种字体也是一样。
感激 Faust@UWA 问答社区提供了答复
iOS
Q:最近咱们打包的时候发现,在 iOS 设施上,局部语言的小数的分隔符变成了逗号,比方俄罗斯语。起初发现是因为 CurrentCulture 变成了设施的语言,Android 和之前的 iOS 设施都是 en-US,也就导致了读取配置时用 float.TryParse 会转换失败。
咱们的 Unity 版本是 2018.4.33,目前还没有定位是什么起因导致的,不晓得有没有人碰到过?如果在游戏启动时强制把 CurrentCulture 改成英语不晓得可不可行?
A:咱们我的项目踩过这个坑,起因就是一些语言外面小数点分隔符不一样,比方法语里分隔符是逗号,属于文化差异。解决方案是游戏启动时设置 CurrentCulture 为 CultureInfo.InvariantCulture:
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture; CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.InvariantCulture; Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
参考链接:CultureInfo.InvariantCulture
感激张迪 @UWA 问答社区提供了答复
Texture
Q:ASTC 格局反对与官网文档不符,依据官网文档(https://docs.unity3d.com/Manu…)。实践上咱们的测试机中,红米 2 是不反对的 ASTC 格局的。但理论测试中发现,它是反对的。这是怎么一回事?
A:之前做过相干的测试,红米 2(Adren 302)是反对 ASTC 的,但红米 Note2(PowerVR Rogue G6200)是不反对的。并且从 Unity 2017.4 的 Profiler 中能够看到纹理的大小是正确的。
这和官网提供的:tvOS (all), iOS (A8), Android (PowerVR 6XT, Mali T600 series, Adreno 400 series, Tegra K1) 不符。
从目前的测试来看,能够认为理论反对状况和文档提供的 GPU 型号并不完全一致。在不反对的机型上会软解成 RGBA32 或 RGB24,理论内存也是一样。
感激 OCEAN@UWA 问答社区提供了答复
Audio
Q:在 UWA 的报告中看到要用 Streaming 的形式读取音频。想问一下对于音频格式,有优化角度比拟全的倡议吗?
之前我的项目里的设置大略是这样子的,适合吗?大家常见的做法是怎么的?有没有一个绝对正当的经验值,比方 10s 的音效大小在 100KB 这样的参考值?
A:并不举荐应用 MP3 播放音乐,起因是应用 MP3 制作素材会无奈防止在循环点引入空白音频,参见:https://sound.stackexchange.c…
之前应用过相似于 MP3Loop 的小工具,然而编码品质也无法控制,最初抉择用 Ogg(Vorbis)一了百了。
早一些的开发者(1990-2000 年前后)会采纳 MIDI,但 MIDI 只是记录音乐信息用的格局,理论发声取决于所应用的音源,而音源设计通常会偏向于大而全所以为了无限的 MIDI 音乐加载残缺的音源也会造成资源冗余。
对于 PCM 或者 ADPCM,通常被称为 WAV 及“三分之一的 WAV”,能够依据音效具体内容来决定优化策略,有一个概念须要理解——奈奎斯特采样定理。
简略讲,如果一个声音比拟消沉,那么能够适当升高采样率来晋升 PCM 或者 ADPCM 的“压缩比”,这样能够既保留 PCM/ADPCM 的低功耗和疾速响应,又升高资源占用。假如一个声音比拟显著的能量都散布在 4000hz 之下,那么只须要 8000hz 的采样率就能够十分好的记录及还原这个声音了。
事实上 Unity 原声音频最现实的音乐格式是 Tracker Module,只是国内开发者理解 Demo Scene 的比拟少,音乐创作者为此类格局创作的教训也十分稀少。
这里贴一个 Tracker 音乐的外网视频连贯,大家能够听一下看看会不会唤起一些童年回顾:https://www.youtube.com/watch…
翻译了 Unity 官网十一年前的一篇 Blog:《.mod in Unity》
文章的中文翻译能够戳原问答查看。几个罕用 Tracker 音乐制作软件的网站链接:OpenMPT,MilkyTracker,schismtracker。有趣味的敌人能够尝试一下用这种古老的格局创作音乐,能够做到既不就义音质也不占用多少空间。
对于进一步的音频优化技巧,集体比拟举荐刷一遍 Wwise 的 251 认证课程内容,收费而且实际上都是些通用的技巧:https://www.audiokinetic.com/…
感激 Icarus@UWA 问答社区提供了答复
Rendering
Q:场景中的 LightProbe 信息是保留在 lightingData.asset 文件中吗?
A1:如果要保留,能够思考这样存:
AssetDatabase.CreateAsset(Instantiate(LightmapSettings.lightProbes),“Assets/lightProbe.asset”);
感激萧小俊 @UWA 问答社区提供了答复
A2:不确定,lightingData.asset 中次要寄存 Lightmap 的对应关系,但 LightProbe 是否也在外面就不确定了。
感激 OCEAN@UWA 问答社区提供了答复
A3:对于 LightProbes 更多的操作能够参考这篇文章:《聊聊 LightProbe 原理实现以及对 LightProbe 数据的批改》
感激 Xuan@UWA 问答社区提供了答复
20210927
更多精彩问题等你答复~
- Vulkan API 的性能及兼容性
- Unity TMP 字体计划如何抉择
- 如何实现 AAB 包的增量更新
封面图来源于网络
明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在 UWA 问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA 学堂:edu.uwa4d.com
官网技术 QQ 群:793972859(原群已满员)