๋ชฌ์คํฐ ํผ๊ฒฉ ์ ์ฒด๋ ฅ ๊น์ด๋๋ก ์ฝ๋๋ฅผ ์ผ๋๋ฐ,
==================ํ๋ ์ด์ด์ ๋ค์ด์๋ ์คํฌ๋ฆฝํธ====================
Collider2D[] col2Dsย = Physics2D.OverlapBoxAll(AttackPoint.position, AttackSize, 0);
foreach (Collider2D collider in col2Ds)
{
ย ย ย ย if (collider.tag == "Enemy")
ย ย ย ย {
ย ย ย ย ย ย ย ย collider.GetComponent<Enemy>().TakeDamage(Damage);
ย ย ย ย }
}
==================๋ชฌ์คํฐ์ ๋ค์ด์๋ ์คํฌ๋ฆฝํธ====================
public void TakeDamage(int Damage)
{
ย ย ย ย NowHP -= Damage;
ย ย ย ย animator.SetTrigger("Hit");
ย ย ย ย Debug.Log(NowHP);
}
๋๋ ๋ชฌ์คํฐ ์ข ๋ฅ๋ง๋ค ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ๋ก ์จ์ฃผ๋ ค๊ณ ํ๋๋ฐย ์ด๋ ๊ฒ ํผ๊ฒฉ ์ฝ๋๋ฅผ ์จ๋ฒ๋ฆฌ๋ฉด
tag ์กฐ๊ฑด์ ๋ค ๋ถ๊ธฐ ์์ผ์ค์ผ ๋ ํ ๋ฐ ๊ทธ๋ฌ๋ฉด ๋๋ฌด ๋ณต์กํด์ง ๊ฒ ๊ฐ์
๋ชฌ์คํฐ ์ข ๋ฅ๋ง๋ค ์ฒด๋ ฅ์ ๋ค๋ฅด๊ฒ ๋๊ณ ํผ๊ฒฉ ์ ๋ฐ๋ฏธ์ง ๋ฐ๊ฒ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ๋จ?
์์์ ์ฐ์ธ์
Enemy๋ผ๋ ๋ถ๋ชจ ํด๋์ค๋ฅผ ๋๊ณ ๋ชฌ์คํฐ๋ง๋ค ํด๋์ค๋ฅผ ๋ฌ์ Enemy๋ฅผ ์์ํ์๋ผ๋ ๊ฑด๊ฐ์? ๊ฐ์ฌํฉ๋๋ค!!
EnemyCommon์ ์์ํ๋ EnemySpecific์ ๋ง๋ค๋ ๊ฐ, ์ฒด๋ ฅ ์์ฒด๋ฅผ ๋ณ๋์ ํด๋์ค๋ก ๋นผ์ ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ํ๋ ๊ฒ๋ ใฑใ ์๋ฏ
๋ฐฉ๊ธ ์์์ผ๋ก ์ฝ๋๋ฅผ ์ ์ด๋ดค๋๋ฐ, ์ด๋ผ ๋ชฌ์คํฐ๋ง๋ค ์ ๋๋ฉ์ด์ ์ ๋ฐ๋ก ์ค์ ํ๋ ์ชฝ์์ ๋งํ๋ ๊ฒ ๊ฐ์์.. Enemy ์คํฌ๋ฆฝํธ์์ TakeDamage()๋ผ๋ ํจ์๊ฐ ์คํ๋์ ๋, ๋ฐ๋ฏธ์ง๋ฅผ ์ ์ ๋ชฌ์คํฐ๋ง ํผ๊ฒฉ ์ ๋๋ฉ์ด์ ์ด ์คํ๋๋๋ก ํ๋ ๋ฐฉ๋ฒ๋ ์์์ผ๋ก ๊ฐ๋ฅํ๊ฐ์?
? ์ฒด๋ ฅ๋ง ๋ถ๋ชจ ์ฝ๋์ ๋ฃ๊ณ ํ์ ์ฝ๋๋ฅผ ๋ฐ๋ก ์์ฑํ๋ฉด ๋์๋
public virtual void TakeDamage()๋ฅผ ๋ถ๋ชจ์ ๋ฃ๊ณ , public override void TakeDamage() ๋ฅผ ์์์ ๋ฃ์ด์ ์์ ํจ์์์ TakeDamage().base ๋ฃ๊ณ ์ ๋๋ฉ์ด์ ์คํํ๋ฉด ๋์ง.
๋ณธ๋ฌธ์ด๋ ๋๊ธ์์ ๊ตฌํํ๋ ค๋ ๊ธฐ๋ฅ์ด ๋ญ์ง ์ ํํ ๋ญ์ง ์ ๋ชจ๋ฅด๊ฒ ๋๋ฐ, ๊ณต๊ฒฉ์ ๋ฐ์ ๋ชฌ์คํฐ์ ์ข ๋ฅ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋์์ ํด์ฃผ๊ณ ์ถ์ ๊ฑฐ์? ๊ทธ๋ผ ์๋์ฒ๋ผ TakeDamage๋ฅผ EnemyCommon(๋ชจ๋ ์ ์ด ๊ณตํต์ ์ผ๋ก ๊ฐ์ ธ์ผ ํ๋ ๊ฒ๋ค ๋ฃ์ผ๋ฉด ๋จ)์ ๋ฃ๊ณ ์์๋ง๋ค ๋ค๋ฅด๊ฒ ํด์ฃผ๊ณ ์ถ์ผ๋ฉด ์์ ์คํฌ๋ฆฝํธ์์ overrideํด์ฃผ๋ฉด ๋จ
๋๋ ์ด๋ฐ ๊ฒฝ์ฐ ์ฝ๋ผ์ด๋ ์ฌ๋ฌ ๊ฐ ๋ง๋ฌ
๋๋ผ๋ฉด ์์์ธ๋ฏ.
Monster๋ฅผ ๋ง๋ค์ด์ ๋ชฌ์คํฐ์ ํ ์ํฌ๋ฐ๋ฏธ์ง๋ฅผ ๋ฃ๊ณ ๊ฑ๋ฅผ ์์์ํค๋ฉด ๋์ง๋ง ๋ญ์๋ฆฐ์ง ๋ชจ๋ฅด๊ฒ ์ผ๋ฉด TryGetComponent์จ๋ณด๋ ๊ฐ if(col.TryGetComponent~~) ํด์ ํ์ค๋์ค๋ฉด ์๊ฐ์ง๊ณ ์๋๊ฑฐ๋๊น ๊ทผ๋ฐ ๋๋ผ๋ฉด ๋ฌด์กฐ๊ฑด ์์ํ๊ธดํ ๋ฏ ใ ใ ใ ใ