플레이어가 몇 가지 플랫폼을 전달의 파괴 플랫폼 뒤에 도착 왼쪽 -
나는이 자습서를 따라 갔다. 나는 플랫폼을 추적하고 목록 마지막 플랫폼 프리 패브 (list [0])를 삭제하는 목록을 만들었습니다. 새로운 인스턴스가 미리 인스턴스화됩니다.
개체 풀링을 만드는 방법은 여러 가지가 있습니다. 그 중 하나는 객체를 대기열에 추가하고 사용 중에 객체를 제거하는 것입니다. 재활용/폐기하려는 경우 목록에 다시 추가하십시오.
는 어떻게 만들어 풀에서 객체를 재사용해야합니까?
정말 쉽습니다. 대신이 매번 일을 :
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);
}
}
게임 플레이시 개체 단지 목록/배열에서 하나를 얻을 :
//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);
}
,
개체 사용이 끝나면.
//Reset Pos
objFromPool.transform.position = Vector3.zero;
//Disable?
objFromPool.SetActive(false);
//Return back to the array
pool.Add(objFromPool);
마지막으로
,이 일을 가장 좋은 방법은 모든 인스턴스를하는 대신 Destroy(objFromPool);
을하고, 당신은 다음 List
에 다시 추가하려면 아마 또한 그것을 사용하지, 그 게임 오브젝트의 위치를 재설정 객체를 배열 또는리스트에 추가합니다. 증가하는 정수를 사용하십시오. 정수는 0에서 시작하여 list/array.Length-1
에 도달 할 때까지 증가합니다. 그런 다음 해당 정수를 사용하여 풀에서 Object를 가져올 수 있습니다.
ArrayObjectPooling
here으로 구현 된이 메소드의 예와 사용 방법을 볼 수 있습니다.
(오프 스크린) 플랫폼 (예 :'List')이있는 컨테이너를 사용하고 첫 번째 가능한 것을 선택하고 위치를 수정하십시오. – UnholySheep
@UnholySheep - 게임을 예측할 수 없게하고 싶습니다. 플랫폼을 무작위로 사용하고 싶습니다. – Vineet
그 컨테이너에서 임의의 플랫폼을 골라야합니다. 그게 훨씬 더 많은 코드가 아닙니다. – UnholySheep