如何定位游戲發(fā)熱問(wèn)題

1)如何定位游戲發(fā)熱問(wèn)題

2)Unity獲取指定腳本的引用對(duì)象

3)如何知道打包時(shí)的一個(gè)Shader有多少變體

4)如何優(yōu)化Font.CacheFontForText頻繁造成的耗時(shí)峰值


這是第300篇UWA技術(shù)知識(shí)分享的推送疑枯。今天我們繼續(xù)為大家精選了若干和開(kāi)發(fā)儡嘶、優(yōu)化相關(guān)的問(wèn)題,建議閱讀時(shí)間10分鐘,認(rèn)真讀完必有收獲山害。

UWA 問(wèn)答社區(qū):answer.uwa4d.com

UWA QQ群2:793972859(原群已滿員)

Performance

Q:目前項(xiàng)目的發(fā)熱問(wèn)題很頭疼遣疯,2D游戲偎窘,基于TileMap蝇闭、SpriteRenderer和UGUI的渲染,關(guān)閉了垂直同步躏将,TargetFrameRate設(shè)置為60锄弱。Android和iOS上發(fā)熱都很嚴(yán)重,而且在比較好的機(jī)型(比如iPhone 12這種)祸憋,發(fā)熱現(xiàn)象甚至更明顯会宪。

跟大部分情況不同,發(fā)熱并沒(méi)有怎么影響幀率蚯窥,在大部分機(jī)型上掸鹅,幀率都不是問(wèn)題塞帐,連iPhone 8機(jī)型,都能60幀跑滿巍沙。

在Unity Profile和Xcode都進(jìn)行過(guò)性能分析葵姥,CPU最明顯的熱點(diǎn)函數(shù)就是Spine的骨骼動(dòng)畫(huà)更新計(jì)算。然而到一個(gè)沒(méi)有骨骼動(dòng)畫(huà)的場(chǎng)景赎瞎,發(fā)熱現(xiàn)象稍好點(diǎn)牌里,但還是比預(yù)期的要燙不少(場(chǎng)景中除了地面和一些靜態(tài)貼圖颊咬,基本就沒(méi)有多少東西)务甥。

另一個(gè)比較普遍的發(fā)熱點(diǎn)是網(wǎng)絡(luò)測(cè)試,在某場(chǎng)景關(guān)閉網(wǎng)絡(luò)后喳篇,發(fā)熱依然嚴(yán)重敞临。甚至啟動(dòng)游戲,停留在登錄界面一會(huì)兒麸澜,發(fā)熱現(xiàn)象都比別的游戲更明顯挺尿。

猜測(cè)是否由于每幀的頂點(diǎn)數(shù)量過(guò)多造成的,在游戲中Unity的Status面板炊邦,頂點(diǎn)數(shù)量Verts達(dá)到了40KB编矾,三角形Tris也有幾乎20KB∧俸Γ看起來(lái)很多窄俏,但我不太清楚當(dāng)前主流游戲這個(gè)數(shù)值的級(jí)別大概是多少。而且碘菜,頂點(diǎn)和三角形的數(shù)量很難解釋登錄界面依然容易發(fā)熱凹蜈,畢竟登錄界面這些數(shù)值不可能很高。

自己也做了很多測(cè)試了忍啸,實(shí)在搞不清楚問(wèn)題究竟在哪兒仰坦,Unity是還有什么特別需要優(yōu)化的,針對(duì)發(fā)熱的點(diǎn)嗎计雌?

A1:可以用Xcode抓幀看看帶寬悄晃,Load Store Action是否合理。

感謝littlesome@UWA問(wèn)答社區(qū)提供了回答

A2:以下是我的建議:

1. iPhone 8上跑滿60幀凿滤,證明CPU妈橄、GPU都沒(méi)有到達(dá)瓶頸,消耗在較為合理的范圍鸭巴。推薦在Unity Profiler看一下CPU端的消耗眷细,以及查看一下DrawCall數(shù)量。

2. 推薦使用FrameDebugger鹃祖,看一下是否有冗余的物體或者后處理在渲染溪椎,尤其是你說(shuō)的啟動(dòng)界面有發(fā)熱。

3. 如果低級(jí)錯(cuò)誤都排查過(guò)了,那么建議看一下是否用了原生的插件校读。

4. 渲染的分辨率是否調(diào)整過(guò)了沼侣,RenderScale的值和FrameDebugger可以查出來(lái)分辨率。

感謝張振東@UWA問(wèn)答社區(qū)提供了回答

A3:關(guān)于發(fā)熱的問(wèn)題歉秫,通常要從幾個(gè)角度排查:CPU壓力(耗時(shí))蛾洛、GPU壓力(耗時(shí)和帶寬,可以考慮降低分辨率看看發(fā)熱問(wèn)題是否會(huì)有改善)和IO等幾個(gè)角度雁芙。從題主的問(wèn)題上看轧膘,耗時(shí)應(yīng)該是沒(méi)問(wèn)題,都能跑滿幀(當(dāng)然60幀本身就是對(duì)發(fā)熱影響比較大的一點(diǎn)兔甘,可以看看限制30幀會(huì)不會(huì)發(fā)熱有下降)谎碍,所以要看看一些隱形的東西是否有問(wèn)題。比如帶寬洞焙,可以用Snapdragon在高通手機(jī)上跑一跑蟆淀。如果帶寬較高,看看紋理的一些設(shè)置是否合理澡匪,比如是否壓縮熔任、是否開(kāi)啟Mipmap,這兩項(xiàng)通常都是需要設(shè)置成開(kāi)啟的唁情。還可以查看是否有不必要的BlitCopy操作疑苔,在URP項(xiàng)目中比較容易出現(xiàn)Copy Color和Copy Depth浪費(fèi)。對(duì)于IO荠瘪,需要看看是否存在子線程里面有頻繁IO的現(xiàn)象夯巷。

