using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BulletPool : MonoBehaviour
{
public static BulletPool instance;

[SerializeField]
int MAX_SIZE = 20;
[SerializeField]
public GameObject bulletPrefab = null;
Queue<Bullet> bulletQueue = null;
Bullet tempBullet = null;
void Awake()
{
instance = this;
InitializePool();
}
void InitializePool()
{
bulletQueue = new Queue<Bullet>();

for(int i = 0; i < MAX_SIZE; i++)
{
tempBullet = Instantiate(bulletPrefab, transform.position, Quaternion.identity).GetComponent<Bullet>();
if(tempBullet != null)
{
tempBullet.transform.SetParent(transform);
tempBullet.gameObject.SetActive(false);
bulletQueue.Enqueue(tempBullet);
}
else
{
Debug.Log("Bullet not found");
}
}
}

public void AllocateBullet(Gun currentGun)
{
if(bulletQueue.Count != 0)
{
Bullet spawnedBullet = bulletQueue.Dequeue();
spawnedBullet.transform.position = currentGun.transform.position;
spawnedBullet.transform.rotation = currentGun.transform.rotation;
spawnedBullet.gameObject.SetActive(true);
}
}

public void FreeBullet(Bullet freedBullet)
{
freedBullet.gameObject.SetActive(false);
freedBullet.transform.position = transform.position;
bulletQueue.Enqueue(freedBullet);
}
}


์ฝ”๋“œ๊ฐ€ ๊ฐ™์€ ์  ํ’€์€ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”๋ฐ ๋ถˆ๋ฆฟ ํ’€์€ Instantiate๊ฐ€ null์„ ๋ฐ˜ํ™˜ํ•ด์„œ ์•„๋ž˜์˜ ๋™์ž‘๋“ค์ด ์‹คํ–‰์ด ์•ˆ๋ฉ๋‹ˆ๋‹ค..


์ƒ์„ฑ์€ ์ œ๋Œ€๋กœ ๋˜๋Š”๋ฐ ์™œ ์ด๋Ÿฌ๋Š” ๊ฑธ๊นŒ์š”