首页 > 代码库 > Unity3d 实用的PoolManager教程
Unity3d 实用的PoolManager教程
先看Example Scene
CreationExample 脚本
/// <description>/// An example that shows the creation of a pool./// </description>public class CreationExample : MonoBehaviour { /// <summary> /// The prefab to spawn from. /// </summary> public Transform testPrefab; public string poolName = "Creator"; public int spawnAmount = 50; public float spawnInterval = 0.25f; private SpawnPool pool; /// <summary> /// 设置池的基本参数. /// </summary> private void Start() { this.pool = PoolManager.Pools.Create(this.poolName); // 将这个池设为当前物体的子物体
this.pool.group.parent = this.transform; // 设置位置角度
this.pool.group.localPosition = new Vector3(1.5f, 0, 0); this.pool.group.localRotation = Quaternion.identity; // 创建一个预制池,不需要预先装载
// 如果有没特别的需求不需要设置,池会采用默认设置 只调用Spawn()方法即可
// 下面的设置可以跳过
PrefabPool prefabPool= new PrefabPool(testPrefab); prefabPool.preloadAmount = 5; // 默认参数 预先加载的预制数量 下面的参数 我会放在下文详细解释
prefabPool.cullDespawned = true; prefabPool.cullAbove = 10; prefabPool.cullDelay = 1; prefabPool.limitInstances = true; prefabPool.limitAmount = 5; prefabPool.limitFIFO = true; this.pool.CreatePrefabPool(prefabPool);//在这spwan池中 开辟一个预制池 this.StartCoroutine(Spawner()); // 键值对的方式存放预制
// 我们知道在这个 Shapes 池中 ,咱们使用了 Cude 预制
// 使用相应的Key获取 池中的预制实例
Transform cubePrefab = PoolManager.Pools["Shapes"].prefabs["Cube"]; Transform cubeinstance = PoolManager.Pools["Shapes"].Spawn(cubePrefab); cubeinstance.name = "Cube (Spawned By CreationExample.cs)"; } /// <summary> /// 每隔spawnInterval秒 就生产一个 预制实例 /// </summary> private IEnumerator Spawner() { int count = this.spawnAmount; Transform inst; while (count > 0) { // 排一条线
inst = this.pool.Spawn(this.testPrefab, Vector3.zero, Quaternion.identity); inst.localPosition = new Vector3(this.spawnAmount - count, 0, 0); count--; yield return new WaitForSeconds(this.spawnInterval); } // When done, start despawning this.StartCoroutine(Despawner()); } /// <summary> /// 每隔spawnInterval秒回收一个相应的实例 /// </summary> private IEnumerator Despawner() { while (this.pool.Count > 0) { // 当最后一个实例被Despawn,换句话说移除这个池(队列),这个池会复位
Transform instance = this.pool[pool.Count - 1]; this.pool.Despawn(instance); // Internal count-- yield return new WaitForSeconds(this.spawnInterval); } }}
明天继续更新
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。