在使用PoolManager插件进行内存管理的时候,遇到一个神坑,就是从PoolManager池子向Scene中加载对象时,只能加载一个对象,当时使用循环以为就可以依次加载,但是始终只是加载第一个,无奈我使用了一个携程,让其隔一帧便加载一次,很幸运的是他耗好使了,当我再次注释携程,使用以前的,下面的红色部分时,场景又可以成功加载出全部。对于Unity充满的无奈,但还是建议使用协程逐帧加载,可以减少内存拥挤。
for (int i = 0; i < creaturePrefabsName.Length; i++) {
creaturePrefabsName [i] = objNames.Substring (i * 2, 2);
Debug.Log ("Prefabs/" + fileName + "/" + creaturePrefabsName [i]);
testPrefabs = Resources.Load<Transform> ("Prefabs/" + fileName + "/" + creaturePrefabsName [i]);
prefabPool = new PrefabPool (testPrefabs);
Debug.Log ("zhixing");
//默认初始化两个Prefab
prefabPool.preloadAmount = 1;
//开启限制
prefabPool.limitInstances = true;
//关闭无限取Prefab
prefabPool.limitFIFO = false;
//限制池子里最大的Prefab数量
prefabPool.limitAmount = coluSize*rowSize;
//开启自动清理池子
prefabPool.cullDespawned = true;
//最终保留
prefabPool.cullAbove = 10;
//多久清理一次
prefabPool.cullDelay = 5;
//每次清理几个
prefabPool.cullMaxPerPass =5;
//初始化内存池
spawnPool._perPrefabPoolOptions.Add(prefabPool);
spawnPool.CreatePrefabPool (spawnPool._perPrefabPoolOptions[i]);
//StartCoroutine ("LoadScenesFromPerPrefabPoolOptions", i);
}
IEnumerator LoadScenesFromPerPrefabPoolOptions (int n) {
yield return new WaitForFixedUpdate ();
spawnPool.CreatePrefabPool (spawnPool._perPrefabPoolOptions[n]);
}