[Unity]PoolManager的基础使用以及应用

PoolManager 的应用条件 是哪些?什么时候要用到PoolManager。

例如:一个 完整 的地图上面 需要生成 1W个  地图 场景 模型,而 摄像机可视 范围内 最多100个模型,没有用PoolManager,场景中使得地图场景正常使用这1W个物体得生成,并且占用大量内存(占用内存过大,会卡顿卡成PPT、APK打开闪退等问题)。

使用了PoolManager,就只会生成100个 模型 ,并重复 使用,重复 设置其坐标等参数,使其 在地图场景中正常使用,内存会大幅降低。

空物体(或者透明材质的模型)挂载 地图小物体 的功能脚本,功能脚本 含有 模型 变量 和 模型 的参数设置。

通过 读取 地图数据json或者其他文本数据 获得 一个 Map 类(里面存储的 是 所有 在地图中生成的地图模型 的坐标,旋转角度,缩放大小,一些其他设置),

地图生成 对应这些场景 模型 的空物体 挂载 某些脚本 MapObject.cs 使得 地图能够正常使用。

那么 地图模型的 gameObject什么时候生成 ,仅仅当 这个物体 为 摄像机 可视范围内(查找摄像机可视OnBecameVisible()和OnBecameInvisible()在什么条件下可以调用,用一个透明材质 的 模型来使其生效),

...
public class MapObject : MonoBehaviour
...
private string modelName;//地形模型物体 的字符串名称
private Transform model;//地形 模型物体
...
    private void OnBecameVisible()//摄像机可视
{

    model = poolManager.instance.spawnPool_.Spawn(modelName);
...
//对 模型 model 进行设置,因为生成的model 在某个 父物体下 所以是 local坐标。设置世界坐标就要注意其 父物体 的坐标。
//model.transform.localPositon;
//model.transform.localScale;
//model.transform.localEulerAngles;
...
}

...
    private void OnBecameInvisible()//摄像机不可视
{
    if (spawnPool.IsSpawned(model))
        { 
            poolManager.instance.spawnPool_.Despawn(go2.transform);
        }
}
...


构建新对象池,把多个对象 初始化 进一个 刚新建的对象池。


建立对象池

代码新建对象池

using System.Collections;
using System.Colle
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值