ObjectPool V2 插件

前篇 : Object Pool 的小練習.

插件下載點 : 20200615_ObjectPool
這天放假, 就把它做到 Plugin API 級別.
為了支援完全動態生成, 加上了 PoolManager 也優化了一點內存, 及兼顧了 Photon 的接合, 不過主體思路沒有甚麼改變.
不過代碼及測試有點多就不分享代碼, 改為直接發包了.
插件下載點 : 20200615_ObjectPool

 

檔案 Import 後附有三個測試 Scene

  1. TestPoolIdDuplicate
  2. TestPoolLimitControl
  3. TestShooting

ObjectPool 功能

  • 支援預載 Preload prefab.
    • 個別預載設定 : 每個 Prefab -> PrefabSetting
    • 延時預載
    • 預載間隔單位:幀
    • 預載物件數量
    • 延遲 Awake() :- 到第一次呼叫 Spawn()
  • 動態建立物件池
    • PoolManager.GetOrCreatePool(“Name”);
    • 相同名稱時自動修改 GameObject.name 維持名稱的單一性.
  • Spawn()
    • 使用 預載設定的字串 為參數 – 用作跨網同步 (e.g. photon)
    • 使用 Prefab – GameObject 為參數
      • 可指定物件為父系層級
      • 可以動態更改於 ObjectPool 中的 PrefabSetting
    • PrefabSetting
      • 指定物件池的容量 = 產生上限
      • 達到上限時忽略 Spawn 要求 -> 回傳 Null
      • Despawn 時的設定
  • Despawn()
    • PrefabSetting
      • 停留在目前父層級 或 回收並成為 ObjectPool 子物件
  • ObjectPool.IsSpawned(GameObject)
    • 檢查物件是否被已被物件池產生
  • 擴展用的 ISpawnObject
    • OnSpawned 廣播(Broadcast)
    • OnDespawned 廣播(Broadcast)

預先做的兩個常用 ISpawnObject 的小工具

  • SelfDespawn.cs 是在特定時間後自動銷毀 Despawn 的工具
  • DespawnOnCollision.cs 是在接觸到的 Trigger / Collider 後會觸發銷毀的工具
    • 可指定某個 GameObject.tag 符合才觸發.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料