プレイヤーは、いくつかのプラットフォームを通過すると、プラットフォームの背後にある左が破壊 を取得します。私はプラットフォームを追跡してそれらを削除するリストを作った 最後のプラットフォームのプレハブ(リスト[0])。そして新しいものが先にインスタンス化されます。
オブジェクトプーリングを行う方法は数多くあります。それらの1つには、オブジェクトをキューに追加し、キューが使用中に削除することが含まれます。それらをリサイクル/破壊したいときは、代わりにリストに追加してください。
は、どのように私は自分の作成したプールからオブジェクトを再利用する必要がありますか?
本当に簡単です。代わりに、このたびを行う:
Instantiate(prefab, postion, Quaternion.identity);
ゲームがスタート機能に始まり、配列/リストで、その後保管したときに多くの時間がそれを実行してください:あなたはインスタンス化する必要がある
List<GameObject> pool = new List<GameObject>();
void Start()
{
for (int i = 0; i < 50; i++)
{
GameObject tempObj = Instantiate(prefab, postion, Quaternion.identity) as GameObject;
pool.Add(tempObj);
}
}
ゲームプレイ中にオブジェクト、ちょうど一覧/アレイから1を取得:
//Check if object is available in pool
if (pool.Count > 0)
{
//Object is. Return 1
GameObject objFromPool = pool[0];
//Enable the Object
objFromPool.SetActive(true);
}
else
{
//Object is NOT. Instantiate new one
GameObject objFromPool = Instantiate(prefab, postion, Quaternion.identity) as GameObject;
//Enable the Object
objFromPool.SetActive(true);
}
オブジェクトの使用が終了したら。代わりにDestroy(objFromPool);
を行うので、多分あなたが望むならば、List
に戻ってそれを追加また、それを無効にするには、そのゲームオブジェクトの位置をリセット:
//Reset Pos
objFromPool.transform.position = Vector3.zero;
//Disable?
objFromPool.SetActive(false);
//Return back to the array
pool.Add(objFromPool);
最後に、これを行うための最善の方法は、すべてのインスタンス化することですオブジェクトを配列またはリストに追加します。増加する整数を使用します。整数は0から始まり、list/array.Length-1
に達するまで増分します。その整数をプールからObjectを取得するために使用できます。
ArrayObjectPooling
hereとして実装されたこのメソッドの例と使用方法を確認できます。
すべての(オフスクリーンの)プラットフォーム(たとえば 'List')のコンテナを用意して、最初に使用可能なものを選んで位置を変更してください。 – UnholySheep
@UnholySheep - 私のゲームは予測不可能です。プラットフォームを無作為に使いたいということです。 – Vineet
次に、そのコンテナからランダムなプラットフォームを選んでください。それはそれほど多くのコードではありません。 – UnholySheep