Skip to content

对象池

简介

对象池是一种用于优化内存管理和性能的重要组件。它通过复用对象来减少内存分配和垃圾回收,从而提高游戏性能。

GameObject对象池

核心功能

GameObjectPoolHelper 是一个用于管理 Unity GameObject 对象池的静态工具类,主要提供以下功能:

  1. 对象池管理

    • 使用字典存储多个对象池
    • 支持同步和异步初始化
    • 支持自动扩容机制
  2. 对象获取与回收

    • 支持同步/异步方式获取对象
    • 自动管理对象的激活状态
    • 智能回收机制

主要API

1. 初始化对象池

csharp
// 同步初始化
GameObjectPoolHelper.InitPool(string poolName, int size, PoolInflationType type = PoolInflationType.DOUBLE);

// 异步初始化
await GameObjectPoolHelper.InitPoolWithPathAsync(string poolName, string assetPath, int size, PoolInflationType type = PoolInflationType.DOUBLE);

2. 获取对象

csharp
// 同步获取
GameObject obj = GameObjectPoolHelper.GetObjectFromPool(string poolName, bool autoActive = true, int autoCreate = 0);

// 异步获取
GameObject obj = await GameObjectPoolHelper.GetObjectFromPoolAsync(string poolName, string assetPath, bool autoActive = true, int autoCreate = 0);

3. 回收对象

csharp
// 回收GameObject
GameObjectPoolHelper.ReturnObjectToPool(gameObject);

// 回收Transform
GameObjectPoolHelper.ReturnTransformToPool(transform);

使用示例

csharp
// 1. 初始化对象池
GameObjectPoolHelper.InitPool("EnemyPool", 10);

// 2. 获取对象
GameObject enemy = GameObjectPoolHelper.GetObjectFromPool("EnemyPool");

// 3. 使用对象
enemy.transform.position = Vector3.zero;

// 4. 回收对象
GameObjectPoolHelper.ReturnObjectToPool(enemy);

异步使用示例

csharp
// 1. 异步初始化对象池
await GameObjectPoolHelper.InitPoolWithPathAsync("EnemyPool", "Enemy", 10);

// 2. 异步获取对象
GameObject enemy = await GameObjectPoolHelper.GetObjectFromPoolAsync("EnemyPool", "Enemy");

// 3. 使用对象
enemy.transform.position = Vector3.zero;

// 4. 回收对象
GameObjectPoolHelper.ReturnObjectToPool(enemy);

特性说明

1. 自动扩容

  • DOUBLE: 容量不足时翻倍扩容
  • INCREMENT: 容量不足时增量扩容

2. 自动激活

  • 获取对象时可选择是否自动激活
  • 回收时自动处理对象状态

最佳实践

使用建议

  1. 初始化策略

    • 根据实际需求预估初始池大小
    • 选择合适的扩容策略
  2. 性能优化

    • 预热常用对象池
    • 避免频繁的池容量调整
  3. 资源管理

    • 及时回收不用的对象
    • 正确管理异步加载的资源

注意事项

WARNING

  1. 回收对象时确保对象具有 PoolObject 组件
  2. 异步操作需要正确处理等待时机
  3. 注意内存泄漏问题,确保对象被正确回收

技术支持

获取帮助

  • 💬 加入QQ群讨论交流(ET框架群) : 474643097
  • ⭐ 在GitHub上关注项目获取最新更新

Released under the MIT License.