SceneDropManager = SceneDropManager or BaseClass() local SceneDropManager = SceneDropManager local resMgr = resMgr local Array_New = Array.New function SceneDropManager:__init() SceneDropManager.Instance = self --assetbundle包资源引用列表 self.ref_count_list = {} --资源对象池 self.obj_pool_list = {} --对象池总ab包对象数量 self.obj_pool_ab_count = 0 self.is_load_effect = false end function SceneDropManager:getInstance() if SceneDropManager.Instance == nil then SceneDropManager.Instance = SceneDropManager.New() end return SceneDropManager.Instance end function SceneDropManager:CreateDropEffectToPool() if self.is_load_effect then return end self.is_load_effect = true local effect_res_list = { -- "function_getobj_yellow","function_getobj_yellow","function_getobj_yellow","function_getobj_yellow","function_getobj_yellow","function_getobj_yellow", -- "function_getobj_perple","function_getobj_perple","function_getobj_perple","function_getobj_perple","function_getobj_perple","function_getobj_perple", -- "function_getobj_red","function_getobj_red","function_getobj_red","function_getobj_red" } local load_effect_count = #effect_res_list local cur_effect_index = 1 local function load_effect_func() if cur_effect_index <= load_effect_count then local res = effect_res_list[cur_effect_index] cur_effect_index = cur_effect_index + 1 local function load_call_back(objs, is_gameObject) if objs and objs[0] then local effect_go = is_gameObject and objs[0] or newObject(objs[0]) self:AddObjToPool(self, res, res, effect_go) end setTimeout(load_effect_func,0.1) end local ignore_pool = true lua_resM:loadPrefab(self, res, res, load_call_back, ignore_pool) end end load_effect_func() end --添加游戏对象进入缓存池 通过loadPrefab加载的资源对象 function SceneDropManager:AddObjToPool(ref_tar, abName, resName, gameObject, alpha, is_default_color) if gameObject then --非静态缓存对象 if abName then self:CreateABObjPool(abName) local res_list = self.obj_pool_list[abName]["res_name_list"][resName] if res_list == nil then res_list = Array_New() self.obj_pool_list[abName]["res_name_list"][resName] = res_list end if not IsNull(gameObject) then --放入缓存后减少引用计数 gameObject.transform:SetParent(self.obj_pool_list[abName].container) res_list:PushBack(gameObject) end end end end --添加缓存对象时初始化缓存信息 function SceneDropManager:CreateABObjPool(abName) if not self.obj_pool_container then self.obj_pool_container = UiFactory.createChild(panelMgr:GetParent("SceneObjContainer"), UIType.EmptyObject, "obj_drop_pool_container").transform self.obj_pool_container.gameObject:SetActive(false) end if self.obj_pool_list[abName] == nil then self.obj_pool_ab_count = self.obj_pool_ab_count + 1 self.obj_pool_list[abName] = {res_name_list = {}, container = UiFactory.createChild(self.obj_pool_container, UIType.EmptyObject, abName .. "_container").transform} end end --从缓存池中获取游戏对象 function SceneDropManager:GetObjFormPool(ref_tar, abName, resName) if self.obj_pool_list[abName] and self.obj_pool_list[abName]["res_name_list"][resName] then local gameObject = self.obj_pool_list[abName]["res_name_list"][resName]:PopBack() if gameObject then return gameObject end end end --清除所有缓存池游戏对象,切换场景时调用 function SceneDropManager:ClearAllObjPool() if not self.obj_pool_container then return end destroy(self.obj_pool_container.gameObject, true) self.obj_pool_container = nil self.obj_pool_list = {} self.obj_pool_ab_count = 0 self.is_load_effect = false end