Lua實現的物件池,Unity
local PrefabObjectPool = {}
PrefabObjectPool.__index = PrefabObjectPool function PrefabObjectPool.New(prefab,capcity) if prefab == nil then error("[PrefabObjectPool]prefab should not be nil") end local self = {} setmetatable(self,PrefabObjectPool) self.prefab = prefab self.queue = LuaQueue.New() self.usedItems = LuaList.New() self.capcity = capcity return self end -- 預先生成指定個數的物件 -- count 需要生成的個數,最大不能超過池大小,若為空則表示直接將池填充滿 function PrefabObjectPool:Prewarm(count) if count == nil then if self.capcity == nil then error("[PrefabObjectPool]invalid state") else count = self.capcity end elseif count > self.capcity then count = self.capcity end for i=1,count do local obj = GameObject.Instantiate(self.prefab) self:Put(obj) end end -- 回收一個物件到物件池 function PrefabObjectPool:Put(obj) if self.usedItems:Contains(obj) then self.usedItems:Remove(obj) obj:SetActive(false) self.queue:Enqueue(obj) else error("[PrefabObjectPool]invalid state") end end -- 從物件池中獲取一個物件,若池為空的,則從Prefab建立一個新的 -- 當物件到達池上限時,會把最早使用的物件回收並作為新物件返回 function PrefabObjectPool:Get() local obj = nil if self.queue.Count == 0 then if self.usedItems.Count == self.capcity then obj = self.usedItems[0] obj:SetActive(false) self.usedItems:RemoveAt(0) else obj = GameObject.Instantiate(self.prefab) end else obj = self.queue:Dequeue() end self.usedItems:Add(obj) obj:SetActive(true) return obj end -- 將所有被使用的物件全部回收 function PrefabObjectPool:RecycleAll() local count = self.usedItems.Count for i=count-1,0, -1 do local item = self.usedItems[i] self:Put(item) end self.usedItems:Clear() end --清空物件池Destroy function PrefabObjectPool:Clear() self:RecycleAll(); for i = 0, self.queue.Count - 1 do GameObject.Destroy(self.queue:Dequeue()); end self.queue:Clear(); end return PrefabObjectPool
相關推薦
Lua實現的物件池,Unity
local PrefabObjectPool = {}PrefabObjectPool.__index = PrefabObjectPool function PrefabObjectPool.New(prefab,capcity) if prefab == nil t
C++利用智慧指標shared_ptr實現物件池
C++中用new來分配物件,還要顯式的呼叫delete來析構物件,很容易造成記憶體洩露。所以在研究我們遊戲伺服器的程式碼的時候發現,我們將new函式封裝,在物件池上,利用shared_ptr的特性來自動釋放物件,同時實現了一種簡單的GC回收物件的機制。看完
【C++11】實現物件池
物件池 物件池顧名思義,就是存放一堆物件的池,目前一般的實現方式大多都是如下思路: 初始化建立一些系列(或者從外部載入) 從物件池取出一個物件使用 用完之後返回物件池 物件池有很多場景都可以使用,例如:一個物件構造很消耗時間,又或者一些物件被很頻繁的使
Unity物件池的實現
物件池是一個單例類: using System.Collections; using System.Collections.Generic; using UnityEngine; public class ObjectPool { private static ObjectPool ins
unity中實現簡單物件池,附教程原理
Unity物件池的建立與使用 本文提供全流程,中文翻譯。 Chinar 堅持將簡單的生活方式,帶給世人!(擁有更好的閱讀體驗 —— 高解析度使用者請根據需求調整網頁縮放比例) Chinar —— 心分享、心創新!助力快速完成 Unity
unity裡, lua 面向物件方式,成員物件有可能殘留的問題。
TaskItemUI = { name = nil, content = nil, schedule = nil, schedulebg = nil, targetObj = nil, taskData = nil, curAimId =
雲風大神部落格中的Lua實現面向物件
在 Lua 中實現面向物件 在 pil 中,lua 的作者推薦了一種方案來實現 OO,比較簡潔,但是我依然覺得有些繁瑣。 這裡給出一種更漂亮一點的解決方案:為了貼程式碼和修改方便,我把它貼在了 wiki 上。 Lua 中實現面向物件 在這個方案中,只定義了一個函式
Unity簡易物件池(集合儲存資料)
1、下面這個程式碼是用list集合建立的簡易物件池,只能儲存一種遊戲物件。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameObjectPoo
Unity簡易物件池
廢話不多說,直奔主題 以下內容如有不恰當的地方,歡迎指正 關於物件池有款外掛 推薦部落格 雨鬆MOMO http://www.xuanyusong.com/archives/2974 什麼是物件池?物件池是用來幹什麼的?網上有很多解釋,這裡主要寫一下自己的理解 物件池,簡而言
Unity中的物件池
什麼是物件池? 為了方便物件的產生和回收,我們使用一個集合來儲存不使用物件,當需要使用該物件時,從集合中取出來,不用時不進行銷燬,而是將其取消啟用,重新存入物件池中。 為什麼要使用物件池? 當一個遊戲需要頻繁的建立和銷燬物件時,為了不增加GC的效能消耗,可以考慮使用回收物件來達到複用的目
【Unity程式設計】Unity3D-使用物件池高效管理記憶體
Unity程式設計標準導引-3.4 Unity中的物件池 本節通過一個簡單的射擊子彈的示例來介紹Transform的用法。子彈射擊本身很容易製作,只要製作一個子彈Prefab,再做一個發生器,使用發生器控制按頻率產生子彈,即克隆子彈Prefab,然後為每個子彈寫上運動邏
【設計模式】之物件池模式--JDBC連線池簡單實現案例
文章目錄 物件池設計模式 物件池設計模式的目標 問題 討論 結構 示例 核驗單 經驗法則 連線池模式示例程式碼 ObjectPool.java
Lua面向物件實現
lua中沒有類的概念,一般所說的類其實就是一個table實現的。關於lua類有兩種實現方式 第一種是在cocos2d-x引擎目錄下圖示檔案 function clone(object) local lookup_table = {} local function _co
【Unity遊戲開發】用C#和Lua實現Unity中的事件分發機制EventDispatcher
一、簡介 最近馬三換了一家大公司工作,公司制度規範了一些,因此平時的業餘時間多了不少。但是人卻懶了下來,最近這一個月都沒怎麼研究新技術,部落格寫得也是拖拖拉拉,週六周天就躺屍在家看帖子、看小說,要麼就是吃雞,唉!真是罪過罪過。希望能從這篇部落格開始有些改善吧,儘量少玩耍
物件池的簡單實現
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class GameInstatie : MonoBehaviour { 6 7 pr
Unity優化篇:物件池的建立與使用。(簡單且實用)
1.物件池是什麼? 物件池是一種Unity經常用到的記憶體管理服務,它的作用在於可以減少建立每個物件的系統開銷。 2.為什麼要使用物件池? 在Unity遊戲開發的過程中經常會建立一些新的物件,如果數量較少還可以接受,如果建立的新物件數量龐大,那麼對記憶體而言是一個極大的
Unity實戰篇:移植遊戲到安卓平臺的注意事項及其例項(四)(物件池概念的引入以及優化)
1.物件池基礎概念的瞭解(必看) 2.針對專案來進行嵌入 using System.Collections; using System.Collections.Generic; using UnityEngine; using Unit
unity遊戲物件池
簡單實現一個遊戲物件池: 物件池的型別,同時也是預設體的名稱: /** * 專案名稱: * 指令碼描述: * 版本: * 日期:#DATE# * 作者:陳超 * */ public clas
Unity之深入分析物件池
首先先分析一下何為物件池,什麼情況下使用:對於遊戲中經常使用而且需要及時銷燬的物件,比如子彈,特效,捕魚遊戲中的魚,甚至音效,這些物件如果使用平常的instantiate方法,是在不停的申請記憶體,而這些物件基本有沒有區別,這樣無疑會消耗我們大量效能。所以物件池為此而生。物件池就是在我們不需要的時候
CocosCreator之KUOKUO帶你利用物件池實現cc.graphics的單步撤銷
本次引擎2.0.5 編輯工具VSCode 目標:畫筆單步撤銷。 方法:物件池儲存節點,通過回收實現單步撤銷。 新建工程:bk白色背景。 新建個空節點:drawManager(便於管理預製體) 然後新建一個空節點,綁上cc.graphi