TextMeshPro备用字体疑问
1)TextMeshPro備用字體疑問(wèn)
?2)iOS的部分語(yǔ)言的float分隔符變成了逗號(hào)
3)ASTC格式支持與官方文檔不符
4)關(guān)于音效背景音樂(lè)的音頻文件的格式設(shè)置請(qǐng)教
5)LightProbe的信息位置
這是第269篇UWA技術(shù)知識(shí)分享的推送。今天我們繼續(xù)為大家精選了若干和開發(fā)、優(yōu)化相關(guān)的問(wèn)題,建議閱讀時(shí)間10分鐘,認(rèn)真讀完必有收獲。
UWA 問(wèn)答社區(qū):answer.uwa4d.com
UWA QQ群2:793972859(原群已滿員)
Text
Q:TextMeshPro設(shè)置的Fallback “字體B”, 文本字體是“字體A”,如果文本顯示的字符都是字體A的,CPU會(huì)不會(huì)收集字體B的貼圖信息數(shù)據(jù)發(fā)送給GPU用來(lái)渲染?
不是很理解這個(gè)Fallback字體,發(fā)現(xiàn)字體A、字體B都在內(nèi)存中,也就是說(shuō)其實(shí)都是關(guān)聯(lián)上的。是不是所有的后備字體都會(huì)在內(nèi)存中出現(xiàn)?
A:問(wèn)題一:TMP中所謂Fallback,也就是后備字體,其含義在于當(dāng)實(shí)際使用中出現(xiàn)了當(dāng)前字體所不支持的字符時(shí),按照:主字體(也就是當(dāng)前字體)、主字體的后備字體、后備字體的后備字體、通用后備字體、通用后備字體的后備字體、通用默認(rèn)字體、通用默認(rèn)字體的后備字體等等的序列遍歷所有設(shè)置的后備字體,直到找到能夠支持的字體為止。
所以,引擎只有在內(nèi)存中保留Fallback字體資源,才能在當(dāng)前字體無(wú)法顯示所有字符時(shí)采用Fallback字體。問(wèn)題中提到的字體B也在內(nèi)存中是合理的。
當(dāng)然,如果開發(fā)者能確定字體A可以支持項(xiàng)目中出現(xiàn)的所有字體,那么完全可以檢查Project Settings中全局的Default Font Asset、全局的Fallback Font Assets List、字體A的Fallback Font Assets,以上三處設(shè)置為空,則可以一定程度上節(jié)省內(nèi)存。
問(wèn)題二:我補(bǔ)充做了實(shí)驗(yàn)。對(duì)照情況是用某一種主字體顯示“New Text”這一串字符,顯然足夠支持、而內(nèi)存中也只有該主字體。然后在剛才提到的主字體的后備字體、后備字體的后備字體、通用后備字體、通用后備字體的后備字體、通用默認(rèn)字體、通用默認(rèn)字體的后備字體這個(gè)序列的每個(gè)環(huán)節(jié)加上不同的字體,顯然它們沒(méi)有被實(shí)際用到,但都進(jìn)入內(nèi)存了。List里面有幾種字體也是一樣。
感謝Faust@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
LightProbe的信息存在哪兒? -- UWA問(wèn)答:幫助開發(fā)者找到更好的答案
iOS
Q:最近我們打包的時(shí)候發(fā)現(xiàn),在iOS設(shè)備上,部分語(yǔ)言的小數(shù)的分隔符變成了逗號(hào),比如俄羅斯語(yǔ)。后來(lái)發(fā)現(xiàn)是因?yàn)镃urrentCulture變成了設(shè)備的語(yǔ)言,Android和之前的iOS設(shè)備都是en-US,也就導(dǎo)致了讀取配置時(shí)用float.TryParse會(huì)轉(zhuǎn)換失敗。
我們的Unity版本是2018.4.33,目前還沒(méi)有定位是什么原因?qū)е碌?#xff0c;不知道有沒(méi)有人碰到過(guò)?如果在游戲啟動(dòng)時(shí)強(qiáng)制把CurrentCulture改成英語(yǔ)不知道可不可行?
A:我們項(xiàng)目踩過(guò)這個(gè)坑,原因就是一些語(yǔ)言里面小數(shù)點(diǎn)分隔符不一樣,比如法語(yǔ)里分隔符是逗號(hào),屬于文化差異。解決方案是游戲啟動(dòng)時(shí)設(shè)置CurrentCulture為CultureInfo.InvariantCulture:
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture; CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.InvariantCulture; Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;參考鏈接:CultureInfo.InvariantCulture
感謝張迪@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
LightProbe的信息存在哪兒? -- UWA問(wèn)答:幫助開發(fā)者找到更好的答案
Texture
Q:ASTC格式支持與官方文檔不符,根據(jù)官方文檔(Unity - Manual: Recommended, default, and supported texture compression formats, by platform)。理論上我們的測(cè)試機(jī)中,紅米2是不支持的ASTC格式的。但實(shí)際測(cè)試中發(fā)現(xiàn),它是支持的。這是怎么一回事?
A:之前做過(guò)相關(guān)的測(cè)試,紅米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)不符。
從目前的測(cè)試來(lái)看,可以認(rèn)為實(shí)際支持情況和文檔提供的GPU型號(hào)并不完全一致。在不支持的機(jī)型上會(huì)軟解成RGBA32或RGB24,實(shí)際內(nèi)存也是一樣。
感謝OCEAN@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
LightProbe的信息存在哪兒? -- UWA問(wèn)答:幫助開發(fā)者找到更好的答案
Audio
Q:在UWA的報(bào)告中看到要用Streaming的方式讀取音頻。想問(wèn)一下關(guān)于音頻格式,有優(yōu)化角度比較全的建議嗎?
之前項(xiàng)目里的設(shè)置大概是這樣子的,合適嗎?大家常見(jiàn)的做法是怎樣的?有沒(méi)有一個(gè)相對(duì)合理的經(jīng)驗(yàn)值,比如10s的音效大小在100KB這樣的參考值?
A:并不推薦使用MP3播放音樂(lè),原因是使用MP3制作素材會(huì)無(wú)法避免在循環(huán)點(diǎn)引入空白音頻,參見(jiàn):Is it possible to loop MP3 without gaps? - Sound Design Stack Exchange
之前使用過(guò)類似于MP3Loop的小工具,但是編碼質(zhì)量也無(wú)法控制,最后選擇用Ogg(Vorbis)一了百了。
早一些的開發(fā)者(1990-2000年前后)會(huì)采用MIDI,但MIDI只是記錄音樂(lè)信息用的格式,實(shí)際發(fā)聲取決于所使用的音源,而音源設(shè)計(jì)通常會(huì)傾向于大而全所以為了有限的MIDI音樂(lè)加載完整的音源也會(huì)造成資源冗余。
關(guān)于PCM或者ADPCM,通常被稱為WAV及“三分之一的WAV”,可以根據(jù)音效具體內(nèi)容來(lái)決定優(yōu)化策略,有一個(gè)概念需要了解——奈奎斯特采樣定理。
簡(jiǎn)單講,如果一個(gè)聲音比較低沉,那么可以適當(dāng)降低采樣率來(lái)提升PCM或者ADPCM的“壓縮比”,這樣可以既保留PCM/ADPCM的低功耗和快速響應(yīng),又降低資源占用。假設(shè)一個(gè)聲音比較明顯的能量都分布在4000hz之下,那么只需要8000hz的采樣率就可以非常好的記錄及還原這個(gè)聲音了。
事實(shí)上Unity原聲音頻最理想的音樂(lè)格式是Tracker Module,只是國(guó)內(nèi)開發(fā)者了解Demo Scene的比較少,音樂(lè)創(chuàng)作者為此類格式創(chuàng)作的經(jīng)驗(yàn)也非常稀少。
這里貼一個(gè)Tracker音樂(lè)的外網(wǎng)視頻連接,大家可以聽(tīng)一下看看會(huì)不會(huì)喚起一些童年回憶:https://www.youtube.com/watch?v=gHQYYh7J1O4
翻譯了Unity官方十一年前的一篇Blog:《.mod in Unity》
文章的中文翻譯可以戳原問(wèn)答查看。
幾個(gè)常用Tracker音樂(lè)制作軟件的網(wǎng)站鏈接:OpenMPT,MilkyTracker,schismtracker。有興趣的朋友可以嘗試一下用這種古老的格式創(chuàng)作音樂(lè),可以做到既不犧牲音質(zhì)也不占用多少空間。
關(guān)于進(jìn)一步的音頻優(yōu)化技巧,個(gè)人比較推薦刷一遍Wwise的251認(rèn)證課程內(nèi)容,免費(fèi)而且實(shí)際上都是些通用的技巧:Courses
感謝Icarus@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
LightProbe的信息存在哪兒? -- UWA問(wèn)答:幫助開發(fā)者找到更好的答案
Rendering
Q:場(chǎng)景中的LightProbe信息是保存在lightingData.asset文件中嗎?
A1:如果要保存,可以考慮這樣存:
AssetDatabase.CreateAsset(Instantiate(LightmapSettings.lightProbes), “Assets/lightProbe.asset”);
感謝蕭小俊@UWA問(wèn)答社區(qū)提供了回答
A2:不確定,lightingData.asset中主要存放Lightmap的對(duì)應(yīng)關(guān)系,但LightProbe是否也在里面就不確定了。
感謝OCEAN@UWA問(wèn)答社區(qū)提供了回答
A3:對(duì)于LightProbes更多的操作可以參考這篇文章:《聊聊LightProbe原理實(shí)現(xiàn)以及對(duì)LightProbe數(shù)據(jù)的修改》
感謝Xuan@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
LightProbe的信息存在哪兒? -- UWA問(wèn)答:幫助開發(fā)者找到更好的答案
20210927
更多精彩問(wèn)題等你回答~
封面圖來(lái)源于網(wǎng)絡(luò)
今天的分享就到這里。當(dāng)然,生有涯而知無(wú)涯。在漫漫的開發(fā)周期中,您看到的這些問(wèn)題也許都只是冰山一角,我們?cè)缫言赨WA問(wèn)答網(wǎng)站上準(zhǔn)備了更多的技術(shù)話題等你一起來(lái)探索和分享。歡迎熱愛(ài)進(jìn)步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官網(wǎng):www.uwa4d.com
官方技術(shù)博客:blog.uwa4d.com
官方問(wèn)答社區(qū):answer.uwa4d.com
UWA學(xué)堂:edu.uwa4d.com
官方技術(shù)QQ群:793972859(原群已滿員)
總結(jié)
以上是生活随笔為你收集整理的TextMeshPro备用字体疑问的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java编程思想--final关键字
- 下一篇: Python 从零开始制作自己的声音 -