【Unity】构建自己的GameObject缓存池
来源:互联网 发布:淘宝店主最后说两句 编辑:程序博客网 时间:2024/05/16 01:07
using Game.Manager.Base;using System.Collections;using System.Collections.Generic;using UnityEngine;namespace Game.Common{ public class PoolManager : BaseManager<PoolManager> { private Dictionary<string, Queue<GameObject>> m_Pool; private Dictionary<GameObject, string> m_GoTag; /// <summary> /// 初始化管理器 /// </summary> public override void Init() { ClearAll(); } /// <summary> /// 清空缓存池,释放所有引用 /// </summary> public void ClearAll() { m_Pool = new Dictionary<string, Queue<GameObject>>(); m_GoTag = new Dictionary<GameObject, string>(); } /// <summary> /// 回收GameObject /// </summary> /// <param name="go"></param> public void ReturnGameObejct(GameObject go) { Debug.Assert(go.activeSelf, "gameObject is not active"); go.SetActive(false); string tag = m_GoTag[go]; RemoveOutMark(go); if (!m_Pool.ContainsKey(tag)) { m_Pool[tag] = new Queue<GameObject>(); } m_Pool[tag].Enqueue(go); } /// <summary> /// 请求GameObject /// </summary> /// <param name="prefab"></param> /// <param name="parent"></param> /// <returns></returns> public GameObject RequestGameObejct(GameObject prefab, Transform parent) { string tag = prefab.GetInstanceID().ToString(); GameObject go = GetFromPool(tag); if (go == null) { go = GameObject.Instantiate<GameObject>(prefab, parent); } go.transform.SetParent(parent); MarkAsOut(go, tag); return go; } //从缓存池中取出 private GameObject GetFromPool(string tag) { if (m_Pool.ContainsKey(tag) && m_Pool[tag].Count > 0) { GameObject obj = m_Pool[tag].Dequeue(); obj.SetActive(true); return obj; } else { return null; } } //记录GameObject对应的tag private void MarkAsOut(GameObject go, string tag) { m_GoTag.Add(go, tag); } //去除GameObject的tag标记 private void RemoveOutMark(GameObject go) { if (m_GoTag.ContainsKey(go)) { m_GoTag.Remove(go); } else { Debug.LogError("remove out mark error, gameObject has not been marked"); } } }}
0 0
- 【Unity】构建自己的GameObject缓存池
- Unity中GameObject.activeInHierarchy和GameObject.activeSelf的区别
- childObject.transform.parent.gameObject Unity得到gameObject后,取GameObject的父
- 关于unity中的gameobject.active的问题。
- Unity动态创建空GameObject的方法
- Unity中 gameObject的顶点捕捉
- Unity获取场景gameobject的路径
- Unity GameObject对象的几个重要方法
- 【unity】GameObject.Find 的性能开销分析
- 给Unity的GameObject拓展接口
- 【Unity开发】GameObject
- 【Unity开发】GameObject
- Unity GameObject 中文翻译
- unity之GameObject
- UNITY 5.2 GameObject类
- unity源码解析GameObject
- unity gameobject transform
- Unity 入门 Gameobject类
- python测试图片是否存在
- nginx 学习笔记 - 配置HTTPS服务器
- BZOJ 1036: [ZJOI2008]树的统计Count (树链剖分+线段树)
- 写作神器——Latex
- http协议之request案例一:获取浏览器类型
- 【Unity】构建自己的GameObject缓存池
- Android中使用AbstractProcessor在编译时生成代码
- 分布式系统的应用及其各自的特点
- WP使用投稿功能添加邮件提醒功能
- Unicode下CString和char *之间的互相转换
- Javascript插件开发导读
- Scala开篇-for循环高级应用之yield
- 关于宏和全局变量和静态本地变量的那些事
- C语言生成DLL文件