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