public PoolBlock(int size, AP_enum.EmptyBehavior emptyBehavior, int maxSize, AP_enum.MaxEmptyBehavior maxEmptyBehavior, GameObject prefab, bool printLogOnQuit) { this.size = size; this.emptyBehavior = emptyBehavior; this.maxSize = maxSize; this.maxEmptyBehavior = maxEmptyBehavior; this.prefab = prefab; this.printLogOnQuit = printLogOnQuit; }
bool InitializeSpawn(GameObject prefab, float addPool, int minPool, AP_enum.EmptyBehavior emptyBehavior, AP_enum.MaxEmptyBehavior maxEmptyBehavior, bool modBehavior) { if (prefab == null) { return(false); } // object wasn't defined // if ( apManagerScript == null ) { // object pool manager script not located yet // apManagerScript = Object.FindObjectOfType<AP_Manager>(); // find it in the scene if (apManagerScript == null) { Debug.Log("No Object Pool Manager found in scene."); return(false); } // didn't find an object pool manager // } // found an object pool manager return(apManagerScript.InitializeSpawn(prefab, addPool, minPool, emptyBehavior, maxEmptyBehavior, modBehavior)); }
static bool InitializeSpawn(GameObject prefab, float addPool, int minPool, AP_enum.EmptyBehavior emptyBehavior, AP_enum.MaxEmptyBehavior maxEmptyBehavior, bool modBehavior) { if (prefab == null) { return(false); } // 未定义对象 if (opmScript == null) // 尚未找到对象池管理器脚本 { opmScript = Object.FindObjectOfType <AP_Manager>(); // 在场景中找到它 if (opmScript == null) { Debug.Log("No Object Pool Manager found in scene."); return(false); } // 找不到对象池管理器 } // 找到一个对象池管理器 return(opmScript.InitializeSpawn(prefab, addPool, minPool, emptyBehavior, maxEmptyBehavior, modBehavior)); }
public void CreatePool(GameObject prefab, int size, int maxSize, AP_enum.EmptyBehavior emptyBehavior, AP_enum.MaxEmptyBehavior maxEmptyBehavior) { GameObject obj = new GameObject("Object Pool"); obj.transform.SetParent(transform); obj.transform.localPosition = Vector3.zero; obj.transform.localRotation = Quaternion.identity; AP_Pool script = obj.AddComponent <AP_Pool>(); if (Application.isPlaying == true) { obj.name = prefab.name; script.poolBlock.size = size; script.poolBlock.maxSize = maxSize; script.poolBlock.emptyBehavior = emptyBehavior; script.poolBlock.maxEmptyBehavior = maxEmptyBehavior; script.poolBlock.prefab = prefab; if (prefab) { MakePoolRef(prefab.name); } } }
public static bool InitializeSpawn(GameObject prefab, float addPool, int minPool, AP_enum.EmptyBehavior emptyBehavior, AP_enum.MaxEmptyBehavior maxEmptyBehavior) { return(InitializeSpawn(prefab, addPool, minPool, emptyBehavior, maxEmptyBehavior, true)); }
public bool InitializeSpawn(GameObject prefab, float addPool, int minPool, AP_enum.EmptyBehavior emptyBehavior, AP_enum.MaxEmptyBehavior maxEmptyBehavior, bool modBehavior) { if (prefab == null) { return(false); } CheckDict(); bool result = false; bool tempModify = false; if (poolRef.ContainsKey(prefab.name) == true && poolRef[prefab.name] == null) { // check for broken reference poolRef.Remove(prefab.name); // remove it } if (poolRef.ContainsKey(prefab.name) == true) { result = true; // already have refrence } else { if (MakePoolRef(prefab.name) == null) { // ref not found if (allowCreate == true) { CreatePool(prefab, 0, 0, emptyBehavior, maxEmptyBehavior); tempModify = true; // may modify a newly created pool result = true; } else { result = false; } } else { result = true; // ref was created } } if (result == true) { // hava a valid pool ref if (allowModify == true || tempModify == true) { // may modify a newly created pool if (addPool > 0 || minPool > 0) { int size = poolRef[prefab.name].poolBlock.size; int l1 = 0; int l2 = 0; if (addPool >= 0) { // not negative if (addPool < 1) { // is a percentage l2 = Mathf.RoundToInt(size * addPool); } else { // not a percentage l1 = Mathf.RoundToInt(addPool); } } int loop = 0; int a = size == 0 ? 0 : Mathf.Max(l1, l2); if (size < minPool) { loop = minPool - size; } loop += a; for (int i = 0; i < loop; i++) { poolRef[prefab.name].CreateObject(true); } poolRef[prefab.name].poolBlock.maxSize = poolRef[prefab.name].poolBlock.size * 2; if (modBehavior == true) { poolRef[prefab.name].poolBlock.emptyBehavior = emptyBehavior; poolRef[prefab.name].poolBlock.maxEmptyBehavior = maxEmptyBehavior; } } } } return(result); }