U3D之对象缓冲池技术

U3D对象缓冲池技术

当我们创建对象的时候,比如我们可能通过以下三种方法:

GameObject cube= new GameObject("Cube");
GameObject.Instantiate("预制体");
GameObject.CreatePrimitive(PrmitiveType.XXX);

通过着这种方法创建的物体需要通过Destroy进行销毁,在一个游戏中对于一些需要频繁创建销毁的物体如:特效,子弹等,就要进行不断地创建和销毁工作,这会造成游戏极大的开销,所以我们通过对象缓冲池技术来对这一部分性能进行优化。
U3D提供了专门进行对象池技术的插件:Unity3D PoolManager缓冲池插件 - 杨名天吓 - CSDN博客 https://blog.csdn.net/henren555/article/details/42100881
这里我要讲的是自己实现的对象缓冲池技术。
对象池的本质:所谓的对象缓冲池实际上是通过将频繁使用的物体如子弹等预制体事先放置在一个字典容器中(池),使用的时候在池中通过Key进行查找,如果存在则将其提取出来,并将其active设为true,然后更改它的位置;当子弹失效大的时候我们不去销毁它,而是将其状态置为false,并将其重新放入字典池中。
代码结构为:
Pool.cs:总池,保存不同类型的物体;
SubPool.cs:每一种物体分属一个subpool,该物体可能有许多个,都加入到subpool的 容器中
sendmessage函数:通过调用sendmessage函数中的函数,来更新新激活的物体位置
通过Pool找到subpool,通过subpool找到需要的物体

//Pool.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
/// <summary>
/// 游戏对象池,所有类型的对象都由此管理器管理
/// 主要使用两个方法spawn和unSpawn
/// </summary>
public class Pool:SingletonMono<Pool>//单例模式
{
   
    //protected override void Awake()
    //{
   
    //    base.Awake();//千万别漏掉
    //}
    //子对象池分类(子弹,怪物,特效等)
    Dictionary<string, SubPool> dicPools = new Dictionary<string, SubPool>();
    /// <summary>
    /// 创建缓冲池对象
    /// </summary>
    /// <param path="path">预制体路径,从Resour
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值