感謝Xuan@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:

https://answer.uwa4d.com/question/62910e1ab87a457351669b0c

Script

Q:Unity獲取指定腳本的引用對(duì)象:一個(gè)GameObject上掛載了一個(gè)Script哀墓,這個(gè)Script引用了很多資源趁餐。如何只獲得這個(gè)Script引用的資源呢?AssetDatabase是會(huì)獲取所有的引用篮绰,但是并沒(méi)有做區(qū)分后雷。

A1:有Guid可以使用以下代碼加載:

var assetPath = AssetDatabase.GUIDToAssetPath(guid);

var texture2D = AssetDatabase.LoadAssetAtPath(assetPath);

感謝蕭小俊@UWA問(wèn)答社區(qū)提供了回答

A2:通過(guò)SerializedObject拿到了所有的ObjectReference,然后AssetDatabase.GetAssetPath獲取對(duì)應(yīng)路徑:

感謝題主null@UWA問(wèn)答社區(qū)提供了回答吠各,歡迎大家轉(zhuǎn)至社區(qū)交流:

https://answer.uwa4d.com/question/6291b10cb87a457351670c7e

Shader

Q:有什么方法可以知道打包的時(shí)候的一個(gè)Shader有多少變體臀突?

A:直接使用Unity提供的回調(diào)函數(shù),該函數(shù)會(huì)在Shader被打包(無(wú)論是打AssetBundle包還是Build的時(shí)候)時(shí)自動(dòng)調(diào)用贾漏。

如圖的三個(gè)參數(shù):“shader”表示回調(diào)函數(shù)當(dāng)前在處理的Shader資源候学,”data”是參與編譯的變體列表。所以data.count()就是該Shader資源的(參與編譯的)變體數(shù)量了纵散。所以梳码,只要在回調(diào)函數(shù)邏輯里把這兩個(gè)參數(shù)Log輸出就行了隐圾。

感謝Faust@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:

https://answer.uwa4d.com/question/629d6e39b87a4573517010b0

UGUI

Q:請(qǐng)問(wèn) Font.CacheFontForText頻繁造成耗時(shí)峰值掰茶,該如何優(yōu)化暇藏?

A:可以參考這篇文章:《Unity3D UGUI 優(yōu)化:Font.CacheFontForText》

Font.CacheFontForText是在Text渲染時(shí),當(dāng)對(duì)應(yīng)字體的FontTexture找不到需要渲染的字符時(shí)濒蒋,就會(huì)重新生成FontTexture盐碱,F(xiàn)ontTexture尺寸越大,重新生成這張F(tuán)ontTexture就越耗時(shí)沪伙。

因此為了減少運(yùn)行過(guò)程中該函數(shù)造成的耗時(shí)峰值瓮顽,可以事先渲染所需要的字符,避免在運(yùn)行時(shí)出現(xiàn)重新生成FontTexture焰坪。

使用UWA的GOT Online工具驗(yàn)證了一下上面所提到的解決方案趣倾,結(jié)果對(duì)比如下所示:


優(yōu)化前


優(yōu)化后


優(yōu)化后之所以還是存在部分Font.CacheFontForText的耗時(shí)峰值聘惦,是因?yàn)樵跍y(cè)試后期又渲染了之前FontTexture中沒(méi)有的字符某饰。

感謝宗卉軒@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:

https://answer.uwa4d.com/question/629d6710b87a45735170097b

封面圖來(lái)源于網(wǎng)絡(luò)


今天的分享就到這里善绎。當(dāng)然黔漂,生有涯而知無(wú)涯。在漫漫的開(kāi)發(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(原群已滿員)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鳍置,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子送淆,更是在濱河造成了極大的恐慌税产,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偷崩,死亡現(xiàn)場(chǎng)離奇詭異辟拷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)阐斜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)衫冻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人谒出,你說(shuō)我怎么就攤上這事隅俘《勺希” “怎么了考赛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵惕澎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我颜骤,道長(zhǎng)唧喉,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任忍抽,我火速辦了婚禮八孝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸠项。我一直安慰自己干跛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布祟绊。 她就那樣靜靜地躺著楼入,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牧抽。 梳的紋絲不亂的頭發(fā)上嘉熊,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音扬舒,去河邊找鬼阐肤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛讲坎,可吹牛的內(nèi)容都是我干的孕惜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼晨炕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼衫画!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起府瞄,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤碧磅,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后遵馆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鲸郊,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年货邓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秆撮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡换况,死狀恐怖职辨,靈堂內(nèi)的尸體忽然破棺而出盗蟆,到底是詐尸還是另有隱情,我是刑警寧澤舒裤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布喳资,位于F島的核電站,受9級(jí)特大地震影響腾供,放射性物質(zhì)發(fā)生泄漏仆邓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一伴鳖、第九天 我趴在偏房一處隱蔽的房頂上張望节值。 院中可真熱鬧,春花似錦榜聂、人聲如沸搞疗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)匿乃。三九已至,卻和暖如春休吠,著一層夾襖步出監(jiān)牢的瞬間扳埂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工瘤礁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梅尤。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓柜思,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親巷燥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赡盘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容