์ ๋ํฐ 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์ถ ์ผ์ ๋ฐฉํฅ์ผ๋ก๋ง ์์ง์ด๋๋ก ํ๊ณ ์์ต๋๋ค. ์ฌ๊ธฐ์ ํ๋ ์ด์ด๊ฐ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ผ๋ก
๋ฐ์ฌ์ฒด๋ฅผ ๋ฐ์ฌํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์? ์ฌ๋ฌ ์๋ฃ๋ค์ ์ฐพ์๋ณด๋๊น
์ด๋ฐ ์์ผ๋ก rigidbody๋ฅผ ์ฌ์ฉํ๋ ์คํฌ๋ฆฝํธ๋ค์ด ๋ณด์ด๋๋ฐ ์ด๊ฑธ ์์ ์ ์ฉ์ํฌ ์ ์์๊น์?
projectilePrefab์ ์คํฌ๋ฆฝํธ๋ฅผ ํ๋ ๋ถํ์ ์๋ ์ฝ๋๋ฅผ ๋ถํ๋๋๊ฑด ์ด๋?
๊ทธ๋ ๊ฒ ์๋ํด ๋ดค๋๋ฐ ์์ง์ด์ง ์๋๋ผ๊ตฌ์..
projectilePrefab์ ๋ฆฌ์ง๋๋ฐ๋๋ฅผ ๋นผ๋จน์๊ฑด ์๋๊ฒ ์ง?
๋ฆฌ์ง๋ ๋ฐ๋ ๋ฃ๊ณ ์ค๋ ฅ๊ฐ์ ๊ฑฐ ๋ค 0์ผ๋ก ํ์ต๋๋ค.
๋ฐ์ ์ฝ๋๋ฅผ ๋ฃ๊ณ ๋ฌด๋ธ๋จผํธ ํจ์๋ฅผ ์ ๊ฑฐํ ๋ค์์ ๋ฐ์ฌ๋ฅผ ํด ๋ดค๋๋ฐ ๊ทธ๋๋ก ๋ฉ์ถฐ ์๋ ์ฑ๋ก ๋ฐ์ฌ์ฒด๊ฐ ์์ฑ๋๋๋ผ๊ตฌ์
๊ทผ๋ฐ rigidbody 2D๊ฐ ์๋๋ผ rigidbody ์ปดํฌ๋ํธ๋ฅผ ๋ถ์ฌ์ผ ํ๋ ๊ฑด๊ฐ์ ์ค๋ง..?
์๋ ์ฝ๋๊ฐ ๋ฆฌ์ง๋๋ฐ๋๋ก ๋์ด ์๋๊ฑธ?? ๋ฆฌ์ง๋๋ฐ๋2D๋ฅผ ์ฐ๊ณ ์ถ์ผ๋ฉด ์๋ ์ฝ๋๋ ๋ฐ๊ฟ์ผ ํด
GetComponent().AddForce(transform.right*speed, ForceMode2D.Impulse);
๋ฆฌ์ง๋๋ฐ๋2D๋ก ํ๋ฉด ์ฝ๋์ ์ค๋ฅ๊ฐ ์๊ธด๋ค๊ณ ํฉ๋๋ค.
์ ์์ ๊ทธ๋ฐ ์์ผ๋ก ์ฝ๋๋ฅผ ๋ฐ๊ฟ์ผ ํ๋ ๊ตฐ์
ใ ใ ; ๋ฆฌ์ง๋๋ฐ๋๋, ๋ฆฌ์ง๋๋ฐ๋2d๋ ์ฐ๋๋ฒ์ด ๋ฌ๋ผ. ํ์ด๊ดํธ๊ฐ ๋๊ธ์ ์์จ์ ธ์ ๋น ์ ธ๋ฒ๋ ธ๋๋ฐ, ์ ๊ฑฐ๋ ๋์น๊ป ์ ์ผ์๊ฑฐ๋ผ ๋ฏฟ์ด!
GetComponent().AddForce(transform.right * bulletSpeed, ForceMode2D.Impulse); ์ด๋ ๊ฒ ๋ฐ๊พธ๊ณ ๋ฆฌ์ง๋๋ฐ๋ 2D ์ ์ฉ์ํจ ๋ค์์ ํ๋ฆฌํฉ์ ์๋ ๋ฌด๋ธ๋จผํธ ํจ์๋ฅผ ๋นผ์ ์คํํด ๋ดค๋๋ฐ ์์ฑ๋๊ณ ๋์ ์์ง์ด์ง๊ฐ ์์ต๋๋ค. ๋ฌด๋ธ๋จผํธ ํจ์๋ฅผ ๊ณ์ ์ด๋ ค๋์ผ ํ๋์?
GetComponent().AddForce(transform.right * bulletSpeed, ForceMode2D.Impulse);
์ด๊ฑธ๋ก ํ์ต๋๋ค ์์ ์ด ๊ฑด ์๋ชป ๋ณต๋ถ๋๋ค์
์ด๋ผ ๊ทธ๋ฅ ํ์ดํ ๋ด์ฉ์ด ๋ณต๋ถ์ด ์ ๋๋ค์ ์ฌ๊ธฐ
GetComponent/Rigidbody2D/().AddForce(transform.right * bulletSpeed, ForceMode2D.Impulse);
์ค ๋๋ ๋ฉ๋๋ค!
๊ฐ์ฌํฉ๋๋ค!
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
rigidbody ๋ถ์ด๊ณ projectilePrefab์ ๋ฐ์ ์๋ ์ฝ๋๋ฅผ ๋ฃ์ ๋ค์์ while ๋ถ๋ถ์ ์ ๋ ๊ฒ ์์ ํด์ผ ํ๋ค๋ ๊ฑด๊ฐ์? ๊ทธ๋๋ก ํด ๋ณด๊ฒ ์ต๋๋ค.
rigidbody 2d ์จ์ผ๋๊ณ addforce ๋ฐฉํฅ๋ transform.foward๋ 3d ๊ธฐ์ค์ด๋ผ transform.up ๊ฐ์๊ฑฐ ์จ์ผ๋ ๊ป
๊ทธ ์ด์ธ์ ํ์ํ ๊ฒ์ ์์๊น์? ๋ฐ๋ก ์ค๋ฅ ๋ฌธ๊ตฌ๋ ๋จ์ง ์๋๋ฐ ๋ฐฉํฅ์ด ๊ทธ๋๋ก ๋ฐ๋ผ๊ฐ์ง ์์ต๋๋ค. prefab์ ์๋ ๋ฌด๋ธ๋จผํธ ํจ์๋ฅผ ๋นผ๋ฉด ์ฌ์ ํ ๊ฐ๋งํ ๋ฉ์ถ ์ฑ๋ก ๋ฐ์ฌ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค.