์ด์ ๊ฒ์๊ธ :ย https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=70309&exception_mode=recommend&page=1
์ฌ์ฉํ ์์งย
GMS2
--------------------------------------------------------------------------------------
์๋ .
์ค๋์ ๋ด๊ฐ ์ ์๊ณ ๋ฆฌ์ฆ ๋ง๋ ๋ฐฉ๋ฒ์ ๋์ง์ผ๋ฉด์ Context map ์๊ณ ๋ฆฌ์ฆ์ ์ค๋ช ํ๋ ค๊ณ ํด.
์ฐ์ ๋ด๊ฐ ์ฐธ๊ณ ํ ์๋ฃ๋ค์
์ ํ๋ธ ์์์ด๋ย ๋ ผ๋ฌธ
http://www.gameaipro.com/GameAIPro2/GameAIPro2_Chapter18_Context_Steering_Behavior-Driven_Steering_at_the_Macro_Scale.pdf
์ด๋ ๊ฒ ๋๊ฐ ์ฐธ๊ณ ํ์ด.
Context map์ ๊ฐ๋ ์ ์๊ฐ๋ณด๋ค ๊ฐ๋จํด.
๋ฌผ์ฒด๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ ๋ฐฉํฅ์ ๊ฐ์ค์น๋ฅผ ๋๊ณ , ๊ฐ์ฅ ๋์ ๊ฐ์ค์น๋ฅผ ๊ฐ์ง ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋๊ฒ ๋์ด์ผ.
๊ฐ์๊ธฐ ๊ฐ์ค์น๋ผ๊ณ ํด์ ์ด๋ ต๊ฒ ๋๊ปด์ง ์ ์์ด.
๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด ์ฝ๊ฒ ์ดํดํ ์ ์์๊ฑฐ์ผ.
๋ด ๊ฒ์์์ ํ๋กํ ํ์ ์ผ๋ก ์ด ๊ฐ์ฒด๊ฐ ์ฌ๋ผ์์ด๋ผ ์์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ด ์ ์ฉ๋๋ ๊ฐ์ฒด๋ฅผ ์ฌ๋ผ์์ด๋ผ๊ณ ๋ถ๋ฅผ๊ฒ.
A, B ๋ชจ๋ ์ฌ๋ผ์์ดย ์ซ์ ์ ์ด๊ณ ๊ฒ์ ์ฌ๊ฐํ์ ๋ฒฝ์ด์ผ.ย
์ฌ๋ผ์ ๊ธฐ์ค์ผ๋ก A์ B๊ฐ ์๋ ๋ฐฉํฅ์ย ์ด์์ ์ธ ๋ฐฉํฅ ์ผ๊ฑฐ์ผ.
๋ฐ๋ฉด์ ๋ฒฝ์ด ์์ผ๋ฉด ๊ทธ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ์ ์์ผ๋ ๋ฒฝ์ผ๋ก์ ๋ฐฉํฅ์ ํผํด์ผ ํด.
์ด ๋ ๊ฐ์ง ์์ด์ ์ธ ๊ฐ๋ ์ผ๋ก ๊ฐ์ค์น๋ฅผ ๊ณ์ฐํด.
์ด ์ฌ์ง์ ์ ํ๋ธ ์์์์ ๊ฐ์ค์น๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์์ ๋ณด์ฌ์ค ์์์ผ.
์ ์ ์ค์ฌ์ ์ฌ๋ผ์์ ์์น, ์ด๋ก์ ์์ ์ซ์์ผ ๋๋ ์ ์ ๋ํ๋ด.
์ฌ๊ธฐ์ ์ ์ ๊ธธ์ด๋ ๊ฐ ๋ฐฉํฅ๋ง๋ค์ ๊ฐ์ค์น๋ฅผ ๋ํ๋ด.
์ซ์์ผ ๋๋ ์ ๊ณผ ์ผ์ง์ ์ด ๋๋ ๋ฐฉํฅ์ด ๊ฐ์ฅ ๋์ ๊ฐ์ค์น๋ฅผ ๊ฐ๊ฒ ๋์ง.
์ด ์ํฉ์์๋ ์ฌ๋ผ์์ ์ ์ ํฅํด ์ผ์ง์ ์ผ๋ก ๋์๊ฐ๊ฑฐ์ผ.
์ด๋ฒ์ ์๊น ์ํฉ์์ ๋นจ๊ฐ ์์ด ์๊ฒผ์ด. ๋นจ๊ฐ ์์ ๋ฒฝ ๊ฐ์ด ํผํด์ผํ ๋์์ ๋ํ๋ด.
์ฌ๋ผ์์ ๋ฒฝ์ ํผํด์ ์ ์ ์ซ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฒฝ์ ํผํ๋ ค๊ณ ํ๋ ๊ฐ์ค์น๊ฐ ์๊ฒจ.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ ์ํฉ์์ '์ ์ ์ซ์ ๋ฐฉํฅ์ ๊ณ ๋ฅด๋ ๊ฐ์ค์น'๋ง๊ณ ๋ '๋ฒฝ์ ํผํ ๋ฐฉํฅ์ ๊ณ ๋ฅด๋ ๊ฐ์ค์น'๊ฐ ์๊ฒจ.
์ด ๋์ ๋ํ๊ณ ๋ ธ๋ฉ๋ผ์ด์งํด์ ๊ณ์ฐํ ๊ฐ์ค์น๊ฐ ๊ทธ๋ฆผ์ ๋์์์ด.
์ด ์ดํ์๋ ์ ์ ์ถ๊ฐํ๊ฑฐ๋ ๋ฒฝ์ ์ถ๊ฐํด๋ ๋น์ทํ ๋งฅ๋ฝ์์ ํ๋ฌ๊ฐ.
์๋ฆฌ๋ ๊ฐ๋จํด์ ์ดํดํ๋๋ฐ๋ ํฌ๊ฒ ๋ฌธ์ ์์๊ฑฐ์ผ.
์ฌ๊ธฐ๊น์ง์ ๋ด์ฉ์ด ์์์์ ์ค๋ช ํด์ฃผ๋ AI ์๊ณ ๋ฆฌ์ฆ์ ์ ์ ๋ฐฉ์์ธ๋ฐ
์ค์ ๋ก ์์ ๊ฐ๋ ๋๋ก ๊ตฌํํด๋ณด๋๊น ์ฌ๋ฌ ๋ฌธ์ ๊ฐ ์๊ธฐ๋๋ผ๊ณ ?
https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=69387&s_type=search_subject_memo&s_keyword=context&page=1
๊ทธ ๋ ์ผ๋ ์ง๋ฌธ๊ธ์ด์ผ.ย
์์ฝํ๋ฉด
1. ํผํ ๋์, ์ซ์ ๋์์ด ๋ง์์ง๋ฉด ๋ฉ๋ชจ๋ฆฌ ์๋ชจ๊ฐ ๋๋ฌด ํฌ๋ค.
2. ๊ฐ์ค์น๋ฅผ ๊ณ์ ๋ํ๋ค ๋ณด๋ ํน์ ์ํฉ์์ ๋ป๋ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
2๋ฒ ๋ฌธ์ ์์ ๋งํ ํน์ ์ํฉ์ด ์ด๋ฐ ์ํฉ์ธ๋ฐ, ๋ฒฝ์ด ์์ฒญ ๋ง์์ง๋ฉด ๋ฐฉํฅ์ ์ด์ํ๊ฒ ์ธ์ํ๋ ๋ฌธ์ ๊ฐ ์๊ฒจ.
๊ทธ๋์ ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ฐฉํฅ ๊ฐ์ค์น๋ฅผ ๊ณ์ฐํ ๋ ๋ฒฝ์ ๊ณ ๋ คํ๋ฉด ์๋ ๊ฑฐ ๊ฐ๋ค๊ณ ์๊ฐํ์ด.
๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์์ผ ๊ฒ ๋ค๊ณ ์๊ฐํ์ง.
์์ ์ฐธ๊ณ ํ ๋ ผ๋ฌธ์ ์กฐ๊ธ ์์ฉํด์ ๋ ์ด์ผ์คํ ์ ์ฐ์๊ณ ์๊ฐํ์ง.
Interest ๋ฐฐ์ด์๋ '์ ์ ์ซ์ ๋ฐฉํฅ์ ๊ณ ๋ฅด๋ ๊ฐ์ค์น'๋ฅผ ์ ์ฅํ๊ณ
Danger ๋ฐฐ์ด์๋ '๊ทธ ๋ฐฉํฅ์ ๋ฒฝ์ด ์๋์ง'๋ฅผ True/False๋ก ์ ์ฅํด.
๊ทธ ์ดํ์๋ ์ต๋ ๊ฐ์ค์น๋ฅผ ๊ฐ๋ ๋ฐฉํฅ์ ์ฐพ์ ๋ Danger ๋ฐฐ์ด์ ์ฐธ๊ณ ํด์
๊ทธ ๋ฐฉํฅ์ ๋ฒฝ์ด ์์ผ๋ฉด ๊ทธ ๋ฐฉํฅ์ ์ฐจ๋จํ๋ ๋ฐฉ์์ ์ฌ์ฉํ์ด.
๊ทธ๋ฐ๋ฐ ๋ค์์ ์๊ธด ๋ฌธ์ ๊ฐ ์ค๋ธ์ ํธ์ ํฌ๊ธฐ๊ฐ ๊ณ ๋ ค๊ฐ ์๋๋๊ฑฐ์ผ.
๋ ์ด์บ์คํ ํ ๋ ์ค๋ธ์ ํธ ํฌ๊ธฐ๋์ ๋ฌด๊ดํ๊ฒ ๋ฐฉํฅ๋ง์ ๊ฐ์ง๊ณ ํด์ ์๊ธด ๋ฌธ์ ์ผ.
๊ทธ๋์ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ ์ ์๊ฒ ์๋ ์ฌ์ง์ฒ๋ผ ๋ ์ด์บ์คํ ์ ์ถ๊ฐ๋ก ํ์ด.
์งํ๋ฐฉํฅ์ ์ค๋ธ์ ํธ ํฌ๊ธฐ๋งํผ ๋๋น์ฐจ์ด๋ฅผ ๋๊ณ ๋ ์ด์บ์คํ ์ ํด์
์ข์ธก์ ๋ฒฝ์ด ์์ผ๋ฉด ์ฐ์ธก์ผ๋ก ๊ฐ๊ฒ๋, ์ฐ์ธก์ ๋ฒฝ์ด ์์ผ๋ฉด ์ข์ธก์ผ๋ก ๊ฐ๊ฒ๋ ๋ฐฉํฅ์ ๋ณด์ ํ์ด.
์ด๋ ๊ฒ ํ๋๊น ์ฝ๊ฐ์ ๋ฒ๊ทธ๋ค์ด ์๊ธด ํ์ง๋ง ์ ์์ง์ด๊ธด ํ๋๋ผ๊ณ .
์ฌ๋ผ์์ด ์ ์ ์ซ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ ๊ฒ ์์ฑ์ด ๋๋๋ฐ
์์์ ์ ์ฒ๋ผ ์ํฉ์ ๋ฐ๋ผ ๋๋ง๊ฐ๊ธฐ๋ ํ๊ณ ๋น๊ธ๋น๊ธ ๋๋ AI๋ฅผ ๋ง๋ค๊ณ ์ถ๋๋ผ๊ณ .
๊ตฌ์ฒด์ ์ผ๋ก
player_diff : ์ฌ๋ผ์๊ณผ ํ๋ ์ด์ด์ ๊ฑฐ๋ฆฌ
strafe_range: ๋น๊ธ๋น๊ธ ๋๋ ๊ฑฐ๋ฆฌ
๋ง์ฝ์ player_diff > strafe_range ์ด๋ฉด ์ฌ๋ผ์์ด ํ๋ ์ด์ด๋ฅผ ์ซ๊ณ
player_diff == strafe_range ์ด๋ฉด ์ฌ๋ผ์์ด ํ๋ ์ด์ด๋ฅผ ์ค์ฌ์ผ๋ก ๋น๊ธ๋น๊ธ ๋๊ณ
player_diff < strafe_range ์ด๋ฉด ์ฌ๋ผ์์ด ํ๋ ์ด์ดํํ ์ ๋๋ง๊ฐ๊ฒ ๋ง๋ค์์ด.
๊ทธ ๋ฐฉ๋ฒ์ ๊ฐ์ค์น๋ฅผ ์ฃผ๋ ๋ฐฉ์์ ๋ค๋ฅด๊ฒ ํด์ ๋ง๋ค์์ด.
if(state == ai_state.chase) contextMap[i] = 1.0 - (dot);
if(state == ai_state.backward) contextMap[i] =ย (1.0 - abs(dot - 0.9)) * 2;
๋ด๊ฐ ์์ค์ ์ฌ์ฉํ๋ ์ฝ๋์ธ๋ฐ, ์์๋๋ก ์ซ๊ธฐ ๋น๊ธ๋น๊ธ๋๊ธฐ ๋๋ง๊ฐ๊ธฐ ์์ด์ผ.
dot๊ฐ์ ์ฌ๋ผ์์์๋ถํฐ ํ๋ ์ด์ด๊น์ง์ ๋ฐฉํฅ์ ๋ ธ๋ง๋ฒกํฐ๋ก ๋๊ณ ๊ฐ ๋ฐฉํฅ๊ฐ๊ณผ์ ๋ํธ๊ณฑ์ ๊ตฌํด์
0~1๊ฐ์ผ๋ก ์ผ๋ฐํ์ํจ ๊ฐ์ด์ผ.
์ด๋ ๊ฒ ํ๋๊น ์๋ก์ด ๋ฌธ์ ์ ์ด ์๊ธฐ๋๋ผ๊ณ .
๋น๊ธ๋น๊ธ ๋๋ ์ํฉ์ผ ๋ ์ฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ข์ฐ๋์นญ์ด๋ค ๋ณด๋๊น
์์ฃผ ์ฝ๊ฐ ์ฐ์ธก์ผ๋ก ์์ง์ด๋ฉด ์ข์ธก์ด ๊ฐ์ค์น๊ฐ ๋๊ณ
๋ฐ๋๋ก ์์ฃผ ์ฝ๊ฐ ์ข์ธก์ผ๋ก ์์ง์ด๋ฉด ์ฐ์ธก์ด ๊ฐ์ค์น๊ฐ ๋์์
๊ฒฐ๊ตญ ์ ๋ ๊ฒ ์งํฐ๋ง์ด ์๊ฒจ.
์ด๊ฑธ ๋ง์๋ ค๊ณ ์ข, ์ฐ์ธก์ค ํ ์ชฝ์์๋ง ๋ฐฉํฅ์ ๊ณ ๋ฅด๋๋ก ๋ฐ๊ฟจ์ด.
๊ทธ๋ฆฌ๊ณ ์ข์ธก์ผ๋ก๋ง ๊ฐ์ง ์ฐ์ธก์ผ๋ก๋ง ๊ฐ์ง๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด์
'์ข ์ฐ์ธก ๋ชจ๋ ๊ณ ๋ คํ์ ๋ ์ต๋ ๊ฐ์ค์น'์ 'ํ ์ธก๋ฉด๋ง ๊ณ ๋ คํ์ ๋ ์ต๋ ๊ฐ์ค์น'์ ์ฐจ์ด๊ฐ 0.75์ด์ ๋๋ฉด
๊ณ ๋ คํ๋ ๋ฐฉํฅ์ ๋ฐ๊พธ๊ฒ ๋ง๋ค์์ด.
์ด์ ๋ด๊ฐ ์ํ๋๋๋ก ์์ง์ด๋ค.
์ ๋ฆฌํ๋ฉด์ ๋ด๊ฐ ์๊ฐํ๋ Context map์ ์ฅ์ ์ ๋งํด์ค๊ฒ.
1. A* ์๊ณ ๋ฆฌ์ฆ๊ฐ์ด ๋งต ์ ์ฒด๋ฅผ ๊ณ ๋ คํ ํ์๊ฐ ์์ด. ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ๋์ด ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ ์๊ธฐ์ง.
2. ๋ ์ด์บ์คํ ์ ๋ฒฝ ๋ฟ๋ง ์๋๋ผ ์ ์ ์ถ๊ฐํ๋ฉด ์๋ก์๋ก๋ฅผ ํผํ๋ ค๊ณ ํด.
๋ ์ฅ์ ๋ง ์๋๊ฑด ์๋๊ณ , ๋จ์ ๋ ์์ด.
1. ์ ๋ฒ๊ทธ๊ฐ ๋ง์. ์๋ง ์ค๋ธ์ ํธ ํฌ๊ธฐ ๊ณ ๋ ค๋ฅผ ๋ด๊ฐ ์ ๋๋ก ๋ชปํด์ ์๊ธด๊ฑฐ ๊ฐ์.
๊ทธ๋์ ์ฌ์ค Context map์ ๋ฌธ์ ์ธ์ง ๋ด๊ฐ ๋ฌธ์ ์ธ์ง ์ ๊ตฌ๋ถ์ด ์๊ฐ..
2. ์ํฉ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ ๋ณ๋์ด ์ ์ ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ์จ๋ ๋ ์ํฉ์์๋ ์๊ฐ๋ณด๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋จน์ด.
์๋ฌด๋๋ ๋ชจ๋ ๋ฐฉํฅ์ ๋ํด ๋ ์ด์บ์คํ ์ ์๊ณ ๊ฐ์ค์น๊ฐ์ ๊ณ์ฐํด์ ๊ทธ๋ฐ๊ฑฐ ๊ฐ์.
๊ทธ๋๋ ์ด ๋จ์ ๋ค์ด ์น๋ช ์ ์ด์ง๋ ์์์ ์์ธ์ฒ๋ฆฌ๋ ์ฝ๊ฐ์ ์์ ์ผ๋ก ๊ณ ์น ์ ์๋๋ผ๊ณ .
์ฌ๊ธฐ๊น์ง ๊ธด ๊ธ ์ฝ์ด์ค์ ๊ณ ๋ง๊ณ , ํน์๋ ํผ๋๋ฐฑํด์ค ๊ฑฐ ์์ผ๋ฉด ์์ ๋กญ๊ฒ ํด์ค.
์ธ์ ๋ ๋์๋๋ ์ถฉ๊ณ ๋ ํ์์ด์ผ!
์๋ฒฝํ ์ ๋๋ฉ์ด์ ์ด๋ค ๊ฐ๊ฒ๋ ๋ฏ
์ค์ฐ.. ๋ง์ ์ฐธ๊ณ ํ๊ณ ๊ฐ๋๋ค
AI๊ฐ ์ง๋จ๋ฆฐ์น ํ๋๊ฑฐ์ด ๋ณด๋๊น ์ง์ง ์์ฒญ ๋ฉ์ฏ๋ค์ ์งฑ์งฑ
์ค ์ฐธ๊ณ ํด์ ๋ค์์ ์จ๋จน์ด์ผ๊ฒ ๋ค
๋๋ฌผ๋๊ฒ ๋ฉ์๋ ธ