2017-10-25 2 views
0

Ich möchte mehrere GameObject pools verwenden, also brauche ich den Pool manager, aber ich verstehe nicht, wie man es benutzt, und ich konnte keine Dokumente finden.Wie man GVR-Pools und PoolManager verwendet

Wie soll ich einen neuen Pool definieren, der beispielsweise ein GameObject namens "enemy" verwendet?

Soll ich eine neue konkrete Klasse von GameObjectPool erben?

Antwort

0

Der Pool-Manager hat eine statische Instanz, die auf "Awake" gesetzt ist. Sie sollten das ObjectPoolManager-Skript an ein GameObject in der Szene anhängen.

enter image description here

Dann können Sie Pools für verschiedene Gameobjects machen:

public class GameManager : MonoBehaviour { 

public GameObject enemyPrefab; 
public GameObject itemPrefab; 
public GameObject characterPrefab; 

const int enemyCount = 100; 
const int itemCount = 100; 

private GameObjectPool EnemyPool { 
    get { 
     GameObjectPool pool = ObjectPoolManager.Instance.GetPool<GameObjectPool> (enemyPrefab.name); 
     if (pool == null) { 
      pool = new GameObjectPool(enemyPrefab, enemyCount); 
      ObjectPoolManager.Instance.AddPool(enemyPrefab.name, pool); 
     } 
     return pool; 
    } 
} 

private GameObjectPool ItemPool { 
    get { 
     GameObjectPool pool = ObjectPoolManager.Instance.GetPool<GameObjectPool> (itemPrefab.name); 
     if (pool == null) { 
      pool = new GameObjectPool(itemPrefab, itemCount); 
      ObjectPoolManager.Instance.AddPool(itemPrefab.name, pool); 
     } 
     return pool; 
    } 
} 


// Use this for initialization 
void Start() { 
    StartCoroutine(SpawnEnemy (1f)); 
} 


IEnumerator SpawnEnemy(float t) { 
    for (int i = 0; i < enemyCount; ++i) { 
     GameObject newEnemy = EnemyPool.Borrow(); 
     newEnemy.transform.position = Random.insideUnitSphere; 
     yield return new WaitForSeconds (t); 
    } 
} 


}