游戲后期優(yōu)化

1. 概述

1.1 開(kāi)發(fā)中的重點(diǎn)問(wèn)題

兩個(gè)瓶頸

  • Cpu向Gpu發(fā)送指令,每發(fā)送一次數(shù)據(jù),稱為DrawCall(DC)
  • Cpu從硬盤(pán)讀取,處理高并發(fā)與并行計(jì)算(I/O)

1.2 優(yōu)化時(shí)針對(duì)的點(diǎn)

  • Mesh
  • Matirial(紋理,shader)
    以上兩條任意一個(gè)發(fā)生變化,就會(huì)重新產(chǎn)生一個(gè)DC,所以我們優(yōu)化的時(shí)候主要針對(duì)它們

2. UI優(yōu)化

2.1 搭UI的時(shí)候需要注意的問(wèn)題

2.1.1 UI層級(jí)計(jì)算

NGUI的渲染單位是panel,UGUI的渲染單位是Canvas,每建一個(gè)Canvas至少增加一個(gè)DC

  • 如果UI下面沒(méi)有子物體,層級(jí)為0
  • 用了同一個(gè)材質(zhì)球、紋理的UI,可以同一批送去GPU

2.1.2 UI重建

已經(jīng)通過(guò)了DC,后期修改了它的位置
Canvas將子物體的頂點(diǎn)、mesh和material收集起來(lái),發(fā)給GPU

  • 位置盡量不動(dòng)
  • 動(dòng)態(tài)靜態(tài)分離
  • 隱藏的方式
    • setActive = false
    • 移走
    • 不同的層

2.1.3 UI重繪

指重復(fù)的渲染UI,UI沒(méi)有深度,有多少層渲染多少,影響GBuffer

2.2 其他問(wèn)題

  1. 在內(nèi)存允許的情況下,對(duì)于UI界面進(jìn)行緩存
  2. 根據(jù)UI界面的使用頻率,分層處理UI界面
  3. 粒子保持在400以下

3 內(nèi)存優(yōu)化

3.1 三塊內(nèi)存

  • C#程序編碼內(nèi)存
    • 腳本
  • Unity編碼內(nèi)存
    • GameObject中的Mesh和Material
  • 托管堆與非托管堆
    類似C/C++ 中申請(qǐng)內(nèi)存的malloc/new 和釋放內(nèi)存free/delete
    • 安全代碼堆:托管堆
      由C#進(jìn)行計(jì)數(shù)管理
    • 非安全代碼堆:非托管堆
      自己創(chuàng)建的自己釋放

3.2 三塊內(nèi)存的優(yōu)化

  • string與stringBuilder
  • for與foreach
  • updata
  • 盡量減少函數(shù)調(diào)用,如用 x = x > 0 ? x : -x 替換 x = Mathf.Abs(x),減少棧的使用
  • struct賦值,不用整體的拷貝,里面的屬性每條賦值減少內(nèi)存使用
  • 某些函數(shù)可以每幾幀調(diào)用,InvokeRepeating
  • updata中盡量不用臨時(shí)變量,因?yàn)槊繋忌暾?qǐng)釋放,都要做垃圾回收
  • 定時(shí)進(jìn)行垃圾回收 GC.collection
  • 優(yōu)化數(shù)學(xué)運(yùn)算,盡量避免使用float改用int
    • 王者榮耀的幀同步處理方式
    • 樂(lè)觀鎖
  • 將除法轉(zhuǎn)成乘法
  • 壓縮Unity自帶的庫(kù)函數(shù) ios空工程17mb 安卓空工程10mb

4. 模型的優(yōu)化

  • normalmap 和 法線貼圖
    • normalmap:針對(duì)頂點(diǎn)的法線貼圖
    • 法線貼圖:針對(duì)像素的法線

5. Animation優(yōu)化

  • 更改浮點(diǎn)數(shù)
  • 去掉空幀
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文地址 http://www.fx114.net/qa-75-172454.aspx 使用Profiler工具...
    IongX閱讀 6,231評(píng)論 1 11
  • 轉(zhuǎn)載http://wetest.qq.com/lab/view/315.html 移動(dòng)平臺(tái)硬件架構(gòu) 移動(dòng)平臺(tái)無(wú)論是...
    李嘉的博客閱讀 1,924評(píng)論 0 4
  • 一:什么是協(xié)同程序?答:在主線程運(yùn)行時(shí)同時(shí)開(kāi)啟另一段邏輯處理,來(lái)協(xié)助當(dāng)前程序的執(zhí)行。換句話說(shuō),開(kāi)啟協(xié)程就是開(kāi)啟一個(gè)...
    CrixalisAs閱讀 2,221評(píng)論 1 7
  • 一個(gè)三維場(chǎng)景的畫(huà)面的好壞,百分之四十取決于模型,百分之六十取決于貼圖,可見(jiàn)貼圖在畫(huà)面中所占的重要性。在這里我將列舉...
    CXYMichael閱讀 1,932評(píng)論 2 5
  • 管理都成長(zhǎng)進(jìn)階需要四個(gè)成長(zhǎng)階段: 第一:與我們的領(lǐng)導(dǎo)、同事、客戶建立信任; 第二:建立團(tuán)隊(duì)...
    LV_8e13閱讀 575評(píng)論 0 0

友情鏈接更多精彩內(nèi)容