【unity優化一】性能檢測工具

1、Unity內置分析器Profiler、Xcode分析工具

2、“優化”的定位:手機比PC有更多性能瓶頸,對遊戲軟件有嚴格要求。項目開發過程中,性能優化是最重要、最艱難、最容易被忽略、最可能導致失敗的東西,是程序員提升自己時必須掌握的知識。注重對圖形學和引擎內部的瞭解、實踐、思考總結。

3、Profiler

   1)CPU Usage
WaitForTargetFPS:
       Vsync(垂直同步)功能所,即顯示當前幀的CPU等待時間
     Overhead:
       Profiler總體時間-所有單項的記錄時間總和。用於記錄尚不明確的時間消耗,以幫助進一步完善Profiler的統計。
Physics.Simulate:
       當前幀物理模擬的CPU佔用時間。
     Camera.Render:
       相機渲染準備工作的CPU佔用量
RenderTexture.SetActive:
       設置RenderTexture操作.
       底層實現:1.比對當前幀與前一幀的ColorSurface和DepthSurface.
                2.如果這兩個Buffer一致則不生成新的RT,否則則生成新的RT,並設置與之相對應的Viewport和空間轉換矩陣.
     Monobehaviour.OnMouse_ :
       用於檢測鼠標的輸入消息接收和反饋,主要包括:SendMouseEvents和DoSendMouseEvents。(只要Edtor開起來,這個就會存在)
     HandleUtility.SetViewInfo:
       僅用於Editor中,作用是將GUI和Editor中的顯示看起來與發佈版本的顯示一致。
GUI.Repaint:
       GUI的重繪(說明在有使用原生的OnGUI)
Event.Internal_MakeMasterEventCurrent:
       負責GUI的消息傳送
     Cleanup Unused Cached Data:
       清空無用的緩存數據,主要包括RenderBuffer的垃圾回收和TextRendering的垃圾回收。
          1.RenderTexture.GarbageCollectTemporary:存在於RenderBuffer的垃圾回收中,清除臨時的FreeTexture.
          2.TextRendering.Cleanup:TextMesh的垃圾回收操作
Application.Integrate Assets in Background:
       遍歷預加載的線程隊列並完成加載,同時,完成紋理的加載、Substance的Update等.
     Application.LoadLevelAsync Integrate:
       加載場景的CPU佔用,通常如果此項時間長的話70%的可能是Texture過長導致.
     UnloadScene:
       卸載場景中的GameObjects、Component和GameManager,一般用在切換場景時.
     CollectGameObjectObjects:
       執行上面M項的同時,會將場景中的GameObject和Component聚集到一個Array中.然後執行下面的Destroy.
     Destroy:
       刪除GameObject和Component的CPU佔用.
     AssetBundle.LoadAsync Integrate:
       多線程加載AwakeQueue中的內容,即多線程執行資源的AwakeFromLoad函數.
     Loading.AwakeFromLoad:

       在資源被加載後調用,對每種資源進行與其對應用處理.

   2)GPU Usage

     Device.Present:
       device.PresentFrame的耗時顯示,該選項出現在發佈版本中.
     Graphics.PresentAndSync:
       GPU上的顯示和垂直同步耗時.該選項出現在發佈版本中.
     Mesh.DrawVBO:
       GPU中關於Mesh的Vertex Buffer Object的渲染耗時.
     Shader.Parse:
       資源加入後引擎對Shader的解析過程.
     Shader.CreateGPUProgram:

       根據當前設備支持的圖形庫來建立GPU工程.

   3)Memory Profiler

     Used Total:
       當前幀的Unity內存、Mono內存、GfxDriver內存、Profiler內存的總和.
     Reserved Total:
       系統在當前幀的申請內存.
     Total System Memory Usage:
       當前幀的虛擬內存使用量.(通常是我們當前使用內存的1.5~3倍)
     GameObjects in Scene:
       當前幀場景中的GameObject數量.
     Total Objects in Scene:
       當前幀場景中的Object數量(除GameObject外,還有Component等).
     Total Object Count:

       Object數據 + Asset數量

    4)Detail Memory Profiler

     Assets:
      Texture2d:記錄當前幀內存中所使用的紋理資源情況,包括各種GameObject的紋理、天空盒紋理以及場景中所用的Lightmap資源.
     Scene Memory:  
 記錄當前場景中各個方面的內存佔用情況,包括GameObject、所用資源、各種組件以及GameManager等(天般情況通過AssetBundle加載的不會顯示在這裏).
     Other:
       ManagedHeap.UseSize:代碼在運行時造成的堆內存分配,表示上次GC到目前爲止所分配的堆內存量.
       SerializedFile(3):
       WebStream:這個是由WWW來進行加載的內存佔用.
       System.ExecutableAndDlls:不同平臺和不同硬件得到的值會不一樣。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章