陕西网络开发公司网站wordpress添加上一篇下一页
news/
2025/9/23 13:56:11/
文章来源:
陕西网络开发公司网站,wordpress添加上一篇下一页,wordpress科技网站模板,展示型网站 营销型网站【Unity】对象池技术
1.简介
对象池#xff08;Object Pooling#xff09;技术是一种用于优化游戏性能和内存管理的技术。 对象池可以用于各种需要频繁实例化和销毁游戏对象的场景#xff0c;例如子弹、敌人、玩家等。其主要目标是减少频繁的内存分配和垃圾回收的次数Object Pooling技术是一种用于优化游戏性能和内存管理的技术。 对象池可以用于各种需要频繁实例化和销毁游戏对象的场景例如子弹、敌人、玩家等。其主要目标是减少频繁的内存分配和垃圾回收的次数提高游戏的运行效率从而提高性能和降低延迟。 在对象池中查找池中隐藏的游戏对象将其显示出来以避免一直实例化新的游戏对象导致游戏性能受到影响。
2.实现
一般地游戏会需要频繁实例化多种预制体所以需要先将每种预制体存在各个小池中接着通过大池进行管理之后直接从大池中拿取和放回。
小池子SubPool代码
using UnityEngine;
using System.Collections.Generic;public class SubPool
{//预制体private GameObject m_prefab;//父对象private Transform m_parent;//小池中所有存在场景的对象private ListGameObject m_objects new ListGameObject();/// summary/// 构造函数/// /summary/// param nameparent父对象/param/// param nameprefab预制体/parampublic SubPool(Transform parent, GameObject prefab){m_parent parent;m_prefab prefab;}/// summary/// 预制体名字/// /summarypublic string Name{get{return m_prefab.name;}}/// summary/// 生成/// /summary/// returns生成的对象/returnspublic GameObject Spawn(){GameObject go null;foreach(GameObject obj in m_objects){if (!obj.activeSelf){go obj;break;}}if(go null){go GameObject.Instantiate(m_prefab);go.transform.parent m_parent;m_objects.Add(go);}go.SetActive(true);return go;}/// summary/// 是否存在小池中/// /summary/// param namego判断的对象/param/// returns/returnspublic bool Contains(GameObject go){return m_objects.Contains(go);}/// summary/// 回收/// /summary/// param namego回收的对象/parampublic void UnSpawn(GameObject go){if(Contains(go)){go.SetActive(false);}}/// summary/// 回收全部/// /summarypublic void UnSpawnAll(){foreach(GameObject obj in m_objects){UnSpawn(obj);}}
}大池子ObjectPool代码
using System.Collections.Generic;
using UnityEngine;public class ObjectPool : MonoBehaviour
{//存放预制体的文件名public string FileName prefab;//名字-小池子字典private Dictionarystring, SubPool m_pools new Dictionarystring, SubPool();/// summary/// 生成/// /summary/// param namename名字/param/// param nameparent父对象/param/// returns生成的对象/returnspublic GameObject Spawn(string name, Transform parent){SubPool pool null;if(!m_pools.ContainsKey(name)){RegisterNewPool(name, parent);}pool m_pools[name];return pool.Spawn();}/// summary/// 注册新的小池子/// /summary/// param namename名字/param/// param nameparent父对象/paramprivate void RegisterNewPool(string name, Transform parent){string path FileName / name;GameObject go Resources.LoadGameObject(path);if(go ! null){SubPool pool new SubPool(parent, go);m_pools.Add(pool.Name, pool);}else{Debug.Log(未找到 path 的预制体);}}/// summary/// 回收/// /summary/// param namego被回收的游戏对象/parampublic void UnSpawn(GameObject go){SubPool pool null;foreach(SubPool p in m_pools.Values){if(p.Contains(go)){pool p;break;}}if(pool ! null){pool.UnSpawn(go);}}/// summary/// 回收全部/// /summarypublic void UnSpawnAll(){foreach(SubPool p in m_pools.Values){p.UnSpawnAll();}}
}因为作者精力有限文章中难免出现一些错漏敬请广大专家和网友批评、指正。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/912754.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!