오브젝트풀을 추가하자.
using System.Collections.Generic;
using UnityEngine;
public class ObjectPool : MonoBehaviour
{
public GameObject prefab;
public int poolSize = 10;
private Queue<GameObject> pool = new Queue<GameObject>();
private void Start()
{
}
public void init(GameObject p)
{
for(int i=0;i<poolSize;i++)
{
GameObject obj = Instantiate(prefab,p.transform);
obj.SetActive(false);
pool.Enqueue(obj);
}
}
public GameObject GetObject(Vector3 pos)
{
GameObject obj;
if(pool.Count > 0)
{
obj = pool.Dequeue();
}
else
{
obj = Instantiate(prefab);
}
obj.transform.position = pos;
obj.SetActive(true);
return obj;
}
public void ReturnObject(GameObject obj)
{
obj.SetActive(false);
pool.Enqueue(obj);
}
}
Spawner 클래스 수정
using UnityEngine;
public class Spawner : MonoBehaviour
{
[Header("Settings")]
public float minSpawnDelay;
public float maxSpawnDelay;
[Header("References")]
public GameObject[] gameObjects;
ObjectPool[] pool;
private void Start()
{
// 미리 오브젝트풀을 생성해둔다.
pool = new ObjectPool[gameObjects.Length];
for(int i=0;i<gameObjects.Length;i++)
{
pool[i] = new ObjectPool();
pool[i].prefab = gameObjects[i];
pool[i].init(gameObject);
}
}
// Start is called once before the first execution of Update after the MonoBehaviour is created
void OnEnable()
{
Invoke("Spawn", Random.Range(minSpawnDelay,maxSpawnDelay));
}
private void OnDisable()
{
CancelInvoke();
}
void Spawn()
{
// 아래처럼 소스 수정
int idx = Random.Range(0, gameObjects.Length);
GameObject obj = pool[idx].GetObject(transform.position);
obj.GetComponent<Destroyer>().SetPool(pool[idx]);
/*
var randomObject = gameObjects[Random.Range(0, gameObjects.Length)];
Instantiate(randomObject, transform.position, Quaternion.identity);
*/
Invoke("Spawn", Random.Range(minSpawnDelay, maxSpawnDelay));
}
}
아래와 같이 게임실행하면 미리 오브젝트를 만들어두고 hide시킨다.
Rider를 설치하자. (https://www.jetbrains.com/rider/)
- 코드 리팩토링 도구를 사용하여 아래와 같이 코드 변경
'Unity' 카테고리의 다른 글
블랜더 (0) | 2024.12.24 |
---|---|
2025년2월2주 (0) | 2024.12.24 |
2025년2월1주(2/3~2/9) 무료 서버 구축하기 (0) | 2024.12.24 |
2025년1월 2주 (0) | 2024.12.24 |
2025년1월1주(12/30~1/5) (김치런 Game) (0) | 2024.12.24 |