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);
        }
    }

}

 

明天继续更新

Unity3d 实用的PoolManager教程

时间: 2024-11-10 11:50:46

Unity3d 实用的PoolManager教程的相关文章

Unity3D for iOS初级教程:Part 2/3

转自:http://www.cnblogs.com/alongu3d/archive/2013/06/01/3111736.html 这篇教材是来自教程团队成员 Christine Abernathy, 他是Facebook的开发支持团队的工程师.欢迎来到Unity3D for iOS系列教程的第二部分!在这个系列的第一部分中,你已经学习了Unity的一些基本技能来构建一个非常简单的项目,并把它部署到iOS设备上.在继续这篇教程之前,你要确认已阅读过第一部分.现在进入第二部分,你要添加一些功能来

程序设计C语言二级考试教程 Java基础视频教程 安卓软件开发教程 Unity3D游戏制作入门教程

热门推荐电脑办公计算机基础知识教程 Excel2010基础教程 Word2010基础教程 PPT2010基础教程 五笔打字视频教程 Excel函数应用教程 Excel VBA基础教程 WPS2013表格教程 更多>平面设计PhotoshopCS5教程 CorelDRAW X5视频教程 Photoshop商业修图教程 Illustrator CS6视频教程 更多>室内设计3Dsmax2012教程 效果图实例提高教程 室内设计实战教程 欧式效果图制作实例教程 AutoCAD2014室内设计 Aut

Unity3D For Android 开发教程

原地址:http://game.ceeger.com/Unity/Doc/2011/Unity3D_For_Android.html 我自认为抵挡诱惑的能力还是很强大的,关键的时候还能把持住自己.今天逛了一下南京的丹凤街,终于受不住Android这美眉的诱惑.她虽脸蛋不怎么滴,但身材火热,且性感,廉价,低碳!长相平凡,却气质绝佳!虽出道不久,却已经在江湖搅起一股血雨腥风.在这阳光明媚的一天我给大家讲讲Unity3D的小安开发步骤.其实就是发布步骤啦! 第一步: 先去下载一个Android-SDK

Unity3D脚本中文系列教程(十六)

Unity3D脚本中文系列教程(十五) ◆ function OnPostprocessAudio (clip:AudioClip):void 描述:◆  function OnPostprocessGameObjectWithUserProperties (root : GameObject, propNames : string[], values : object[]) : void 描述:在导入文件时,为每个至少附加了一个用户属性的游戏物体调用propNames是一个string[ ],

Unity3D脚本中文系列教程(九)

Unity3D脚本中文系列教程(八) name 对象名称hideFlags 该物体是否被隐藏,保存在场景中或被用户修改继承的函数 GetInstanceID 返回该物体的实例id继承的类函数 operator bool 这个物体存在吗?Instantiate 克隆original物体并返回这个克隆.Destroy 移除一个游戏物体.组件或资源.DestroyImmediate 立即销毁物体obj.强烈建议使用Destroy代理.FindObjectsOfType 返回所有类型为type的激活物体

UNITY3D编辑器插件编写教程

如何让编辑器运行你的代码如何让编辑器运行你的代码  Unity3D 可以通过事件触发来执行你的编辑器代码,但是我们需要一些编译器参数来告知编译器何时需要触发该段代码. [MenuItem(XXX)]声明在一个函数上方,告知编译器给Unity3D编辑器添加一个菜单项,并且当点击该菜单项的时候调用该函数.触发函数里 可以编写任何合法的代码,可以是一个资源批处理程序,也可以弹出一个编辑器窗口.代码里可以访问到当前选中的内容(通过Selection类),并据此来 确定显示视图.与此类似,[Context

Unity3D脚本中文系列教程(八)

◆ static var matrix : Matrix4x4 描述:设置用于渲染所有gizmos的矩阵. 类方法 ◆ Static function DrawCube(center:Vector3,size:Vector3):void 描述:用center和size绘制一个立方体.function OnDrawGizmosSelected() {        //在变换位置处绘制一个变透明的蓝色立方体        Gizmos.color=Color(1,0,0,5);        Gi

基于TP5.1实用案例及教程

推荐<基于TP5.1实用案例及教程>书 目录: 通用封装 Export通用封装Import通用封装配合Import通用封装的ImportBaseVerify类Files通用封装Directory通用封装Pdf通用封装Words通用封装Nredis(redis封装)ZipArchives压缩zip文件封装BarQrcode条形码二维码Publics公共方法封装Curls(cUrl请求封装) extend扩展开发 何时编写扩展文件包扩展文件包如何编写 题外话 常用的compose安装一些建议及细节

从unity3d官网下载教程

http://unity3d.com/learn/tutorials/projects/tanks-tutorial 官网的教程提供的下载链接https://www.assetstore.unity3d.com/en/#!/content/46209/ 根本无法下载 最后谷歌了下,发现需要在unity中打开,然后在里面的asset store中下载 坑爹了,下载速度超级慢.我等了好久 绿色的import按钮,可以导入 下载后的路径在 C:\Users\Administrator\AppData\