直接進入正文,簡單概括,劃重點!!!
堆與棧:
棧存儲較小和短暫的數據,堆存儲較大和較長的數據。
棧是自行維護的,堆需要考慮垃圾回收。
GC方面:
垃圾回收主要是指堆上的內存分配和回收。
觸發機制有3種:1.內存不夠,自動觸發。2.定時觸發(依據平臺)。3.GC強制執行
內存分配流程:當需要獲取一個足夠大的內存塊時,檢測是否有足夠的空閒內存 OFF--》 開始GC,清理廢棄內存(引用不再處於激活狀態),再次檢測 OFF --》擴展內存
GC的隱患:1.堆內存變量或者引用越多,清理越耗時,造成遊戲卡頓。2.頻繁釋放內存, 在很多空餘內存可用下,卻沒有足夠大的內存滿足需要,導致再次申請新內存,直到溢出。
減少隱患的方式:1.重構代碼,減少堆內存的分配。2.緩存,根據具體情況分析(示例:出現重複調用產生堆分配的函數時,應該存儲對這些對象的引用)。3.避免在關鍵時刻觸發,可以在場景加載的時候調用GC。 4.對象池,Unity有插件可用
DC方面:
Draw call指openGL的描繪次數。
繪圖次序:
假設如果有兩個model,那麼需要
設置顏色→繪圖方式→頂點座標A→繪製→結束。
設置顏色→繪圖方式→頂點座標B→繪製→結束。
高速繪圖就是,在儘量不改變openGl狀態值的情況下,用一次draw call完成所有繪製。
設置顏色→繪圖方式→頂點座標A+頂點座標B→繪製→結束 。就更加有效率。
優化DC:
1.繪製調用批處理(動態合批靜態合批)
前提:相同材質的物體纔可以進行批處理,如果僅僅是紋理不同,通過“紋理合並”成一張大的紋理。
動態批處理:動態物體共用相同的材質,Unity會自動進行批處理。約束條件:一定頂點數量的網格物體,不要使用縮放尺度,需要相同材質,不能有多通道shader等等...
靜態批處理:物體不移動,並且擁有相同的材質,將GameObject的Static複選框打勾。目前只支持Unity iOS Advanced。
2.遮擋剔除算法和視錐體剔除,適用於複雜的靜態場景
3.調整渲染順序,場景中的東西,使用Z軸來進行空間的劃分,例如背景層,特效層1,人物層,特效層2。
4.打包圖集,功能角度進行劃分,控制圖集的大小。
5.特效清理,用完立刻回收,殘餘的特效會影響性能。
渲染流水線:
應用階段:cpu負責,由開發者準備好數據(攝像機,模型,光源)並設置好渲染狀態(材質,紋理,shader類型),輸出渲染所需要的圖元。
幾何階段:gpu負責,把上個階段傳過來的圖元進行逐頂點,逐多邊形的操作。把頂點座標從模型空間經過一系列轉換最終到屏幕空間,光柵器則處理其屏幕空間二維頂點座標,頂點深度、着色等數據。
光柵化階段:gpu負責,對上個階段的逐頂點數據(紋理座標、頂點顏色等)進行插值,再逐像素處理,並決定哪些像素能繪製在屏幕上,並計算他們的顏色。
上圖中綠色表示該流水線是完全可編程控制的,黃色表示可以配置但不可以編程的,藍色表示GPU固定實現的,開發者沒有控制權。虛線框表示該shader是可選的。
網絡協議:
名稱 層次 功能
物理層 1 實現計算機系統與網絡間的物理連接
數據鏈路層 2 進行數據封裝和數據鏈接的建立 (集線器和交換機)
網絡層 3 提供數據通過的路由 (路由器)
傳輸層 4 提供可靠的數據傳輸 (TCP,UDP)
會話層 5 利用傳輸層來提供會話服務,建立和中止連接
表示層 6 數據語法轉換,解決不同數據表示方法的差異
應用層 7 提供應用程序執行通信所需要的協議和功能(HTTP)
MVC框架:
定義:爲模型(model)-視圖(view)-控制器(controller)的縮寫,強制性的使應用程序的輸入、處理和輸出分開。
Model(模型):數據模型,包含數據和行爲,主要提供了模型數據查詢和狀態更新等功能。
View(視圖):一般就是用戶界面。
Controller(控制器):委託模型進行處理,對數據模型進行監聽,並把返回的模型數據發送給視圖。
數學:
貝塞爾曲線
定義:一般用在計算機 圖形學和 圖像處理。可以用來創建平滑的曲線的道路、 彎曲的路徑,例如祖瑪遊戲、 射門投籃等等。
數據結構與算法:
字典樹
定義:用於處理大量字符串,利用公共前綴字段去查詢,以減少無謂的字符串的比較。
作用:可用於大量字符串的存儲與排序,快速查詢某字符串是否已存在或出現過幾次。