Unity通用框架搭建(四) 快取池設計

2021-10-12 07:35:34 字數 2538 閱讀 7707

前面一文基於addressable的資源載入更新記錄了資源的載入,本文將緊貼資源的載入,結合設計模式中的享元模式的理念設計物件快取池,避免在遊戲過程中頻繁的進行建立和銷毀的工作。

在基於addressable的資源載入更新一文中有提到快取池的結構,主要分為以下幾大模組:

private

class

cachelist

}///

/// 可以使用的快取物件的數量

///

public

int cachescount

}///

/// 新增使用項

///

///

public

void

addreference

(t t)

}///

/// 從快取池中取出乙個項使用

///

///

public

tpop()

else

cachelist's caches is empty but use pop"

, prefab.name));

}}///

/// 使用完成之後放回快取池

///

///

public

void

push

(t t)

public

void

delete

(t t)

///

/// 使用計算

///

internal

void

initinfomation()

public

void

clearcaches

(dictionary

lookup)

foreach

(var

obj in

this

.references)

this

.caches.

clear()

;this

.references.

clear()

; prefab =

null;if

(isaddressableassets)

addressablemanager.instance.

unloadasset

(address);}

///

/// 清理多餘的快取資源

///

///

public

list

cleancache()

return list;

}return

null;}

}

為方便不同的資源型別復用快取池的邏輯,這裡將採用泛型來實現快取的邏輯,將cachelist類設計為addressablepool的嵌入類型別。addressablepool負責判斷載入邏輯是使用快取池的物件還是重新建立新的物件。

public

void

addtemplate

(string

address,

unityengine.object obj,

bool

isaddressabel=

true

,float

exceed = addressablemanager.exceed)

else

}

在介面上直接傳入模板(gameobject),也能使用這個快取池的方法(在飄提示文字的時候經常用到),如果是需要載入,則在載入完成之後也呼叫該方法,只需要用個標記來區分是載入的模板還是外部直接傳入的模板(資源清理時,載入的模板需要呼叫釋放介面。介面上直接傳入的則不用)。

public

void

loadasset

(string

address,

system.action

oncomplete,

float

exceed = assetpoolmanager.exceed)

else

}else

else}}

else

loadcallback.

remove

(address);}

,()=>);

}}}

private

void

cleancache()

}}list<

string

>

deletelist =

newlist<

string

>()

;foreach

(var

info in

this

.pools)

}foreach

(var

info in deletelist)

}

Unity 優化快取池

1.給放入快取池的gameovject設定父節點 using system.collections using system.collections.generic using unityengine 快取池模組 1.dictionary list 2.gameobject和resources 兩個...

Unity 通用 物件池管理

一般情況下我們使用物件池是物體的建立和管理。但在很多情況下需要批量建立的物體需要做一些邏輯處理,這樣我們需要記錄物件池對應的資料狀態。所以我們就直接把物件作為管理物件,這樣我們可以在物件裡面做一些邏輯處理還能便於物體管理。作為物件管理類,那麼我們必須要乙個同乙個父類作為管理的類別。在父類裡面包含一些...

Unity搭建簡易UI框架之美

在unity專案開發中,ui模組的開發往往佔據了很大一部分工作,部分遊戲甚至絕大部分的工作都是在ui上,如何高效管理各種介面,下面就給大家分享一套高效易用的ui框架。首先,我們定義乙個panelbase類,作為所有panel的父類,在這個類裡,我們可以給panel定義一套生命週期 初始化 publi...