這是第428篇UWA技術(shù)知識分享的推送,精選了UWA社區(qū)的熱門話題,涵蓋了UWA問答、社區(qū)帖子等技術(shù)知識點,助力大家更全面地掌握和學(xué)習(xí)。
UWA社區(qū)主頁:community.uwa4d.com
本期目錄:
- FairyGUI圖標(biāo)文字合批失敗的原因
- 為什么Cubemap的內(nèi)存占用超高
- 如何找到網(wǎng)格某個切面的中心點
- 為什么SafeZone在倒屏后方向相反
UI
Q1:項目現(xiàn)在使用的是FairyGUI,界面中會有一排類似下圖的比較常見的組合按鈕(圖+特效+文字)。
在FrameDebugger中注意到這部分的DrawCall情況有點慘;老項目用UGUI+TMP作類似的UI應(yīng)該是沒有問題都能合的。父節(jié)點FairyBatching是勾了的,圖集是合好了的,圖和圖、文字和文字之間應(yīng)該也沒有互相遮擋覆蓋;考慮到可能是特效穿插的問題,所以運行調(diào)試時直接把特效的節(jié)點刪掉了,還是不行。請問還有什么思路?
A:遇到過類似的問題。首先FairyGUI的結(jié)構(gòu)在導(dǎo)出后應(yīng)該就是固定的了,有可能你運行時做了修改刪掉改掉某些東西,但原來的區(qū)域規(guī)格和UI元素仍然占位。所以這里刪特效、對TextField覆蓋面積的調(diào)試檢查,可能都得請UI同學(xué)幫忙,回到FairyGUI編輯器階段處理和檢查,再重新導(dǎo)出看效果。
Q2:操作了下,確實有變化。但現(xiàn)在又有兩個新問題:
1. 確實導(dǎo)出前就把特效移除有效果,但圖和文字中夾著特效是表現(xiàn)需要,最終不大可能刪,這個是不是就沒什么辦法了?
2. 就算移除了特效,還是發(fā)現(xiàn)只有圖和圖之間合了,文字之間仍然不合。而且這次是確認(rèn)了TextField之間也沒有重疊。這時候看FrameDebugger合批失敗原因變成了超過300個頂點不能動態(tài)合批。請問這個怎么解決呢?
A: 第一個確實想不到什么辦法了。第二個就像FrameDebugger寫的一樣,你若是用了Shadow、Outline這種效果,文字的頂點就會成倍上升,再加上你字一多,就會超了。不過如果你這些表現(xiàn)上都要用的話,也和特效一樣沒什么辦法了。
感謝Faust@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/67fcc756682c7e5cd61bfa57
Memory
Q:在MemoryProfiler里發(fā)現(xiàn)Graphics分類下面Cubemap的內(nèi)存占用有40多MB,比我們項目用的網(wǎng)格都多,這個量正常嗎?
A: 確實高了,尤其移動端游戲很少有必要用這么多。可以看下是不是有些Cubemap單個就占好幾MB。一個Cubemap本質(zhì)是6張Texture 2D,所以一個1024*1024、ASTC4*4格式的資源就占6MB內(nèi)存了。但其實我測下來其規(guī)格對表現(xiàn)的影響很微妙,像我們項目里有些物體上把Cubemap改到128*128、ASTC8*8看上去都沒什么區(qū)別,但內(nèi)存就小到可以忽視。最終也是說服美術(shù)在低分檔上用這版了。
感謝Faust@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/67fcd15d3d306f3e9d594ec4
Script
Q:我想要找到一個網(wǎng)格中某個切面的中心點,有什么實現(xiàn)的思路嗎?
A:提供一種追蹤的方式,大致思路是:
通過Get Component Bounds得到網(wǎng)格包圍球的半徑,乘二以保證追蹤起點足夠遠(yuǎn),得到追蹤的半徑(Float)。
在For Loop中配合Rotate Vector Around Aixs和追蹤半徑來得到足夠多的追蹤點(Float→Vector),它們是LineTrace的起點。
再找到追蹤的終點,就可開始Line Trace(起點和終點還要加上Actor自身的Location,相當(dāng)于Local→World)。
返回的Out Hit中拿到Location便可加到一個新的Vector Array中(這個要是局部變量,這樣每幀得到的都是新的)。
在For Loop的Completed階段用Draw Debug String來顯示內(nèi)容(也可以別的類型),輸出一個白色的x,位置為Get Vector Array Average,即該切面的中心點。
藍(lán)圖如下:
進(jìn)階版:若希望這個切面不只是水平面,還可以換成其它角度。加一個Plane進(jìn)來,藍(lán)圖如下這樣改,旋轉(zhuǎn)Plane即可調(diào)整切面的角度(理論上還可以繼續(xù)優(yōu)化,因為沒把Plane的位移算進(jìn)去)。
藍(lán)圖如下:
該回答由UWA提供,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/67fc7dac3d306f3e9d594ebf
Script
Q:在左右橫屏切換之后,原本設(shè)置的安全區(qū)位置出現(xiàn)了錯位,請問是什么原因呢?
A:該現(xiàn)象確認(rèn)為UE的Bug,已在5.2中解決,可參考:
Unreal Engine Issues and Bug Tracker (UE-170632)
https://issues.unrealengine.com/issue/UE-170632
之前版本不修改源碼解決該問題的方法:在屏幕旋轉(zhuǎn)時,手動觸發(fā)安全區(qū)更新。
實現(xiàn)的關(guān)鍵點包括:
安全區(qū)更新。可以通過全局代理觸發(fā):
獲取屏幕旋轉(zhuǎn)事件。屏幕旋轉(zhuǎn)時會觸發(fā)代理廣播,因此可以將相應(yīng)函數(shù)綁定至該代理:
另外,對于移動平臺,可以直接使用PlatfromGameInstance提供的委托,在藍(lán)圖中綁定相應(yīng)事件:
自己的GI類中可以做類似的實現(xiàn):
基于以上關(guān)鍵點,項目組可根據(jù)自身項目需求進(jìn)行實現(xiàn)。
實現(xiàn)參考:
1. 創(chuàng)建PlaftormGameInstance,并替換為項目使用的GI。
2. 創(chuàng)建UBlueprintFunctionLibrary類,并在其中實現(xiàn)函數(shù),該函數(shù)用來觸發(fā)FCoreDelegates::OnSafeFrameChangedEvent.Broadcast()。
3. 在UI中,實現(xiàn)以下藍(lán)圖,注意其中對函數(shù)庫中更新函數(shù)的調(diào)用需要延遲調(diào)用。
針對該Bug的源碼變化:
5.2版本源碼中的修改:
5.2版本之前:
該回答由UWA提供,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/67fc7e5a3d306f3e9d594ec0
封面圖來源于網(wǎng)絡(luò)
今天的分享就到這里。生有涯而知無涯,在漫漫的開發(fā)周期中,我們遇到的問題只是冰山一角,UWA社區(qū)愿伴你同行,一起探索分享。歡迎更多的開發(fā)者加入UWA社區(qū)。
UWA官網(wǎng):www.uwa4d.com
UWA社區(qū):community.uwa4d.com
UWA學(xué)堂:edu.uwa4d.com
點擊下方名片關(guān)注我們,將我設(shè)為星標(biāo),及時接收小編每日推送哦,性能優(yōu)化不迷路~
近期精彩回顧
繞過新手陷阱,用Unity思維玩轉(zhuǎn)UE5
【厚積薄發(fā)】UE紋理設(shè)置詳解與優(yōu)化指南
【萬象更新】特效的GPU壓力該如何解決?
【學(xué)堂上新】從零打造Unity 3D資源管理與全熱更框架!
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.