์ด๊ฑฐ ์ง๋ฌธํ๋ ๋์
์ ์ค๋ธ์ ํธ ai๊ฐ ๋์๊ฒ ์ผ์ ๊ฑฐ๋ฆฌ๊น์ง๋ง ์์ ์ข๊ฒ ๋๋ฐ ์ด๊ฑด ๋ก์ง์ ๊ตฌ์ํด๋ณด๋ ค๊ณ ํด๋ ๋๋ฌด ์๋ผ์ ๋ต๋ตํ ๋ง์์ ์ฌ๋ ค๋ด
ํ์ฌ ์ ์ค๋ธ์ ํธ๋
์ด๋ฐ ์ํ์
์บก์ ์ฝ๋ผ์ด๋๋ ์ถฉ๋ ๋๊ฒ๋ ํ ์ฝ๋ผ์ด๋
์ํด ์ฝ๋ผ์ด๋๋ ํด๋น ์ฝ๋ผ์ด๋ ์์ ํ๋ ์ด์ด๊ฐ ๊ฐ์ง๋๋ฉด ์ด๋ํจํด์ ์ค์งํ๊ณ ์ถ๊ฒฉํจํด์ ๋ฐ์ํ๋๋ก ๋ฃ์
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ๋ฌธ์ ์ ์ด
ํ๋ ์ด์ด๊ฐ ์ฝ๋ผ์ด๋ ์์ ๊ณ์ ์กด์ฌํ๋ฉด๋๊น์ง ์ซ์์์ ํ๋ ์ด์ด๋ฅผ ๋ฐ์ด๋ฒ๋ฆผ
๊ทธ๋ฐ๋ฐ ์ค์ ๊ฒ์๋ค์์๋ ์ผ์ ๊ฑฐ๋ฆฌ๊น์ง๋ง ์ค์์
๊ทธ๊ฑธ ์ด๋ป๊ฒ ๊ตฌํํ๋ฉด ์ข์์ง ๋ก์ง์ ์ ์ด๋ด
์๋ ๋ก์ง
์ถ๊ฒฉ ์ฒดํฌ๋ฅผ ํ ์ํด ์ฝ๋ผ์ด๋ ์ด์ธ์ ์ ์ฝ๋ผ์ด๋๋ฅผ ๋ง๋ฆ(๋ฐ์ค ์ฝ๋ผ์ด๋ ๋ฑ)
์ถ๊ฒฉ ์ฝ๋ผ์ด๋ ์์๋ ๋ค๋ฉด์ ํด๋น ์ฝ๋ผ์ด๋ ์์ ๋ค๋ฉด vector๋ก distance๋ฅผ ์ ์ธํจ
float dist = new vector3.distance(ํ๊ฒ ์์น, ํด๋น ์ต์ ์์น);
๊ทธ ํ ์กฐ๊ฑด๋ฌธ์ผ๋ก dist๊ฐ ์ผ์ ์ดํ๋ก ๋จ์ด์ง๋๊ฑฐ ๊น์ง ์ค์
= ???
๊ทธ๋ฐ๋ฐ ์ด ์ดํ์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ป๊ฒ ํด์ผํ ์ง ๊ฐ์ด ์์กํ๋๋ฐ ๋์์ค ์์๋์ฌ๋์ด ์์๊น?
๋ฅ๋์ผํ๋ฉด์ ๋ดค๋๋ฐ ์ง๋ฌธ๊ธ ์ฐ๊ณ ๋ต๋ณ ๋ฐ์ ๊ธ์ญํ ํ๋๋๋ค์ด ์๋ค๋๊ฑธ ๋ด
๊ทผ๋ฐ ๋ ์ด์ ๊ธ ๋งํฌ๋ ์ฌ๋ ธ๋ค์ํผ ๊ทธ๋ฐ์ง์ ์ํ๋ ๋ฏฟ๊ณ ๋ต๋ณํด์ฃผ๋ฉด ์ข๊ฒ ๋ค..
๋ง๋งํด์ ํ๋ฃจ์ข ์ผ ์๊ฐํด๋ด๋ ์ ์๋๋ค..
++ ์์ 1
์ ์คํฌ๋ฆฝํธ ์์ ์ฝ๋๋ค์
๋ ๋จ ์ฌ๋๋ค ๋ง ๋ค์ข ํฉํด๋ณด๋ฉด ๋ด๊ฐ ์์ธ๋ก ์ ๋ต์ ๊ทธ๋ฆฌ ๋ฉ์ง ์์๊ฑฐ ๊ฐ์์ ๋ค์ ๊ฒํ ํด๋ณด๋ ์ค..
์๊น ๋ป๋ฌ๋ค๋๊ฑด
movement_enemy1()
{
while(movecheck == true)
{
๊ธฐ์กด ์ฝ๋
}
}
๋ฅผ ํด์ ๋ป๋ฌ์..
ํ์ฌ ์บก์ณ์ ์๋ณด์ด์ง๋ง boolํ์ผ๋ก movecheck๋ฅผ ์ ์ธํ์๋ค๊ฐ ๋ป๋์ ์ง์
if(Vector3.distance(monster.position, player.position) < 1.0f) Move = false;
move์ ํด๋นํ๋ ํจ์๋ฅผ false๋ก ๋ง๋๋ ค๋ฉด cancleinvoke(ํจ์๋ช , ์๊ฐ) ์ด๋ ๊ฒ ํด์ผํ๋๊ฑด๊ฐ? ์ฒจ์ ์๊ฐํ๋ ๋ก์ง์ด ๋ค๊ฐ ์ ์ด์ค ์ด ๋ก์ง์ธ๋ฐ ์ด๊ฑฐ ๊ตฌํ์ ๋ด ๋จธ๋ฆฌ๋ก ํด๋ณด๋ ค๋๊น ์๋๋๋ผ๊ณ ..
onColliderStay2D ์์ other์ position ๊ณผ ํด๋น ์ค๋ธ์ ํธ์ position ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ ์ฒดํฌํ์ . ์ผ์ ๊ฑฐ๋ฆฌ ์ด์์ด๋ฉด ์ ๊ทผ, ์ผ์ ๊ฑฐ๋ฆฌ ์ดํ๋ฉด ๋ฌผ๋ฌ๋๋ ์์ผ๋ก
๋ฌผ๋ฌ๋๋ ๊ฒ์ ๋ํ ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ์ง์ผํ ์ง ๋ชจ๋ฅด๊ฒ ์ด ๋ค๊ฐ ๋งํ ๊ฑฐ๋ฆฌ ์ฒดํฌ๋ circle collider์ ํธ๋ฆฌ๊ฑฐ๋ก ์ฒดํฌ ํด์ ๋์์ค์ด์ผ
์ ๊ทผ, ํํผ๋ ์ ์ด ํ๋๊ฑฐ๋๊น ์ ์๊ฒ OnTriggerStay2D ํจ์๋ฅผ ๋ฃ๊ณ , if(other๊ฐ ํ๋ ์ด์ด) ์ผ ๊ฒฝ์ฐ, if(๊ฐ๊น์ฐ๋ฉด) ํํด; else if(๋ฉ๋ฉด) ์ ๊ทผ; ์ผ๋ก ์๊ฐํด๋ณด์
์๊ธฐ position์์ other ๋ก ๊ฐ๋ ๋ฒกํฐ๋ฅผ ๊ตฌํ๋ค์, ๊ฐ๊น์ฐ๋ฉด ๋ฒกํฐ์ ๋ฐ๋๋ฐฉํฅ์ผ๋ก, ๋ฉ๋ฉด ๋ฒกํฐ๋ฐฉํฅ์ผ๋ก ์์ง์ด๊ฒ ํด๋ด
ํ๋ ์ด์ด๋ ์ผ์ ๊ฑฐ๋ฆฌ ์ด์ ๊ฐ๊น์ฐ๋ฉด move =false ํ๊ณ ์ ๋ฐ์ดํธ ํจ์์์ move๊ฐ true์ผ๋๋ง ํ๋ ์ด์ด ํํ ์ด๋ํ๊ฒ
bool movecheck๋ก move์ ์ ์ ์ while(movecheck == true)๋ฅผ ๋ฃ์๋๋ฐ ์ด๊ฑฐ ํ๊ณ ๋น๋ ๋๋ฆฌ๋๊น ์ ๋ํฐ๊ฐ ๋ฉ์ถค.. ๋ญ๊ฐ ๋ฌธ์ ์ผ๊น
๋ฌดํ๋ฃจํ ๋๋๊ฑฐ๊ฐ์๋ฐ.. ๋น ์ ธ๋์ฌ ๊ตฌ๋ฉ ์ ๋ง๋ค์์?
else๋ก ํด๋น ์ํฉ ์๋๋๋ bool ๋นํ์ฑํ ๋์ ๋๋ฐ๋ ๊ทธ๋ฌ๋ค..
์ด๋ฐ๊ฑด ๋ถ์ฌ์ฐ๊ธฐ์์ผ๋ก if๋ฌธ์ด๋ฌ๋ฉด์ ํ๋ฉด ์ง์ง ์ง์ฅ์ผ๋ก๊ฐ๋ ์ง๋ฆ๊ธธ์ด๋ค
5์๊ฐ์ ๋ ์ด๋ค ๋ง์๋จน๊ณ ๋ค์ฃผ์์ผ๋ก๋๋ฆฌ๊ณ ์์ ๋ชฌ์คํฐ ๊ฑฐ๋ฆฌAI๋ฅผ ๊ฑฐ๋ฆฌ์กฐ์ ํฌํจํด์ ์ฒ์๋ถํฐ ๋ค์์ง์
์ด๋ป๊ฒ ์ฝ๋ ๊น๋ํ๊ฒ ์ง์ผํ ์ง ๊ฐ์ด ์์จ๋ค..
ํธ๋ฆฌ๊ฑฐ ๊ฑธ๋ฆฌ๋ฉด ์ฃผ๊ธฐ์ ์ผ๋ก ์๋ํ๋ ํ์ด๋จธ ํ๋ ๋ง๋ค์ด์ ๊ฑฐ๋ฆฌ ์ฒดํฌ ํ๋ฉด ์๋จ? ๊ฑฐ๋ฆฌ ๊ฐ๊น์ฐ๋ฉด move false ํ๊ณ ํ๋ ์ด์ด๊ฐ ๋ฒ์ ๋ฐ์ผ๋ก ๋๊ฐ๋ฉด ํ์ด๋จธ๋ move ๋๊ณ ๋๊ณ . ๋ฌผ๋ก ๋ ์ต์ ํ ๊ฐ์๊ฑฐ ๋ชจ๋ฅด๋ ์ด์ง์. ๊ทธ๋ฆฌ๊ณ while๋ฌธ์ ํจ๋ถ๋ก ์ฐ๋ฉด ๋ป๋จ.
์์ ํ๋๋ฐ ํน์ ๋ด์ค์ ์์๊น?
๋จ์ด ์ด๊ฑฐ ์์๋จน๊ธฐ ํ๋๋ค. ์จํธ๋ฆฌ๊ฑฐ๋ก ์กฐ๊ฑด ์ง๋ ๋ฌธ์ ์๊ธฐ๋ ๊ฒ ๊ฐ์. ์ผ์ ๊ฑฐ๋ฆฌ์์ ๋ฉ์ถ๊ณ ์ถ์ผ๋ฉด ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ด ํ์ํ๋ฐ ๊ทธ๋ฅ ๊ฑฐ๋ฆฌ ์ฒดํฌํด์ bool ๊ฐ ๋ฐ๊พธ๋ฉด ์๋จ? ์ ์ํ์์ ์ด๋ป๊ฒ ํ๋ ค๋ฉด if(B_tracing) ๋ฐ์ if๋ฌธ ํ๋ ๋ ๋ฃ์ด์ ์ผ์ ๊ฑฐ๋ฆฌ ์ด์์ผ๋๋ง ์คํ๋๊ฒ ํ๋ฉด ์๋๋ ์ถ์. ๊ฐ๊น์ฐ๋ฉด ๋น ์ ธ๋๊ฐ๊ณ .
์ค์ผ์ด..์ต๋ํ ์๊ฐํด๋ณด๋์ค..์๋๋ฉด ์์ ๋ฌ์๋์๊ฒ ใ ใ
๊ทผ๋ฐ ์ ๊ฑธ ์ด๊ฑฐ์ง๋ก ํด๊ฒฐ ํ๋ค๊ณ ํด๋ ๋ค๋ฅธ ๊ฑฐ ์ถ๊ฐํ๋ ค๋ฉด if๋ฌธ๋ง ๋ฌดํํ ๋์ด๋ ๋ฏ. ์ ํ์ํ๋จธ์ ์ธ๊ฐ ๊ทธ๊ฑธ ์ฐพ์๋ณด๋๊ฒ ๋์ค์ ์ํด์ ์ข์ ๊ฒ ๊ฐ๋ค.
์ ai๋ ๊ณต๊ฒฉ, ํผ๊ด๋ฆฌ๋ง ํ๋ฉด ๊ฒ์์ ํต์ฌ์ ์ธ ๊ธฐ๋ฅ์ ๋๋ต ๊ตฌํํ๋๋ฐ..์ด๊ฒ ํ๋๋ค..