using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PoolManager : MonoBehaviour
{
// 복제할 프리펩
public GameObject prefabs;
// 오브젝트 프리펩 담을 공간
public List<GameObject> pools;
// 풀 사이즈
[Range(1, 30)]
public int poolSize;
// 불러올 풀의 인덱스
public int poolCursor;
private void Awake()
{
// 풀 리스트 초기화
pools = new List<GameObject>();
// 풀 사이즈 만큼 풀링 오브젝트를 생성해줍니다.
for (int index = 0; index < poolSize; index++)
{
MakeOBJ();
}
}
// 오브젝트 풀에 넣을 오브젝트 생성하고 풀에 넣기
private GameObject MakeOBJ()
{
GameObject obj = Instantiate(prefabs, transform);
obj.name = "PoolOBJ" + pools.Count;
obj.SetActive(false);
pools.Add(obj);
return obj;
}
// 오브젝트 풀에서 가져오기
private GameObject GetOBJ()
{
for (int index = 0; index < pools.Count; index++)
{
poolCursor = (poolCursor + 1) % pools.Count;
// (0 + 1) % 10 -> 1 % 10 = 1
if (!pools[poolCursor].gameObject.activeSelf)
{
return pools[poolCursor];
}
}
// 모두 사용중이라면 만들어서 반환 합니다.
return MakeOBJ();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
GameObject obj = GetOBJ();
obj.SetActive(true);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Object : MonoBehaviour
{
private void OnEnable()
{
StartCoroutine(Hide());
}
public IEnumerator Hide()
{
// 오브젝트 생성 후, 2초 후 비활성화 하게 하였습니다.
yield return new WaitForSeconds(2f);
gameObject.SetActive(false);
}
private void OnDisable()
{
// 갖은 정보 초기화
// 오브젝트를 재사용하기 위해 갖은 정보가 있다면 모두 여기서 초기화 해줍니다.
// 스피드, 위치 등등..
}
}
댓글 영역