์œ ๋‹ˆํ‹ฐ 2D๋กœ ์—ฌ๋Ÿฌ ์ž๋ฃŒ๋“ค ํด๋ก  ์ฝ”๋”ฉํ•˜๋ฉด์„œ ์ŠˆํŒ…๊ฒŒ์ž„์„ ๋งŒ๋“ค์–ด ๋ณด๊ณ  ์žˆ๋Š”๋ฐ์š”

weapon ์Šคํฌ๋ฆฝํŠธ ์ผ๋ถ€

public void StartFiring()

{

StartCoroutine("TryAttack");

}

public void StopFiring()

{

StopCoroutine("TryAttack");

}

private IEnumerator TryAttack()

{

while(true)

{

//๋ฐœ์‚ฌ์ฒด ์˜ค๋ธŒ์ ํŠธ ์ƒ์„ฑ

Instantiate(projectilePrefab, transform.position, transform.rotation);

// attackRate ์‹œ๊ฐ„๋งŒํผ ๋Œ€๊ธฐ

yield return new WaitForSeconds(attackRate);

}

}

playercontroller ์Šคํฌ๋ฆฝํŠธ ์ผ๋ถ€

if (Input.GetKeyDown(keyCodeAttack))

{

if (Time.time - lastattacktime > leastattackrate) //leastattackrate๋Š” ์ตœ์†Œ ๊ณต๊ฒฉ ์ฃผ๊ธฐ, 0.1๋กœ ์„ค์ •ํ•ด๋†“์Œ.

{

weapon.StartFiring();

lastattacktime = Time.time;

}

}

else if (Input.GetKeyUp(keyCodeAttack))

{

weapon.StopFiring();

}

์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฐœ์‚ฌ ์ฃผ๊ธฐ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฐœ์‚ฌ์ฒด๊ฐ€ ํ”Œ๋ ˆ์ด์–ด์˜ ์œ„์น˜์—์„œ ํ”Œ๋ ˆ์ด์–ด๋งŒํผ ๋กœํ…Œ์ด์…˜๋˜์–ด์„œ ์ƒ์„ฑ๋˜๋„๋ก ํ•ด ๋†“์•˜๋Š”๋ฐ,

ํ˜„์žฌ ๋ฐœ์‚ฌ์ฒด์—๋Š” ๊ทธ๋ƒฅ movement ํ•จ์ˆ˜๋ฅผ ๋‹ฌ์•„์„œ x์ถ•์ด๋‚˜ y์ถ• ์ผ์ • ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์›€์ง์ด๋„๋ก ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ

๋ฐœ์‚ฌ์ฒด๋ฅผ ๋ฐœ์‚ฌํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”? ์—ฌ๋Ÿฌ ์ž๋ฃŒ๋“ค์„ ์ฐพ์•„๋ณด๋‹ˆ๊นŒ

float bulletSpeed = 15;
private void Start()
{
GetComponent<Rigidbody>().AddForce(transform.forward * bulletSpeed, ForceMode.Impulse);
Destroy(gameObject, 5);
}

์ด๋Ÿฐ ์‹์œผ๋กœ rigidbody๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋“ค์ด ๋ณด์ด๋˜๋ฐ ์ด๊ฑธ ์œ„์— ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ์„๊นŒ์š”?