public class BulletSpawner : MonoBehaviour

{

ย  ย  public GameObject bulletPrefab; //ํƒ„์•Œ ํ”„๋ฆฌํŒน

ย  ย  public float spawnRateMin = 0.5f; // ์ƒ์„ฑ์ฃผ๊ธฐ ์ตœ์†Œ

ย  ย  public float spawnRateMax = 3f; // ์ƒ์„ฑ์ฃผ๊ธฐ ์ตœ๋Œ€


ย  ย  private Transform target; // ๋ฐœ์‚ฌ๋Œ€์ƒ

ย  ย  private float spawnRate; // ์ƒ์„ฑ์ฃผ๊ธฐ

ย  ย  private float timeAfterSpawn; // ๋งˆ์ง€๋ง‰ ์ƒ์„ฑ์‹œ์  ์ง€๋‚œ์‹œ๊ฐ„


ย  ย  void Start()

ย  ย  {

ย  ย  ย  ย  timeAfterSpawn = 0f;

ย  ย  ย  ย  spawnRate = Random.Range(spawnRateMin, spawnRateMax);

ย  ย  ย  ย  target = FindObjectOfType<PlayerController>().transform;

ย  ย  }


ย  ย  // Update is called once per frame

ย  ย  void Update()

ย  ย  {

ย  ย  ย  ย  timeAfterSpawn += Time.deltaTime;


ย  ย  ย  ย  if(timeAfterSpawn >= spawnRate)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  timeAfterSpawn = 0f;


ย  ย  ย  ย  ย  ย  GameObject bullet = Instantiate(bulletPrefab, transform.position, transform.rotation);


ย  ย  ย  ย  ย  ย  bullet.transform.LookAt(target);


ย  ย  ย  ย  ย  ย  spawnRate = Random.Range(spawnRateMin, spawnRateMax);

ย  ย  ย  ย  }

ย  ย  }

}



ย timeAfterSpawn += Time.deltaTime; ๋‹ค๋ฅธ๊ฑด ๋ฌธ์ œ๊ฐ€ ์—†๋Š”๋ฐ ์ด๊ฒŒ ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ


๋งˆ์ง€๋ง‰ ์ƒ์„ฑ์‹œ์  ์ดํ›„ ์ง€๋‚œ์‹œ๊ฐ„์„ ๋ˆ„์ ํ•ด์„œ ๊ทธ ์‹œ๊ฐ„์ด 0.5~3์—์„œ ์ •ํ•ด์ง„ ์ƒ์„ฑ์ฃผ๊ธฐ์— ๋‹ค๋‹ค๋ฅด๋ฉด


๋‹ค์‹œ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด์„œ ํƒ„์•Œ์„ ๋ฐœ์‚ฌํ•˜๊ณ  ๋‹ค์‹œ ์ƒ์„ฑ์ฃผ๊ธฐ๋ฅผ ๋žœ๋คํ•˜๊ฒŒ ์ •ํ•œ๋‹ค๋Š”๊ฑด ์•Œ๊ฒ ์Œ


๊ทผ๋ฐ deltaTime์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์—†์–ด์„œ ๊ทธ๋Ÿฐ๊ฑด์ง€


๋งˆ์ง€๋ง‰ ์ƒ์„ฑ์‹œ์ ์— ๋ธํƒ€ํƒ€์ž„์„ ์ง€๋‚œ๋‹ค๊ณ  ์‹œ๊ฐ„์ด ๋ˆ„์ ๋œ๋‹ค๋Š” ๊ฐœ๋…์ž์ฒด๊ฐ€ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€๋Š”๋ฐ


deltaTime ์ด๊ฒŒ ๋„๋Œ€์ฒด ๋ญ๋ƒ