#1 ๊ธธ์ฐพ๊ธฐ (1) - A* ์๊ณ ๋ฆฌ์ฆ ๋ณํ
์๋ ! ๋๊ธ ์ฐ๊ณ ์ข ์ข ๊ฒ์ ๋ฆฌ๋ทฐ ๋จ๊ธฐ๋ ๊ฐ๋ฐ์์ผ.
์ ๊ธฐ์ ์ผ๋ก๋ ์๋๋๋ผ๋, ๋๋ ์ง๊ธ ๋ด๊ฐ ๋ง๋๋ ๊ฒ์์ ๊ฐ๋ฐ ์ผ์ง๋ฅผ ์จ๋ณด๋ ค๊ณ ํด.
์ค๋์ RTS ๋ฐฉ์์ ์ ๋ ๊ธธ์ฐพ๊ธฐ์ ๋ํด ์ด์ผ๊ธฐ๋ฅผ ํด๋ณด๋ ค๊ณ .
๊ฐ์ฅ ๋๋ฆฌ ์๋ ค์ง ์๊ณ ๋ฆฌ์ฆ์ A*๊ฐ ์์ง. ๊ณ ๋ผ๋ ๋์ ์์์ ์ฐธ๊ณ ํ๋ฉด ์ฝ๊ฒ ๋ง๋ค ์ ์์ด.
๊ฐ๋จํ ์ค๋ช ํ๋ฉด, BFS๋ฅผ ์ด์ฉํ๋ ๊ฑฐ์ผ.
์์์ ๋ ธ๋๋ฅผ S, ๋์ฐฉ์ ๋ ธ๋๋ฅผ E, ๋ฒฝ์ X๋ผ๊ณ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์๊ฒ ์ง.
ํ์ฌ ์ง์ S๋ก๋ถํฐ ์ฃผ๋ณ ๋ ธ๋๋ฅผ ํ๋ํ๋ ๊ฒ์ฌํด์, ๊ฐ ์ ์ (๋ ธ๋)๊น์ง ๊ฐ ์ ์๋ ์ด์ ๋ ธ๋๋ฅผ ์ญ ์ ์ฅํด๋.
๊ทธ ๋ค์ ๋์ฐฉ์ ์ ๋๋ฌํ๋ฉด, ๋์ฐฉ์ ๋ถํฐ ์ด์ ๋ ธ๋๊น์ง backtracing์ ํด์ ํด๋น ์ง์ญ๊น์ง ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ์๋ผ ์ ์์ง.
์ง๊ด์ ์ด๊ณ ์ฌ์ด ์๊ณ ๋ฆฌ์ฆ์ด์ผ. ๊ทธ๋ฆผ์ผ๋ก๋ ์ด๋ฐ ์์ผ๋ก ๋์ํด.
A*๋ ๋๊ฐ์ ํต๊ณผ๋ฅผ ํ๊ฒ ์ต์ ์ ์ค ์๋ ์๊ณ , ์ง๊ฐ์ผ๋ก๋ง ์ด๋ํ๊ฒ ํ ์๋ ์์ด.
๋ด๋ถ์ ์ผ๋ก ๊ฑฐ๋ฆฌ ๊ฐ์ ๊ดํ G, H, F๋ผ๋ ๋ณ์๋ฅผ ๋ค๊ณ ๋ค๋๋ฉด์, ์ด๊ฒ๋ค์ ๋น๊ตํด์ ์ด๋ค ๊ฒ ์ต๋จ ๊ฒฝ๋ก์ธ์ง ํ์ ํด๋.
G๋ ์์์ ์ผ๋ก๋ถํฐ ์ด๋ํด์จ ๊ฑฐ๋ฆฌ,
H๋ |๊ฐ๋ก|+|์ธ๋ก| ์ฅ์ ๋ฌผ ๋ฌด์ํ ๋ชฉํ๊น์ง์ ๊ฑฐ๋ฆฌ,
F๋ G + H ๋ผ๊ณ ํด.
ํํผ A*๋ฅผ ์ด์ฉํ๋ฉด ๊ฒฝ๋ก๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ฐพ์ ์ ์์ด. ์๋๋ ๋ด๊ฐ ๋ง๋๋ ๊ฒ์์์์ ๊ฒฝ๋ก ํ์์ด์ผ.
ย (Figure3.1) ๋๊ฐ์ ๋ถํ | ย (Figure3.2) ๋๊ฐ์ ํ์ฉ, ๋๊ฐ์ ํต๊ณผ ๋ถํ | ย (Figure3.3) ๋๊ฐ์ ํ์ฉ, ๋๊ฐ์ ํต๊ณผ ํ์ฉ |
๊ทธ๋ฐ๋ฐ ๋ฌธ์ ๋, ์ด ๊ฒ์์์๋ ์ ๋์ด ์ด๋ ๊ฒ ์ง๊ฐ/45๋ ๋ณดํ์ ํ๋ฉด ์ ๋์ด.
์ปจํธ๋กค์ด ์ค์ํ ๊ฒ์์ด๋ผ ์ ์ ๊ฐ ์์น ์ง์ ์ ํ์ ๋ ํด๋น ๋ฐฉํฅ๊น์ง direct๋ก ๊ฐ์ผ ํ๊ฑฐ๋ .
์๋ฅผ ๋ค๋ฉด ์ด๋ฐ ์ด๋์ ํด์ผ ํ๋ ๊ฑฐ์ง.
(Figure4.1)
์ฝ๊ฐ ๋ ๋ณต์กํ๊ฒ๋ผ๋ฉด ์ด๋ ๊ฒ ์ด๋ํด์ผ ํ๊ฒ ๊ณ .
(Figure4.2)
์ด๊ฒ์ ์ด๋ป๊ฒ ํ ์ง ๊ณ ๋ฏผํ๋ค๊ฐ ๋ ์ค๋ฅธ ๋ฐฉ๋ฒ์, ํ์๋ ๊ฒฝ๋ก์ ๋ชจ๋ ๋ ธ๋์ ๋ํด ์์ ๋ถํฐ ์ข ์ ๊น์ง
Ray๋ฅผ ์ด์ ๋ฒฝ์ด ์๋์ง ์๋์ง๋ฅผ ๋ณด๊ณ , ์ง์ ์ฐ๊ฒฐ ๊ฐ๋ฅํ ์ง์ ์ฌ์ด์ ๋ชจ๋ ์ ์ ์ง์ฐ๋ ๊ฑฐ์ผ.
๊ฐ์ธ์ ์ผ๋ก ์ด๋ ๊ฒ ๋ชจ๋ ๋ ธ๋์ ๋ํด Ray๋ฅผ ์ด๋ณด๋ ๊ฒ ์ข์ ๊ฒ ๊ฐ์ง๋ ์์๋ฐ,
๊ฐ์ฅ ๊ฐ๋จํ๊ฒ ๋ ์ฌ๋ฆด ์ ์๋ ๋ฐฉ๋ฒ์ด๊ณ , ๊ธฐํ์ Grid์ ํฌ๊ธฐ๊ฐ ๊ทธ๋ ๊ฒ ํฌ์ง ์์์ ์งํํด๋ดค์ด.
์๋ฅผ ๋ค์ด๋ณด์. ์์์ ์ด๋ฐ ์ํ์ผ. ๋ง์ฐฌ๊ฐ์ง๋ก S๋ ์์, E๋ ์ข ๋ฃ, X๋ ๋ฒฝ์ด์ผ.
๋ ธ๋๋ฅผ ๊ฒ์ฌํ๊ธฐ ์ํ ๋ณ์ i, j๋ฅผ ์ถ๊ฐํด๋ณด์.
i=0, j=1 ์์น์ ์์ด. 0๊ณผ 1์ ์ฐ๊ฒฐ ๊ฐ๋ฅํด.
j๋ฅผ ํ๋ ์ฌ๋ฆฌ๊ณ ๋ค์ ๊ฒ์ฌํด๋ด. j==2์ i==0์ ์ฐ๊ฒฐ ๊ฐ๋ฅํด.
๋ค์ j๋ฅผ ์ฌ๋ฆฌ๊ณ ๊ฐ์ ์์ ์ ๋ฐ๋ณตํด๋ด. ์ด ๊ฒฝ์ฐ ๋ํธ๋จธ๋ฆฌ์ ๊ฑธ๋ฆฌ์ง๋ง, ์ด ์์ ์์๋ ์ฐ๊ฒฐ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ์ด.
๋ค์ j๋ฅผ ์ฌ๋ฆฌ๊ณ ๊ฒ์ฌํด๋ด. j==4์ด๊ณ i==0์ผ ๋ ๋ ๋ ธ๋๋ ๊ฐ์ด๋ฐ ๋ฒฝ์ด ์๊ธฐ ๋๋ฌธ์ ์ฐ๊ฒฐ๋์ง ์์.
๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๋ ์ง๊ธ ์ฐ๊ฒฐ์ด ์ ๋๋ ๋ ธ๋์ ์ง์ ๋ ธ๋ย (j-1)๊น์ง ์ฐ๊ฒฐ ๊ฐ๋ฅํ๋ค๋ ์ฌ์ค์ ์๊ณ ์์ผ๋,
i+1 ๋ถํฐ j-1 ๊น์ง ์ด j-i-2 ๊ฐ์ ๋ ธ๋๋ฅผ 1๋ฒ ์์น์์ ์ง์์ฃผ๋ฉด ๋ผ.
์ด๋ ๊ฒ ๋๋ฉด ๊ฒฝ๋ก๋ ์ด๋ ๊ฒ ๋๊ฒ ์ง.
i==0 ์ธ ๊ฒฝ์ฐ์ ์ต์ ๋ค์ ์ข ์ ์ ์ฐพ์์ผ๋, i๋ฅผ ํ ์นธ ์ฌ๋ฆฌ๊ณ j๋ ๊ทธ์ ๋ง์ถฐ ์ ๋ฐ์ดํธ ํด์ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ๊ฐ์ ์์ ์ ๋ฐ๋ณตํด๋ด.
j==5, i==1์ผ ๋ ๋ ๋ ธ๋๋ ์ง์ ์ฐ๊ฒฐํ ์ ์์์ด ํ์ ๋์ด.
๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ์ด์ ๋ ธ๋๋ฅผ ์ง์์ฃผ์.
๊ทธ๋ฌ๋ฉด ์ด๋ ๊ฒ ๋๊ฒ ์ง.
์ดํ ์ข ์ ๊น์ง ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ญ ์งํํด๋ณด๋ฉด ๋ผ.
์ดํ ๋จ์ ์ ์ด ์์ผ๋ฏ๋ก j๋ ์ด ๋ ธ๋ ์์ธ 5๊ฐ ๋๊ณ , ๋ฐ๋ณต๋ฌธ์์ ํ์ถํด.
๊ทธ๋ฌ๋ฉด ๋จ์ ์ ์ ๋ํด์๋ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ฉด ๋๊ตฌ.
๊ทธ๋ฌ๋ฉด ์ต์ข ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ ์ด ๋์.
๋ ๊ฒฝ๋ก์ ์ง์ ๋น๊ต
์๋ ๊ฒฝ๋ก | ย ์ ๊ฒฝ๋ก |
์ด ๋ฐฉ๋ฒ๋๋ก๋ผ๋ฉด Figure4.1๊ณผ Figure4.2์ ๋ชจ๋ ๋์ํ ์ ์์ด์,
์ค๊ธฐ๊ธฐ์์ ๋ถํ๊ฐ ๋๊ปด์ง์ง ์๋๋ค๋ฉด ์ด๋๋ก ๊ณ์ ์งํํ ์์ ์ด์ผ.
์ธ๊ฒ์ ๋ฐ์
๋๊ฐ์ ํ์ฉ, ๋๊ฐํต๊ณผ ๋ถํ | ย ๋๊ฐ์ ํ์ฉ, ๋๊ฐํต๊ณผ ํ์ฉ |
๊ทธ ๋ฐ์๋ A* ์ธ์ ์ฑ๋ฅ ์ ํจ๊ณผ๊ฐ ๋ฐ์ด๋ ๊ฒ์ผ๋ก ์๋ ค์ง ๊ฑด JPS๋ผ๋ ๊ฒ ์๊ณ ,
ํนํ ๋ค์ ์์์์๋ JPS(B)๋ฅผ ์ฌ์ฉํ์ฌ ์๋ต ์๋๋ฅผ 100ms ์ดํ๋ก ์์ ์ ์ผ๋ก ๋ฝ์๋ค๊ณ ํด.
์ค์ ๋ก ์๋น์ค๋๊ณ ์๋ ๊ฒ์์์ ์ฌ์ฉ๋ JPS(B) ์๊ณ ๋ฆฌ์ฆ์ ๊ณต์ ํ๊ณ ์๋ค์๋,
A*๋ณด๋ค ๋น ๋ฅธ ์ฑ๋ฅ์ ์ป์ด์ผ ํ๋ ๊ฒ์์ ๊ฐ๋ฐํ๋ค๋ฉด ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์.
๋์ค์ C# version์ผ๋ก ํฌํ ํด๋ณด๊ณ ๋์ commit ํด๋ณด๋ ค๊ณ .
๋ค์์๋ A* ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ธธ ์ฐพ๊ธฐ๋ฅผ ํ๋ ๊ฒฝ์ฐ ๋ชฉ์ ์ง์ ๊ฐ ์ ์์ ๋, ๊ทผ์ฌ ์ข ์ ์ด๋ผ๋ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ด์ผ๊ธฐํด๋ณด์.
์ค๋ ๊ฐ๋ฐ ์ผ์ง๋ ์ฌ๊ธฐ๊น์ง์ผ.
๊ด์ฌ ์๋ค๋ฉด ์๋์ ์ธ๋ ๊ฒ์ ์ฒดํ ์๊ฐ๋ ๋ณด๊ณ ์๊ฒฌ ๊ณต์ ํด์ค!
[์ฒดํ ์๊ฐ ๋ชจ์๋ณด๊ธฐ]
#1 ํด๋กํฌ ํด๋ญ - https://gall.dcinside.com/game_dev/87748
#2 ์ํฝ ๋ ์ ๋๋ฆฌ - https://gall.dcinside.com/game_dev/87918
#3 ํฌ๋ ์ด์งํ - https://gall.dcinside.com/game_dev/88036
#4 ๋ฌธ๊ฒฝ์์ฌ - https://gall.dcinside.com/game_dev/88280
#5 ๋์ผ - https://gall.dcinside.com/game_dev/88490
#6 ๋กํ ํน - https://gall.dcinside.com/game_dev/88527
#7 ํ์ดํผ ์ ํ - https://gall.dcinside.com/game_dev/88628
#8 Brackeys Game Jam 2022 - https://gall.dcinside.com/game_dev/88831
#9 Brackeys Game Jam 2022 ํํธ ํฌ - https://gall.dcinside.com/game_dev/88942
#10 ์ข๋น ์๋ฐ์ด๋ฒ - https://gall.dcinside.com/game_dev/88975
#11 ๋ด ๋ง๋๋ก ์ค๋ธ ๋ ๋ฐ๋ 4 - https://gall.dcinside.com/game_dev/89136
#12 I'm Still ALive - https://gall.dcinside.com/game_dev/89263
#13 DEMO
#14 KIN:D - https://gall.dcinside.com/indiegame/27851
[๊ฐ๋ฐ ์ผ์ง ๋ชจ์๋ณด๊ธฐ]
#1 ๊ธธ์ฐพ๊ธฐ (1) A* ์๊ณ ๋ฆฌ์ฆ ๋ณํ
#2 ๊ธธ์ฐพ๊ธฐ (2) ์ฐ์ ์์ ํ๋ฅผ ํ์ฉํ์ฌ ๊ทผ์ฌ ๋ชฉ์ ์ง ๊ตฌํ๊ธฐ - TBD
๊ฐ์ถ
์ด๋ฐ๊ฑด ๋ฌด์กฐ๊ฑด ์ถ์ฒ์ด์ง! ๋ฐค์ด๋ผ ๊ธ์ด ์๋ค์ด์ค๋ ๋ด์ผ ์ฝ์ด๋ณผ๊ฒ!
๊บ ๊ณ ๋ง์! ๋์ ๋์ผ๋ฉด ์ข๊ฒ ๋ค~ - dc App
๊ฐ์ถ
์ด๊ฑฐ ์ถ์ฒ์ํ๋ฉด 1๋ฒ๋จ
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
์ต๋จ๊ฒฝ๋ก ํ์ ์ง์ ์งค๋ ๋๊ฐ๋ฆฌ ๊นจ์ก์๋๋ฐ ์์ง์ ์๋๋ง... ์ํ
์ asset store์์ ํ๋ ๊ฑฐ ๋ง๊ณ UnityEngine ์์ component ์ ์๊ฐ ์๋? 3D์ ํ์ ์ผ๋ก NavMesh๋ผ๋ ๊ฑธ ์ธ ์ ์๋ค๊ณ ๋ ํ๋๋ฐ ๊ทธ๊ฑฐ๋ ๋ค๋ฅธ ๊ฑธ๊น? - dc App
๋ก๋ฆฌ ๊ฐ์ถ
๋ ธ๋ ฅํ๊ฐ ๋ฉ์์ง~