1)背包優化問題
2)Unity 2019在華為手機上2倍抗鋸齒不生效
3)關於libunity.sym.so符號表的問題
4)Navmesh合並成一個新的NavMesh的方法
5)Prefab掛自己寫的管理器腳本卻無法打包
這是第260篇UWA技術知識分享的推送。今天我們繼續為大家精選了若干和開發、優化相關的問題,建議閱讀時間10分鍾,認真讀完必有收獲。
UWA 問答社區:answer.uwa4d.com
UWA QQ群2:793972859(原群已滿員)
UGUI
Q:經常會有人問背包卡頓的原因分析,那到底是有多少種卡頓的原因以及優化的方式呢?
A1:推薦先看一下官方的UGUI課程:《Unity UI模塊優化案例精講》
對於沒有優化過的背包,最大的消耗在於物品的銷毀與實例化。
感謝潛行醫生-577493@UWA問答社區提供了回答
A2:以下是我想到的一些點,期待其他大神補充更多的內容。項目中實際遇到的具體問題還需要具體分析,通過性能工具進行定位消耗過高的地方,然后有針對性地進行合理優化。
1.對於未優化的背包,列表滾動過程中,Cell的加載和銷毀會造成卡頓。
解決辦法:使用無限滾動列表Tableview這種控件,使Cell可以進行復用,避免物體的頻繁實例化和銷毀。2.背包打開一瞬間,加載了很多個格子物品進來,造成卡頓和內存沖高,GC等問題。
解決辦法:分幀加載,控制一幀實例化的Cell個數,避免在同一幀內大量創建格子物品。針對資源Load過程中的卡頓,可以采用提前預加載資源到內存的方式。3.背包刷新時卡頓,大量的格子監聽某個事件,刷新時可能造成卡頓。
解決辦法:用臟標志的方式去刷新,不該刷新的部分不刷新。4.Cell上的圖片,粒子特效顯示等設計不合理造成DrawCall過高。
解決辦法:這個需要結合具體的項目和設計方案進行分析和優化。
感謝馬三小伙兒@UWA問答社區提供了回答
A3:推薦一下FairyGUI這套UI系統,FairyGUI的List只要SetVirtual就行了:https://www.fairygui.com/docs/editor/list
感謝蕭小俊@UWA問答社區提供了回答
Rendering
Q:Unity 2019上,工程同時使用PostProcessing后處理功能加上抗鋸齒,在華為手機上2倍抗鋸齒是沒效果的。
開啟后處理+抗鋸齒在手機上的效果圖:

關閉后處理+抗鋸齒在手機上的效果圖:

