主題

【Unity C#小工具】簡單通用物件池

快樂趴趴鼠夥伴 | 2021-05-06 22:36:15 | 巴幣 48 | 人氣 190

浮出水面一下XD



展示:
(拍謝擷取這麼憋扭,OBS不知道怎麼自由拉視窗擷取)

腳本下載: github(新ㄉ,感謝教授加博士先生的幫助),github(舊的,等等刪掉)
度,Instantiate拼錯,不要懷疑。((懶得改,這樣也不會跟Unity的Instantiate搞混

基本原理是若物件沒有要用了,不是Destory他,而是SetActive(false)藏起來,要用的時候再激活,這樣能避免一直產生GameObject又Destory的垃圾。

之前看一些物件池教學,只對特定物件做物件池管理(例如子彈),所以想說做個簡單的、通用的腳本統一去管理。 原本想說是不是要用到interface,不過最後還是用Object最簡單。

使用方法:
先註冊要管理的物件:
CGManager.RegisterObject("myKey", Instantiate(my_prefab));

要用的時候,取得可用的物件:
GameObject _obj = CGManager.Instanciate("myKey");

不用物件時:
CGManager.Destory(gameObject);   //單純是gameObject.SetActive(false)

不再要用時:
CGManager.Remove("myKey")

創作回應

派大星教授死掉了咩噗
之前我是用dict + queue拉 這樣也是O(1), 但不過就各種做法有各種實務上需求目的...所以也是說作法百百種 https://god-is-number.blogspot.com/2021/05/code-dump.html
2021-05-07 01:04:08
派大星教授死掉了咩噗
發了一個Pull Request給你參考 [e1] https://github.com/Lontoone/MyUnityToolLab/pull/2/commits/93d3935a2b2ff86971d714029a2d52437242de08
2021-05-08 14:09:23
快樂趴趴鼠夥伴
看到了,感謝! 有個疑問是像Instantiate和Destory的輸入與輸出怎不使用GameObject呢? 要求呼叫方先將GameObject轉型成LinkedListNode使用上可能不太方便(? 或這是效能上的捨取?
2021-05-08 14:59:28
派大星教授死掉了咩噗
應該說呼叫方呼叫Instantiate,我會返回LinkedListNode給呼叫方,之後caller要自己保存好這個東東, 之後要還給容器就要用LinkedListNode(不是強制轉型), 因為你想想看LinkedList的實作,本來就是node串接起來的,你要有node裡面的資訊(下一個node的reference, 前一個node的reference)才能讓LinkedList正常運作@@ https://www.geeksforgeeks.org/doubly-linked-list/
2021-05-08 15:04:08
派大星教授死掉了咩噗
沒有linkedListNode內部資訊(next, previous),若只有內部value (這裡你是gameobject), 你就不知道上一個node下一個node是誰, Linkelist也就串不起來...
2021-05-08 15:05:33
派大星教授死掉了咩噗
不想搞linkedlist要不就要用hash (Dictioray或Set)了吧, 像是每個gameObject都給他一個ID (可以用instanceID), 然後用這個當作hash的key, 也就可以快速定位元素在容器的位置(像我貼在上面的實作). 但實際上你還是可以看出, 這點是利用gameObject都有一個instanceID()可以當作額外資訊, 具體而言, 你還是要讓你的value(GameObject)伴隨一些"屬性", 才能快速給容器查找
2021-05-08 15:10:03
快樂趴趴鼠夥伴
感謝,已經更新了, 抱歉之前不太會用git所以忘記回ㄌ
//LinkedListNode<object> to_remove_obj = dicts[_key].Find(obj);
//上面這樣.Find()又要尋找整個Linklist,
//時間依舊O(N), 使用Linkedlist時正確應該是把Node給使用者自行管理

若使用者要自己保管Node有些不方便,所以我新增一個dict,專門保管node,呼叫方法如以前那樣,但處理是用你提供的方法了。感謝!!!
2021-06-18 17:41:55
追蹤 創作集

作者相關創作

更多創作