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 ์ด๊ฒ ๋๋์ฒด ๋ญ๋
๊ธ ์์ ์ด ์๋๋ค timeAfterSpawn += Time.deltaTime; ์ด๊ฒ ์ ์ดํด๊ฐ ์๊ฐ๋ค๋ ์๋ฆฌ
๊ตฌ๊ธ์น๋ฉด ๊ฒ๋ ์์ธํ๋์ด ์๊ฐ ์ ์ฌ๋๊ฑฐ์ - dc App
deltaTime์ด ํ๋ ์ ์ฌ์ด ์๊ฐ์
Delta time์ ์ ๋๊ธ์์ ์ค๋ช ํ๋๋ก ํ๋ ์ ์ฌ์ด์ ๊ฐ๊ฒฉ์๊ฐ์ Delta time์ ๊ณฑํด์ฃผ๋ ๊ฒฝ์ฐ๋ ์๋ฅผ๋ค์ด ์ค๋ธ์ ํธ๊ฐ 1ํ๋ ์๋ง๋ค (์ด๋์๋)๋งํผ ์ด๋ํ๋ค๊ณ ํ์๋ 60ํ๋ ์์ผ๋๋ 120 ํ๋ ์์ผ๋๋ ์ด๋์๋๊ฐ 2๋ฐฐ ์ฐจ์ด๋ ๊ฑฐ์ ๊ทธ๋ฐ๋ฐ ๋ง์ฝ (์ด๋์๋)์๋ค๊ฐ delta time์ ๊ณฑํด์ฃผ๊ฒ ๋๋ฉด ํ๋ ์์ด ์ด๋ป๋ ๊ฐ์ ์๋๋ ์ ์ง๋จ
๋ฏธ๋ถ ๊ณต์ ์ธ์ฐ์ค๋ dt ์ ์์์
๊ทธ dt๊ฐ delta time์ด์์ ์๊ฐ ๋ณํ๋
ํ๋ ์๋จ์๋ก ์๊ฐ๊ณ์ฐ์ ํ๋ฉด ์ฑ๋ฅ์ ๋ฐ๋ผ ํจ์จ์ด ๋ฌ๋ผ์ง ์ ์์ผ๋๊น ์ ๋์ ์ธ ์๊ฐ์ ๊ฐ์ง๊ณ ๊ฐ์ฐํ๋๊ฑฐ