unity对象池技术

原创 2018年04月16日 10:32:57

本文中代码来自brackeys视频教程中内容的整理;

原视频链接:

https://www.youtube.com/watch?v=tdSmKaJvCoA

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PoolManager : SingletonBehaviour<PoolManager>
{
    // 具体的池子
    [System.Serializable]
    public class Pool
    {
        public string tag;
        public GameObject prefab;
        public int size;
    }

    public List<Pool> pools;
    // 池子管理
    public Dictionary<string, Queue<GameObject>> poolDictionary;

    // 开始时填满对象池,需要时可直接获取
    private void Start()
    {
        poolDictionary = new Dictionary<string, Queue<GameObject>>();

        foreach (Pool pool in pools)
        {
            Queue<GameObject> objectQueue = new Queue<GameObject>();

            for (int i = 0; i < pool.size; i++)
            {
                GameObject obj = Instantiate(pool.prefab);
                obj.SetActive(false);
                objectQueue.Enqueue(obj);
            }

            poolDictionary.Add(pool.tag, objectQueue);
        }
    }
    // 从对象池中生成
    public GameObject SpawnFromPool(string tag, Vector3 position, Quaternion rotation)
    {
        if (!poolDictionary.ContainsKey(tag))
        {
            Debug.LogWarning("Pool with tag " + tag + " doesn't exist! ");
            return null;
        }

        GameObject objectToSpawn = poolDictionary[tag].Dequeue();
        objectToSpawn.SetActive(true);
        objectToSpawn.transform.position = position;
        objectToSpawn.transform.rotation = rotation;

        poolDictionary[tag].Enqueue(objectToSpawn);

        return objectToSpawn;
    }
}
还见过另外一个不错的对象池博客,链接如下:

https://blog.csdn.net/qq_36927190/article/details/79475399


基于Unity的游戏开发(下)

本课程是Unity游戏开发的入门课程,课程分为上、下两个部分。下部分主要介绍JavaScript脚本程序开发、动画、粒子、网络和GUI系统
  • 2015年03月13日 08:17

unity - 对象池技术的实现与应用

本人之前发表在蛮牛网上的,现迁移至此。 本文为学习总结文章,如有错误请大神们指出~ 理论参考:http://www.cnblogs.com/mezero/p/3955130.html ...
  • u013236878
  • u013236878
  • 2016-09-05 19:55:15
  • 3945

游戏开发设计模式之对象池模式(unity3d 示例实现)

前篇:游戏开发设计模式之命令模式(unity3d 示例实现) 博主才学尚浅,难免会有错误,尤其是设计模式这种极富禅意且需要大量经验的东西,如果哪里书写错误或有遗漏,还请各位前辈指正。 原理:从...
  • wolf96
  • wolf96
  • 2015-10-14 12:55:57
  • 2517

Unity GC优化学习(三):对象池技术与PoolManager插件

1.简介对象池技术——是一种广泛通用的内存优化手段。在首次建立对象时,便将其存储在池子中,需要再次使用时,不是每次都实例化一个新的对象,而是查找回收池中是否存在闲置的对象,将其重新激活利用。2.简单对...
  • qq_26276097
  • qq_26276097
  • 2017-07-23 03:12:27
  • 1265

《Unity3D》通过对象池模式,管理场景中的元素

原文链接:http://www.cnblogs.com/kimmy/p/3808007.html 池管理类有啥用? 在游戏场景中,我们有时候会需要复用一些游戏物体,比如常见的子弹、子弹碰撞...
  • wolf96
  • wolf96
  • 2014-08-31 18:18:27
  • 1630

unity3D c#对象池简介

什么是对象池? 我们反复实例化一些对象的时候,尽管会使用预制体,但是反复大量实例化对象效率是底下的。这时候就使用对象池。 对象池,它是一个用来维护对象的结构,称之为池。当你需要对象的时候从池中获取一...
  • life_demo
  • life_demo
  • 2016-06-27 11:30:16
  • 613

关于Unity3D中对象池的创建与回收

写的第一篇博客,说实话是有点激动的,以后每个周会留下我的一些学习笔记与感想,将会一直学习下去,欢迎一起交流学习, QQ:1059213621 对象池:在激活对象时,它从池中提取。在停用对象时,...
  • TheFirstTenDays
  • TheFirstTenDays
  • 2017-03-17 21:30:05
  • 397

unity的对象池PoolManager最新

  • 2018年03月21日 16:36
  • 3.16MB
  • 下载

Unity3d中对象池(ObjectPool)的实现

转自:http://gad.qq.com/article/detail/7172110
  • u010377179
  • u010377179
  • 2016-10-26 08:25:58
  • 1969

unity对象池工具PoolManager初体验

回到涂涂乐具体实现的最后的一步,要做的是拿到各式各样的贴图赋予十个模型;模型在场景限定区域内活动,每个动物有几个动画片段随机播放;出于对未来可能的各种功能添加的性能考虑,学习并加入对象池。 由于是初...
  • u013318439
  • u013318439
  • 2016-11-15 16:36:31
  • 1995
收藏助手
不良信息举报
您举报文章:unity对象池技术
举报原因:
原因补充:

(最多只允许输入30个字)