-
一、Unity使用的資源
1、外部資源:
不是Unity創建,而是外部工具做的模型以及貼圖或通用的格式資源。例如圖片資源、模型資源、動畫資源、視頻和聲音資源。
2、內部資源:
Unity創建的,並且只有放在Unity才能識別。例如腳本、Shader、場景、預設、材質、精靈、動畫控制器、時間線、物理材質等。
-
二、Unity資源導入標准
1、紋理
- 關閉Read/Write 選項的:Read/Write Enabel 選項啟用后, 選擇這個選項將會允許從腳本來訪問紋理數據, 開啟此
選項后, 將會產生紋理數據的副本, 副本會占用內存, 等同於一個紋理數據會有雙倍的內
存消耗。 - 紋理按照平台壓縮格式:RGB32和RGB24等非壓縮格式紋理占用內存較大。帶有OpenGLES3或更高版本的Android的紋理格式應該是astc。另外Android按ETC2,IOS按PVRTC,PC按DXT5
- 過濾模式Filter Mode設置為 Bilinear的紋理:Trilinear 三線性過濾(三線性插值) , 紋理會在不同的 mip 水平之間進行模糊 , 從而增
加 GPU 開銷。 - Sprite紋理關閉Mipmap:Mipmap 開啟后, 內存會是未開啟 Mipmap 的 1.33 倍, 因為 Mipmap 會生成一組長寬依
次減少一倍的紋理序列, 一直生成到 1*1。Mipmap 提升 GPU 效率; 一般用於 3D 場景或角色, UI 不建議開啟。UI用的紋理關閉,3D模型和場景用到的紋理開啟。 - Wrap 模式設置為 Clamp:Wrapmode 使用了 Repeat 模式, 容易導致貼圖邊緣出現雜色
2、模型
- 關閉Read/Write 選項:Read/Write Enabel 選項啟用后, 選擇這個選項將會允許從腳本來訪問網格數據,開啟此選項后,將會產生網格數據的副本,副本會占用內存,等同於一個網格數據會有更多的內存消耗。一個用於呈現,一個用於系統內存中的腳本訪問(如果要進行代碼操作動態合批,就是開啟這個選項)
- Mesh Compression選項:設置為High
- 開啟 OptimizeMesh 選項:對於模型相關, 開啟后, Unity 會對其進行網格優化, 提高。
- Tangent 切線屬性:無必要不導入
- Normal 法線屬性:無必要不導入
- Color 屬性:(頂點色)無必要不導入
- UV2 屬性:常規情況只會用到 UV1, UV2 一般不會用到,無必要不導入
3、音頻
- 長音頻的Load Type用Streaming加載:Streaming 選項開啟后, 音頻加載方式變為邊播放邊讀取,能明顯降低內存,背景音樂使用這種方式。
4、組件
- Animator 組件開啟 OptimizeGameObjects:OptimizeGameObject 可以有效降低動畫開銷
- SkinnedMeshRenderer:不開啟MotionVector,啟用Skinned Motion Vectors將以消耗雙倍內存為代價提高蒙皮網格的精度
- 不可見的 Image 組件:alpha=0 的 Image 組件依然會參與渲染,需要去掉
- 不可見的 RawImage 組件:alpha=0 的 RawImage 組件依然會參與渲染,需要去掉
- 使用了 Outline 組件:使用 Outline 效果會增加 4 倍的頂點數, 造成較高的重建開銷, 可用 shadow 替代。
5、腳本資源
- OnGUI 方法:OnGUI 方法會造成較多的堆內存分配, 耗時也較高, 不建議使用。
- 空的 Update 方法:空 Update 方法在運行依然會被調用, 導致額外的開銷, 建議去除。
- 存在.tag 的調用:.tag 的使用會導致堆內存分配, 建議使用 CompareTag 進行替換。