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问答社区提供了回答,欢迎大家转至社区交流:
LightProbe的信息存在哪儿? -- 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问答社区提供了回答,欢迎大家转至社区交流:
LightProbe的信息存在哪儿? -- UWA问答:帮助开发者找到更好的答案


Texture

Q:ASTC格式支持与官方文档不符,根据官方文档(Unity - Manual: Recommended, default, and supported texture compression formats, by platform)。理论上我们的测试机中,红米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问答社区提供了回答,欢迎大家转至社区交流:
LightProbe的信息存在哪儿? -- UWA问答:帮助开发者找到更好的答案


Audio

Q:在UWA的报告中看到要用Streaming的方式读取音频。想问一下关于音频格式,有优化角度比较全的建议吗?

之前项目里的设置大概是这样子的,合适吗?大家常见的做法是怎样的?有没有一个相对合理的经验值,比如10s的音效大小在100KB这样的参考值?

A:并不推荐使用MP3播放音乐,原因是使用MP3制作素材会无法避免在循环点引入空白音频,参见:Is it possible to loop MP3 without gaps? - Sound Design Stack Exchange

之前使用过类似于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?v=gHQYYh7J1O4

翻译了Unity官方十一年前的一篇Blog:《.mod in Unity》
文章的中文翻译可以戳原问答查看。

几个常用Tracker音乐制作软件的网站链接:OpenMPT,MilkyTracker,schismtracker。有兴趣的朋友可以尝试一下用这种古老的格式创作音乐,可以做到既不牺牲音质也不占用多少空间。

关于进一步的音频优化技巧,个人比较推荐刷一遍Wwise的251认证课程内容,免费而且实际上都是些通用的技巧:Courses

感谢Icarus@UWA问答社区提供了回答,欢迎大家转至社区交流:
LightProbe的信息存在哪儿? -- 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问答社区提供了回答,欢迎大家转至社区交流:
LightProbe的信息存在哪儿? -- UWA问答:帮助开发者找到更好的答案

20210927
更多精彩问题等你回答~

  1. Vulkan API的性能及兼容性
  2. Unity TMP字体方案如何选择
  3. 如何实现AAB包的增量更新

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)

TextMeshPro备用字体疑问相关推荐

  1. Unity 中 创建 TextMeshPro 中文字体(含常见汉字 TXT 文件)

    TextMeshPro是个好东西,但是原生不支持中文,需要把中文字体转换为TextMeshPro才可以使用,即创建TextMeshPro中文字体,为TextMeshPro添加中文支持.(文章内含 常见 ...

  2. TextMeshPro中文字体生成和字体材质更换

    TextMeshPro中文字体生成和字体材质更换 中文字体生成: TextMeshPro是unity提供的相较源Text更加强大,高效的字体组件.但其有一个严重的缺点就是默认不支持中文.所以我们需要制 ...

  3. Unity TextMeshPro的字体消失的问题

    第一次遇见以为是个bug,既然我纠结了一段时间,那么我相信还会有其他人会碰到. 首先这里默认你已经创建好了一个字体. 如图,左边是创建好的字体.右边是原字体. 如果不知道怎么创建的话,快速创建步骤,右 ...

  4. Unity学习笔记 关于TextMeshPro(TMP) 字体大小FontSize单位说明

    前言 一般表示字体大小使用的单位分两种方式表示:pt(磅)和px(像素). pt:是指一个印刷单位"磅",大小为 1/72 英寸,是一个自然界标准的长度单位,也称为"绝对 ...

  5. Unity TextMeshPro中文字体设置

    新建font文件夹 导入中文字体ttf 导入字库.txt 打开window 点击生成 点击save

  6. TextMeshPro创建字体库

  7. Unity TextMeshpro创建中文字体

    使用Textmeshpro创建自定义中文字体 textmeshpro常用字体7000个 链接:https://pan.baidu.com/s/1nwLzZ7w0XOOi4wQ09Dl4Yg?pwd=p ...

  8. Unity TextMeshPro解决中文乱码以及修改默认字体

    (自学unity问题产生及解决记录贴) 环境及版本:windows,unity 2021.3.20f1c1 一.创建TextMeshPro输入中文产生乱码 问题:TextMeshPro中文显示乱码 解 ...

  9. Unity3D插件之TextMeshPro字体资源的制作

    由于TextMeshPro的字体资源后缀是.asset,所以,需要我们借助插件的字体工具TextMeshPro-Font Asset Creator来生成新的字体资源.该工具打开路径:Window-F ...

  10. 【Unity UI】TextMeshPro插件的使用(中文字,脚本更改文字内容)

    文章目录 导入TextMeshPro插件 导入中文字体 Window->Text Mesh Pro->Font Asset Creator 脚本更改文字内容 问题解决 缺失中文字 导入Te ...

最新文章

  1. C# Azure 存储-分布式缓存Redis的新建配置查看
  2. php对称字符串,PHP实现简单的对称加密和解密方法 - str_split
  3. system 函数被废除的替代方法
  4. [Jsp] JSP和Servlet页面间的参数的传递和接收
  5. QT乱码总结4.细谈本地编码
  6. checkStyle -- 代码风格一致
  7. 在IIS中部署SPA应用,多么痛的领悟!
  8. c#连mysql的latin1编码乱码问题
  9. Oracle用户可要顶住了:准备好大规模补丁工作!以修补多达 433 个的新安全漏洞...
  10. thinkphp实现商城
  11. 基于扩频信号的水声信道数据传输系统仿真,研究满足了WSSUS假设的瑞利信道模型,采用相干BPSK调制,联合多普勒Rake接收机
  12. qt里的pushButton中的clicked(bool);用法
  13. 计算机网络中处理通信控制功能的是,在计算机网络中处理通信控制功能的计算机是()。A.通信线路B.终端C.主计算机D.通信控制处理机...
  14. IELTS-writing exercise Expository_Text_18
  15. 设定Applocker和解决问题
  16. 【opencv】19.图像边缘检测算子数学原理、像素一二阶导数的意义
  17. 关于导出文件中文名乱码问题,response.setHeader(),postman测试有误,直接用浏览器测试
  18. 【JD的一人戏】之小羊踢足球第一篇
  19. 翻译连载 | JavaScript轻量级函数式编程-第4章:组合函数 |《你不知道的JS》姊妹篇... 1
  20. 最新超重车辆高速动态称重系统设计方案

热门文章

  1. python使用matplotlib可视化矢量流场图、使用streamplot函数可视化矢量流场图、矢量流场图包含坐标和方向
  2. Python读取罗技G29数据
  3. Visio绘图记录(1)
  4. 用java实现飞机大战_java飞机大战实现了什么技术
  5. Jsoup爬虫小案例
  6. 可以写在简历上的22个轻松上手的Java经典项目教程(含源码and笔记)
  7. android 简单锁屏代码,【简单代码】默认锁屏代码第二弹~
  8. 极客时间_算法训练营(代码实现汇总)
  9. 2020下半年软考 软件设计师通过感言
  10. 招投标系统简介 招投标系统源码 java招投标系统 spring cloud spring boot 招投标系统功能设计