A:測試機型榮耀Play 4T在開啟后處理的情況下,2x MSAA不會生效,但是4x和8x會生效。
使用Graphics Analyzer分析真機上的gl調用發現,MSAA生效需要在場景加載前調用 glFramebufferTexture2DMultisampleEXT接口,但是在開啟后處理功能並且設置為2x MSAA的情況下,引擎調用的卻是glFramebufferTexture2D接口,導致抗鋸齒在場景中沒有生效。
![]()
但是測試小米8和Oppo A32在開啟后處理的情況下設置為2x MSAA並且生效。猜測是引擎方面針對不同的GPU硬件做了一些設置,現在只能在性能允許的情況下嘗試開啟4x MSAA來達到抗鋸齒效果。
附件(可戳原問答下載)中有兩個測試APK包和一些真機測試結果。榮耀Play 4T上不開啟后處理的情況下,單純的2x MSAA和4x效果幾乎一模一樣。
感謝宗卉軒@UWA問答社區提供了回答
Android
Q:項目采用的是IL2CPP模式打包,選取arm64-v8a和armeabi-v7a兩個版本,沒有開啟Strip Engine Code選項,Unity打包版本是2018.3.6f1
現在線上的包有ANR報錯如下:
#00 pc 000000000004b7cc /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28) #00 pc 000000000004f680 /apex/com.android.runtime/lib64/bionic/libc.so (__futex_wait_ex(void volatile*, bool, int, bool, timespec const*)+144) #00 pc 00000000000b2120 /apex/com.android.runtime/lib64/bionic/libc.so (NonPI::MutexLockWithTimeout(pthread_mutex_internal_t*, bool, timespec const*)+688) #00 pc 00000000009fe7b4 /data/app/~~AxXJ-H5OqAWLfQK2almqqg==/com.saiyun.avgchapters.episodestories.romance-HeZPf9aJrCJYoKrQ20DOrg==/lib/arm64/libunity.so (???) #00 pc 00000000009fe778 /data/app/~~AxXJ-H5OqAWLfQK2almqqg==/com.saiyun.avgchapters.episodestories.romance-HeZPf9aJrCJYoKrQ20DOrg==/lib/arm64/libunity.so (???) #00 pc 0000000000508938 /data/app/~~AxXJ-H5OqAWLfQK2almqqg==/com.saiyun.avgchapters.episodestories.romance-HeZPf9aJrCJYoKrQ20DOrg==/lib/arm64/libunity.so (???) #00 pc 0000000000347f1c /data/app/~~AxXJ-H5OqAWLfQK2almqqg==/com.saiyun.avgchapters.episodestories.romance-HeZPf9aJrCJYoKrQ20DOrg==/lib/arm64/libunity.so (???) #00 pc 00000000006e3638 /data/app/~~AxXJ-H5OqAWLfQK2almqqg==/com.saiyun.avgchapters.episodestories.romance-HeZPf9aJrCJYoKrQ20DOrg==/lib/arm64/libunity.so (???) at com.unity3d.player.UnityPlayer.nativeInjectEvent (Native method) at com.unity3d.player.UnityPlayer.injectEvent (unavailable) at com.unity3d.player.UnityPlayer.onTouchEvent (unavailable) at android.view.View.dispatchTouchEvent (View.java:15199) at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3914) at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3578)
查看報錯的機型Samsung Galaxy S10,使用的是arm64運行的游戲,我嘗試使用PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\arm64-v8a下的libunity.sym.so文件查找函數名,但是提示找不到方法。
這是什么原因?我需要用哪個符號表才能查找函數名呢?
A:建議你試試toolchains/x86_64-4.9/prebuilt/darwin-x86_64/bin/x86_64-linux-android-addr2line這個路徑。
感謝Lim@UWA問答社區提供了回答
NavMesh
Q:這邊有一個需求,將一張很大的地圖分割成若干小塊,目的是為了方便美術操作,然后將單個小塊地圖烘焙生成NavMesh。Unity提供的NavMeshLink要配點,不方便操作。請問還有其他思路去操作嘛?
A:我覺得,Unity的原生系統給的API還是太少了,你可以試下這個插件 A* Pathfinding Project Pro,它是一個C#版本的完整RecastNavigation實現,還包含傳統的Grid尋路,你可以控制的更多;至於這個動態的NavMesh,你可以考慮試試 TileMesh,具體可以查看RecastDemo中的TileMesh,可以逐個Tile的按需創建。
感謝Yaukey@UWA問答社區提供了回答
Build
Q:各位有沒有碰到過在場景中的一個Prefab掛了一個自己寫的管理器腳本,然后打包打不進去的情況:script asset xx.cs can not be include in assetbundle
A:檢查一下這個CS文件中是否有包含Editor的代碼,或者Define Symbols導致Unity無法識別你的Core。
感謝蕭小俊@UWA問答社區提供了回答
20210726
更多精彩問題等你回答~
1.Vulkan與OpenGL的選擇是否會對內存大小產生影響
2.關於Unity出AAB包的問題
3.RTS 手游技術難點
封面圖來源於:Inventory System
Unity庫存系統。
今天的分享就到這里。當然,生有涯而知無涯。在漫漫的開發周期中,您看到的這些問題也許都只是冰山一角,我們早已在UWA問答網站上准備了更多的技術話題等你一起來探索和分享。歡迎熱愛進步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官網:www.uwa4d.com
官方技術博客:blog.uwa4d.com
官方問答社區:answer.uwa4d.com
UWA學堂:edu.uwa4d.com
官方技術QQ群:793972859(原群已滿員)