Behaviour Tree์ ๋ํ ์๊ฐ๋ก, ์์ ์ ์ฌ์ธต์ ์ธ ์ค๋ช ๊ณผ ๊ฐ๋ ฅํ ํธ๋ฆฌ๋ฅผ ๋ง๋๋ ๋ฐ ํ์ํ ๋ช๊ฐ์ง์ ํ๋ ํฌํจ๋์ด ์๋ค.
์ธํฐ๋ท์๋ Behaviour Tree ํํ ๋ฆฌ์ผ๊ณผ ๊ฐ์ด๋๊ฐ ๋ง์ด ์์ง๋ง Behaviour Tree ์ ์ค์ ์ฝ๋ ๊ตฌํ์ ์ค์ ์ ๋๊ฑฐ๋, ๋ค์๊ณผ ๊ฐ์ ๋ค์ด์ด๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ์ค์ ์ ์ฉ ๊ฐ๋ฅํ ์ ์์ด ์ผ๋ฐ ๋ฌธ๋งฅ์ด ์๋ ๋ ธ๋์ ํ๋ฆ์๋ง ์์ํ๊ฒ ์ด์ ์ด ๋ง์ถฐ์ ์๋ค.
Behaviour Tree์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๋ ๋ฐ ๋งค์ฐ ํฐ ๋์์ด ๋์ง๋ง, Behaviour Tree๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์๊ณ ์์์๋ ๋ถ๊ตฌํ๊ณ ์ด๋ ์ข
๋ฅ์ ๋
ธ๋๊ฐ ๋์ด์ผ ํ๋์ง์ ๋ํ ์ค์ ๋ฌธ๋งฅ์ด ์ ํ ์๋ ์ํฉ์ด์๋ค.
์ด ๊ธ์ ํตํด ๊ฒ์์ ์ํด ์์ฑํ๊ฑฐ๋ ์ค์ ๋ก ์์ ํ ๊ฐ๋ฐ๋ Behaviour Tree๊ฐ ์ด๋ค ๋ชจ์ต์ผ์ง ๋ฑ์ ์ ์ ์์ ๊ฒ์ด๋ค.
์ด ๊ธ์ JBT - Java Behaviour Trees(http://sourceforge.net/projects/jbt/)๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๋ฐ์ฝ๋ ์ดํฐ ๋ ธ๋ ์ ํ ์ค ์ผ๋ถ๋ ์ค์ ๋ก ์ผ๋ฐ์ ์ธ Behaviour Tree๊ฐ ์๋ JBT์ ๊ณ ์ ํ ๊ฒ์ผ ์ ์์ง๋ง PZ Behaviour Tree๊ฐ ์๋ํ๋ ๋ฐฉ์์ผ๋ก ํตํฉ๋์ด ์์ผ๋ฏ๋ก ๊ตฌํ์ ๊ณ ํ๋ ๋ณผ ๊ฐ์น๊ฐ ์๋ค. ๊ทํ์ ํน์ Behaviour Tree๋ ์ด๋ฅผ ์ง์ํ์ง ์์ ์๋ ์๋ค.
Project Zomboid NPC์ ๊ฐ๋ฐ์ ํตํด ๊ฝค ํ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ผ๋ฏ๋ก ์ ์ด๋ Behaviour Tree๋ก ๋ฌด์์ ์ฑ์ทจํ ์ ์๋์ง์ ๋ํด ์ ์ ์์ ๊ฒ์ด๋ค. ๊ตฌํ์ ๋ํด ์์ธํ ์ค๋ช ํ์ง๋ ์๊ณ Project Zomboid์์ ์ฌ์ฉ๋ ๋ช ๊ฐ์ง ์ถ์์ ์ธ ์๋ง ์ ๊ณตํ ๊ฒ์ด๋ค.
์ ํ ์ํ ๋จธ์ (Finite State Machine)์ด๋ AI ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉ๋๋ ๊ธฐํ ์์คํ ๊ณผ ๋ฌ๋ฆฌ Behaviour Tree๋ AI entity์ ์์ฌ ๊ฒฐ์ ํ๋ฆ์ ์ ์ดํ๋ ๊ณ์ธต์ ๋ ธ๋ ํธ๋ฆฌ์ด๋ค.
Tree ๋ฒ์์์ Leaf(์)์ AI ๊ฐ์ฒด๋ฅผ ์ ์ดํ๋ ์ค์ ๋ช ๋ น์ด๊ณ , ๊ฐ์ง๋ฅผ ํ์ฑํ๋ ๊ฒ์ ์ํฉ์ ๊ฐ์ฅ ์ ํฉํ ๋ช ๋ น Sequence(์ํ์ค)์ ๋๋ฌํ๊ธฐ ์ํด AI๊ฐ ๋๋ฌด๋ฅผ ๋ฐ๋ผ ๋ด๋ ค๊ฐ๋ ๊ฒ์ ์ ์ดํ๋ ๋ค์ํ ์ ํ์ ์ ํธ๋ฆฌํฐ ๋ ธ๋์ด๋ค.
ํธ๋ฆฌ๋ ํน์ ๊ธฐ๋ฅ์ ์ํํ๋ ํ์ ํธ๋ฆฌ๋ฅผ ํธ์ถํ๋ ๋
ธ๋๋ก ๋งค์ฐ ๊น์ด์ง ์ ์์ผ๋ฏ๋ก ๊ฐ๋ฐ์๋ ๋งค์ฐ ์ค๋๋ ฅ ์๋ AI ๋์์ ์ ๊ณตํ๊ธฐ ์ํด ์๋ก ์ฐ๊ฒฐ๋ ์ ์๋ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์๋ค.
๊ฐ๋ฐ์ ๋ฐ๋ณต ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋๋ค.
๊ธฐ๋ณธ ๋์์ ํ์ฑํ์ฌ ์์ํ ๋ค์ ๋ชฉํ ๋ฌ์ฑ์ ์ํ ๋์ฒด ๋ฐฉ๋ฒ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ ๋ถ๊ธฐ๋ฅผ ์์ฑํ๊ณ ์ํฉ์ ๋ฐ๋ผ ๋ถ๊ธฐ๋ฅผ ์ ๋ ฌํ์ฌ ํน์ ๋์์ด ์คํจํ ๊ฒฝ์ฐ AI๊ฐ ๋์ฒด ์ ์ ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
์ด๋ฌํ ๊ตฌ๋ณ์ ์ด ๊ฐ์ด๋์ ๊ฑฐ์ ๊ด๋ จ์ด ์์ง๋ง Behaviour Tree์๋ ๋ค์ํ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ ์ ์ ์ ์ํด์ผ ํ๋ค. ์ฃผ์ ์ฐจ์ด์ ์ ํธ๋ฆฌ๊ฐ ์ฝ๋๋ฒ ์ด์ค ์ธ๋ถ์์ (์ : XML ๋๋ ๋ ์ ํ์์ผ๋ก ์ ์๋์ด ์ธ๋ถ ํธ์ง๊ธฐ๋ก ์กฐ์๋๋์ง) ๋๋ ํธ๋ฆฌ ๊ตฌ์กฐ๊ฐ ์ค์ฒฉ๋ ํด๋์ค ์ธ์คํด์ค๋ฅผ ํตํด ์ฝ๋์์ ์ง์ ์ ์๋๋์ง ์ฌ๋ถ์ด๋ค.
JBT๋ ์ด ๋๊ฐ์ง์ ํผํฉ์ ์ฌ์ฉํ๋ค. ์ฌ๊ธฐ์์ Behaviour Tree๋ฅผ ์๊ฐ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์๋๋ก ํธ์ง๊ธฐ๊ฐ ์ ๊ณต๋์ง๋ง ๋ด๊ณ ๋ด๊ธฐ ๋ช ๋ น์ค ๋๊ตฌ๋ ์ค์ ๋ก ์ฝ๋ ๊ธฐ๋ฐ์ Behaviour Tree๋ฅผ ๋ํ๋ด๊ธฐ ์ํด Java์ฝ๋๋ฅผ ์์ฑํ๋ค.
์ด๋ค ๊ตฌํ์ ํ๋ ์ค์ฌ๋ก ๊ฒ์ ํน์ ์ ๋ฌด๋ฅผ ์ํํ๊ณ ์บ๋ฆญํฐ๋ฅผ ์ ์ดํ๊ฑฐ๋ ์บ๋ฆญํฐ์ ์ํฉ์ด๋ ์ฃผ๋ณ ํ๊ฒฝ์ ํ์ธํ๋ ๋ ธ๋์ธ Leaf Node(๋ฆฌํ ๋ ธ๋)๋ ์ฝ๋์์ ์ง์ ์ ์ํด์ผ ํ๋ ํญ๋ชฉ์ด๋ค. ๊ทธ๋ฐ ๋ค์ ํธ๋ฆฌ์์ ์ด๋ฅผ ํ์ฉํ์ฌ ๋ณต์กํ ๋์์ ์ ๊ณตํ ์ ์๋ค. ์ด๋ฌํ ๋ ธ๋๊ฐ ์ผ๋ง๋ ํํ๋ ฅ์ด ๋ฐ์ด๋์ง, ๋๋ก๋ ๋จ์ํ ๋ฌธ์ ๋ช ๋ น์ด ์๋๋ผ ํธ๋ฆฌ ์์ฒด ๋ด์์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ ๋ง์ด ์๋ํ๋ ๊ฒฝ์ฐ๋ ์์ด Behaviour Tree๋ฅผ ํฅ๋ฏธ๋กญ๊ฒ ๋ง๋ ๋ค.
Behaviour Tree์ ํต์ฌ ์ธก๋ฉด์ ์ฝ๋๋ฒ ์ด์ค ๋ด์ ๋ฐฉ๋ฒ๊ณผ ๋ฌ๋ฆฌ ํธ๋ฆฌ์ ํน์ ๋ ธ๋๋ ๋ถ๊ธฐ๋ฅผ ์๋ฃํ๋ ๋ฐ ๊ฒ์์ ๋งฃ์ ํฑ์ด ํ์ํ ์ ์๋ค๋ ๊ฒ์ด๋ค. Behaviour Tree์ ๊ธฐ๋ณธ ๊ตฌํ์์ ์์คํ ์ ๋งค ํ๋ ์๋ง๋ค ํธ๋ฆฌ์ ๋ฃจํธ์์ ์๋๋ก ์ด๋ํ์ฌ ํธ๋ฆฌ ์๋์ ๊ฐ ๋ ธ๋๋ฅผ ํ ์คํธํ์ฌ ์ด๋ ๋ ธ๋๊ฐ ํ์ฑํ ์ํ์ธ์ง ํ์ธํ๊ณ ํ์ฌ ํ์ฑ ๋ ธ๋์ ๋๋ฌํ ๋ ๊น์ง์ ๋ชจ๋ ๋ชจ๋๋ฅผ ๋ค์ ํ์ธํ๋ค. (ํญ์ ๋ค์ ํ๋ฒ ๊ฒํ ,์ฒดํฌ ํด์ผํ๋ค)
์ด๋ ์์ ์ ์ํํ๋๋ฐ ๋งค์ฐ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์๋๋ค. ํนํ ๊ฐ๋ฐ์ค์ Behaviour Tree๊ฐ ๊ฐ๋ฐ๋๊ณ ํ์ฅ๋จ์ ๋ฐ๋ผ Behaviour Tree๊ฐ ๋ ๊น์ด์ง ์๋ก ๊ทธ๋ ๋ค. ๊ตฌํํ๋ ๋ชจ๋ Behaviour Tree๋ ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ๋ ธ๋๋ฅผ ์ ์ฅํ์ฌ ์ ์ฒด ํธ๋ฆฌ๋ฅผ ํฑ ๋จ์๋ก ์ํ๋๋ ๋์ Behaviour Tree ์์ง ๋ด์์ ์ง์ ํฑํ ์ ์๋๋ก ํด์ผํ๋ค. (JBT๋ ์ด ๋ฒ์ฃผ์ ์ํ๋ค.)
"ํฑ"์ด๋ผ๋ ์ฉ์ด๋ ๊ฒ์ ํ๋ก๊ทธ๋๋ฐ์ด๋ ์ธ๊ณต ์ง๋ฅ (AI) ๋ถ์ผ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ์ฉ์ด์ด๋ค. ์ฌ๋ฌ ๋์์ด๋ ์ฒ๋ฆฌ๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ๋ณต๋๋ ๊ฒ์ ๋ํ๋ธ๋ค. ์ด๋ ๊ฒ์ ๋ฃจํ๋ AI์์ง์์ ๋งค ํ๋ ์์ด๋ ์ฃผ๊ธฐ๋ง๋ค ์ํ๋๋ ์์ ์ ์๋ฏธํ๋ค.
์ฌ๊ธฐ์ ๋งํ๋ "ํฑ"์ ์์ง์ด๋ ์์คํ ์ด ํน์ ๊ฐ๊ฒฉ์ผ๋ก ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ๋๋ ๊ฒ์ ์๋ฏธํ๋ค. ๊ฒ์ ๋ฃจํ์์๋ ์ผ๋ฐ์ ์ผ๋ก ์ด๋น ๋ช ๋ฒ์ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ๋์ง๋ฅผ ํ๋๋ด๋ ๋จ์๋ก ์ฌ์ฉ๋๋ค.
๋ํ, Behaviour Tree(๋์ ํธ๋ฆฌ)์ "ํฑ"์ ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๊ฐ ์คํ๋๋ ์ฃผ๊ธฐ๋ฅผ ๋ํ๋ธ๋ค. Behaviour Tree(๋์ ํธ๋ฆฌ)๋ ๊ฒ์ ์์ง์ด๋ AI์์คํ ์์ ์ฃผ์ด์ง ์ฃผ๊ธฐ์ ๋ฐ๋ผ ๋ ธ๋๋ฅผ ์คํํ์ฌ ์ํ๋ ๋์์ ์ํํ๋ค.
Behaviour Tree๋ ์ฌ๋ฌ ์ ํ์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋์ง๋ง ์ผ๋ถ ํต์ฌ ๊ธฐ๋ฅ์ Behaviour Tree์ ๋ชจ๋ ๋ ธ๋ ์ ํ์ ๊ณตํต๋๋ค. ์ด๋ ์ธ ๊ฐ์ง ์ํ ์ค ํ๋๋ฅผ ๋ฐํํ ์ ์๋ค๋ ๊ฒ์ด๋ค. (Behaviour Tree์ ๊ตฌํ์ ๋ฐ๋ผ ์ธ ๊ฐ์ง ์ด์์ ๋ฐํ์ํ๊ฐ ์์ ์๋ ์๋ค.)
์ธ ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์ํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋ฆ์์ ์ ์ ์๋ฏ์ด ์ฒ์ ๋ ๊ฐ๋ ๋ถ๋ชจ์๊ฒ ์์ ์ ์์ ์ด ์ฑ๊ณตํ๊ฑฐ๋ ์คํจํ์์ ์๋ฆฐ๋ค. ์ธ ๋ฒ์งธ๋ ์ฑ๊ณต์ด๋ ์คํจ๊ฐ ์์ง ๊ฒฐ์ ๋์ง ์์์ผ๋ฉฐ, ๋ ธ๋๊ฐ ๊ณ์ ์คํ ์ค์ด๋ผ๋ ์๋ฏธ์ด๋ค. ๋ค์์ ํธ๋ฆฌ๊ฐ ํฑ ๋ ๋ ๋ ธ๋๊ฐ ๋ค์ ํฑ ๋๋ฉฐ, ์ด ์์ ์์ ๋ค์ ์ฑ๊ณต, ์คํจ ๋๋ ๊ณ์ ์คํ๋ ๊ธฐํ๋ฅผ ๊ฐ๊ฒ ๋๋ค.
์ด ๊ธฐ๋ฅ์ ๊ฒ์์ ์ฌ๋ฌ ํฑ ๋์ ๋ ธ๋์ ์ฒ๋ฆฌ๊ฐ ์ง์๋๋๋ก ํ๊ธฐ ๋๋ฌธ์ Behaviour Tree์ ๊ฐ๋ ฅํ ํต์ฌ์ด๋ค. ์๋ฅผ ๋ค์ด Walk ๋ ธ๋๋ ๊ฒฝ๋ก ๊ณ์ฐ์ ์๋ํ๋ ๋์๋ฟ๋ง ์๋๋ผ ์บ๋ฆญํฐ๊ฐ ์ง์ ๋ ์์น๊น์ง ๊ฑท๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ ๋์ Running ์ํ๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ค ์ด์ ๋ก๋ ๊ฒฝ๋ก ์ฐพ๊ธฐ๊ฐ ์คํจํ๊ฑฐ๋ ์บ๋ฆญํฐ๊ฐ ๋์ฐ ์์น์ ๋๋ฌํ๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ๊ฑท๋ ๋์ ๋ค๋ฅธ ํฉ๋ณ์ฆ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ๋ ธ๋๋ ์คํจ๋ฅผ ๋ถ๋ชจ์๊ฒ ๋ฐํํ๋ค. ์ด๋ ์์ ์์๋ ์บ๋ฆญํฐ์ ํ์ฌ ์์น๊ฐ ๋์ฐ ์์น์ ๊ฐ์ผ๋ฉด Walk ๋ช ๋ น์ด ์ฑ๊ณต์ ์ผ๋ก ์คํ๋์์์ ๋ํ๋ด๋ ์ฑ๊ณต(Success)๋ฅผ ๋ฐํํ๋ค.
์ฆ, ์ด ๋ ธ๋๋ ์ฑ๊ณต๊ณผ ์คํจ์ ๋ํด ์ ์๋ ์ฃผ์ฒ ๊ณ์ฝ์ ๊ฐ๊ณ ์์ผ๋ฉฐ, ์ด ๋ ธ๋๋ฅผ ํ์ฉํ๋ ๋ชจ๋ ํธ๋ฆฌ๋ ์ด ๋ ธ๋์์ ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ ํ ์ ์๋ค. ๊ทธ๋ฐ ๋ค์ ์ด๋ฌํ ์ํ๋ ํธ๋ฆฌ์ ํ๋ฆ์ ์ ํํ๊ณ ์ ์ํ์ฌ AI๊ฐ ์ํ๋ ๋๋ก ์๋ํ๋๋ก ํธ๋ฆฌ ์๋๋ก ์ผ๋ จ์ ์ด๋ฒคํธ์ ๋ค์ํ ์คํ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ๋ค.
์ด ๊ณต์ ๊ธฐ๋ฅ์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ๋์ ํธ๋ฆฌ ๋ ธ๋์ ์ธ ๊ฐ์ง ์ฃผ์ ์ํ์ด ์๋ค.
๋ณตํฉ ๋ ธ๋(Composite Node)๋ ํ๋ ์ด์์ ์์์ ๊ฐ์ง ์ ์๋ ๋ ธ๋์ด๋ค. ์ด๋ค์ ํน์ ํ ๋ณตํฉ ๋ ธ๋์ ๋ฐ๋ผ ์ฒซ ๋ฒ์งธ ๋ถํฐ ๋ง์ง๋ง๊น์ง์ ์์ ๋๋ ๋ฌด์์ ์์๋ก ์ด๋ฌํ ์์ ํญ๋ชฉ ์ค ํ๋ ์ด์์ ์ฒ๋ฆฌํ๋ฉฐ, ์ด๋ค ๋จ๊ณ์์๋ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ ์ฑ๊ณต ๋๋ ์คํจ๋ฅผ ์์ ํญ๋ชฉ์ ์ ๋ฌํ๋ค. (์์ ๋ ธ๋์ ์ฑ๊ณต ๋๋ ์คํจ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.) ์์ ํญ๋ชฉ์ ์ฒ๋ฆฌํ๋ ๋์ ๊ณ์ํด์ Running์ ์์ ํญ๋ชฉ์ผ๋ก ๋ฐํํ๋ค.
๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ณตํฉ ๋ ธ๋(Composite Node)๋ ์ํ์ค(Sequence)์ด๋ค. ์ด๋ ๋จ์ํ ๊ฐ ์์ ํญ๋ชฉ์ ์์๋๋ก ์คํํ๊ณ , ์์ ํญ๋ชฉ ์ค ํ๋๋ค๋ผ๋ ์คํจํ ๋ ์คํจ๋ฅผ ๋ฐํํ๊ณ , ๋ชจ๋ ์์ ํญ๋ชฉ์ด ์ฑ๊ณต ์ํ๋ฅผ ๋ฐํํ๋ฉด ์ฑ๊ณต์ ๋ฐํํ๋ค.
๋ณตํฉ ๋ ธ๋(Composite Node)์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ฝ๋ ์ดํฐ ๋ ธ๋(Decorator Node)์๋ ์์ ๋ ธ๋๊ฐ ์์ ์ ์๋ค. ๋ณตํฉ ๋ ธ๋์ ๋ฌ๋ฆฌ ๊ตฌ์ฒด์ ์ผ๋ก ์์ ๋ ธ๋๋ ํ๋๋ง ๊ฐ์ง ์ ์๋ค. ๊ทธ๋ค์ ๊ธฐ๋ฅ์ ๋ฐ์ฝ๋ ์ดํฐ ๋ ธ๋์ ์ ํ์ ๋ฐ๋ผ ์์ ๋ ธ๋์ ์ํ์์ ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณํํ๊ฑฐ๋ ์์์ ์ข ๋ฃํ๊ฑฐ๋ ์์ ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ด๋ค.
๋ฐ์ฝ๋ ์ดํฐ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์๋ ๋จ์ํ ํ์ ํญ๋ชฉ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ํค๋ Inverter์ด๋ค. ์์์ด ์คํจํ๋ฉด ๋ถ๋ชจ์๊ฒ ์ฑ๊ณต์ ๋๋ ค์ฃผ๊ฑฐ๋, ์์์ด ์ฑ๊ณตํ๋ฉด ์คํจ๋ฅผ ๋ถ๋ชจ์๊ฒ ๋๋ ค์ค๋ค.
๊ฐ์ฅ ๋ฎ์ ์์ค์ ๋ ธ๋ ์ ํ์ด๋ฉฐ ์์์ ๊ฐ์ง ์ ์๋ค.
๊ทธ๋ฌ๋ Leaf(์)๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋ ธ๋ ์ ํ์ด๋ค. ์ด๋ ํธ๋ฆฌ๊ฐ ์ค์ ๋ก ์ ์ฉํ ์์ ์ ์ํํ๋ ๋ฐ ํ์ํ ๊ฒ์๋ณ ๋๋ ์บ๋ฆญํฐ๋ณ ํ ์คํธ๋ ์์ ์ ์ํํ๊ธฐ ์ํด ๊ฒ์์์ ์ ์ํ๊ณ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ด๋ค.
์์์ ์ฌ์ฉํ ์๋ Walk์ด๋ค. Walk Leaf Node๋ ์บ๋ฆญํฐ๊ฐ ์ง๋์ ํน์ ์ง์ ์ผ๋ก ๊ฑธ์ด๊ฐ๋๋ก ํ๊ณ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ฑ๊ณต ๋๋ ์คํจ๋ฅผ ๋ฐํํ๋ค.
Leaf Node๊ฐ ๋ฌด์์ธ์ง ์ง์ ์ ์ํ ์ ์๊ธฐ ๋๋ฌธ์(์ข ์ข ์์ฃผ ์ต์ํ์ ์ฝ๋๋ก)๋ณตํฉ(Comosite) ๋ฐ ๋ฐ์ฝ๋ ์ดํฐ ์์ ๊ณ์ธกํํ ๋ ๋งค์ฐ ํํ๋ ฅ์ด ๋ฐ์ด๋๋ฉฐ ๋งค์ฐ ๋ณต์กํ ๊ณ์ธตํ๋๊ณ ์ง๋ฅ์ ์ผ๋ก ์ฐ์ ์์๊ฐ ์ง์ ๋ ๋์์ ์ํํ ์ ์๋ ๋งค์ฐ ๊ฐ๋ ฅํ ๋์ ํธ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์๋ค.
๊ฒ์ ์ฝ๋์ ๋น์ ๋ก ์ค๋ช ํ๋ฉด, Composite, Decorator๋ฅผ ํจ์๋ผ๊ณ ์๊ฐํ๊ณ , if๋ฌธ , while ๋ฃจํ ๋ฐ ๊ธฐํ ์ธ์ด ๊ตฌ์กฐ๋ฅผ ์ฝ๋์ ํ๋ฆ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฒ์ผ๋ก ์๊ฐํ ์ ์๋ค. ๋ฐ๋ฉด Leaf Node๋ ์ค์ ๋ก AI ์บ๋ฆญํฐ์ ๋ํ ์์ ์ ์ํํ๊ฑฐ๋ ์ํ ๋๋ ์ํฉ์ ํ ์คํธํ๋ ๊ฒ์ ํน์ ํจ์ ํธ์ถ๋ก ์๊ฐํ ์ ์๋ค.
์ด๋ฌํ ๋ ธ๋๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด Walk ๋ฆฌํ ๋ ธ๋์๋ ์บ๋ฆญํฐ๊ฐ ์ด๋ํ ์ขํ๋ฅผ ๊ฐ์ง ์ ์๋ค.
์ด๋ฌํ ๋งค๊ฐ๋ณ์๋ ํธ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ AI ์บ๋ฆญํฐ์ ์ปจํ ์คํธ(๋ฌธ๋งฅ) ๋ด์ ์ ์ฅ๋ ๋ณ์์์ ๊ฐ์ ธ์ฌ ์ ์๋ค. ์๋ฅผ ๋ค์ด ์ด๋ํ ์์น๋ 'GetSafeLocation' ๋ ธ๋์์ ๊ฒฐ์ ๋์ด ๋ณ์์ ์ ์ฅ๋๊ณ , ๊ทธ๋ผ ๋ค์ 'Walk' ๋ ธ๋๋ ์ปจํ ์คํธ(๋ฌธ๋งฅ)์ ์ ์ฅ๋ ํด๋น ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชฉ์ ์ง๋ฅผ ์ ์ํ ์ ์๋ค. ํธ๋ฆฌ ์ฒ๋ฆฌ ์ค์ ์์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋ณ๊ฒฝํ๊ธฐ ์ํด ๋ ธ๋ ๊ฐ์ ๊ณต์ ๋ ์ปจํ ์คํธ(๋ฌธ๋งฅ)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด Behaviour Tree๋ฅผ ๊ฐ๋ ฅํ๊ฒ ๋ง๋๋ ๋ถ๋ถ์ด๋ค.
๋ ๋ค๋ฅธ ์ค์ํ ์ข ๋ฅ์ ๋ฆฌํ ๋ ธ๋๋ ๋ค๋ฅธ Behaviour Tree๋ฅผ ํธ์ถํ๋ฉฐ, ํธ์ถ๋ ํธ๋ฆฌ๋ก ๊ธฐ์กด ํธ๋ฆฌ์ ๋ฐ์ดํฐ ์ปจํ ์คํธ(๋ฌธ๋งฅ)๋ฅผ ์ ๋ฌํ๋ค.
์ด๋ฌํ ๋ ธ๋๋ค์ Behaviour Tree๋ฅผ ๋ชจ๋ํํ์ฌ Behaviour Tree๋ฅผ ๋ฌด์ํ ๋ง์ ์ฅ์์์ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค. ์๋ง๋ ์ปจํ ์คํธ ๋ด์์ ํน์ ๋ณ์ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์๋ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด 'Break into Building' ํ๋์ 'targetBuilding' ๋ณ์๊ฐ ํ์ํ ์ ์์ผ๋ฉฐ, ๋ฐ๋ผ์ ๋ถ๋ชจ ํธ๋ฆฌ๋ ์ด ๋ณ์๋ฅผ ์ปจํ ์คํธ์์ ์ค์ ํ ๋ค์ ํ์ ํธ๋ฆฌ Leaf ๋ ธ๋๋ฅผ ํตํด ํ์ ํธ๋ฆฌ๋ฅผ ํธ์ถํ ์ ์๋ค.
์ฌ๊ธฐ์์๋ Behaviour Tree๋ด์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๊ตฌ์ฑ ๋ ธ๋์ ๋ํด ์ด์ผ๊ธฐํ๋ค. ๋ค๋ฅธ ์ ํ๋ ์์ง๋ง, ์ฌ๊ธฐ์์๋ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ์ ๋ค๋ฃจ์ด ๋ณธ์ง์ ์ผ๋ก ๋ณต์กํ ํ๋ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ด๋ค.
Behaviour Tree ๋ด์์ ์ฐพ์ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋จํ ๊ตฌ์ฑ ๋ ธ๋ ์ค ํ๋๋ '์ํ์ค'์ด๋ค. ๊ทธ ์ด๋ฆ์ด ๋ชจ๋ ๊ฒ์ ๋งํด์ค๋ค. ์ํ์ค๋ ๊ฐ ์์์ ์์๋๋ก ๋ฐฉ๋ฌธํ๋ฉฐ ์ฒ์๋ถํฐ ์์ํ์ฌ ์ฒซ ๋ฒ์งธ๋ฅผ ํธ์ถํ๊ณ , ๊ทธ๊ฒ์ด ์ฑ๊ณตํ๋ฉด ๋ ๋ฒ์งธ๋ฅผ ํธ์ถํ๊ณ ์ด์ด์ ๊ฒ์๋๋ค. ์์ ์ค ํ๋๋ผ๋ ์คํจํ๋ฉด ์ฆ์ ๋ถ๋ชจ์๊ฒ ์คํจ๋ฅผ ๋ฐํํ๋ค. ์ํ์ค์ ๋ง์ง๋ง ์์์ด ์ฑ๊ณตํ๋ฉด ์ํ์ค๋ ๋ถ๋ชจ์๊ฒ ์ฑ๊ณต์ ๋ฐํํ๋ค.
Behaviour Tree์ ๋ ธ๋ ์ ํ์ด ๋ค์ํ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ๋ช ํํ ํด์ผ ํ๋ค. ์ํ์ค์ ๊ฐ์ฅ ๋ช ๋ฐฑํ ์ฌ์ฉ๋ฒ์ ์์ ํ ์๋ฃํด์ผ ํ๋ ์ผ๋ จ์ ์์ ์ ์ ์ํ๊ณ , ๊ทธ ์ค ํ๋๊ฐ ์คํจํ๋ฉด ํด๋น ์์ ์ํ์ค์ ์ถ๊ฐ ์ฒ๋ฆฌ๊ฐ ๋ถํ์ํด์ง ๊ฒฝ์ฐ์ด๋ค. ์๋ฅผ ๋ค์ด :
์ด ์ํ์ค๋ ์๋ง๋ ๋ช ํํ๊ฒ ๋๋ฌ๋๋ฏ์ด ์ฃผ์ด์ง ์บ๋ฆญํฐ๊ฐ ๋ฌธ์ ํต๊ณผํ๊ณ ๋ค๋ก ๋ฌธ์ ๋ซ๊ฒ ๋ง๋ค ๊ฒ์ด๋ค. ์ฌ์ค, ์ค์ ๋ก๋ ์ด๋ฌํ ๋ ธ๋๋ค์ด ํ๋ก๋์ ํ๊ฒฝ์์ ๋ ์ถ์ํ๋๊ณ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค. Walk(์์น), Open(์ด ์ ์๋ ๋์), Walk(์์น), Close(์ด ์ ์๋ ๋์)
๋ฐ๋ผ์ ์ฒ๋ฆฌ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค :
์ํ์ค โ ๋ฌธ๊น์ง ๊ฑท๊ธฐ(์ฑ๊ณต) โ ์ํ์ค(์คํ์ค) โ ๋ฌธ ์ด๊ธฐ(์ฑ๊ณต) โ ์ํ์ค(์คํ์ค) โ ๋ฌธ ํต๊ณผํ๊ธฐ(์ฑ๊ณต) โ ์ํ์ค(์คํ์ค) โ ๋ฌธ ๋ซ๊ธฐ(์ฑ๊ณต) โ ์ํ์ค(์ฑ๊ณต) โ ์ด ์์ ์์ ์ํ์ค๋ ์์ ์ ๋ถ๋ชจ์๊ฒ ์ฑ๊ณต์ ๋ฐํํ๋ค.
์บ๋ฆญํฐ๊ฐ ๋ฌธ์ผ๋ก ๊ฑท๋ ๋ฐ ์คํจํ๋ ๊ฒฝ์ฐ(๊ธธ์ด ๋งํ์๋ ๋ฑ), ๋ฌธ์ ์ด์ด๋ณด๊ฑฐ๋ ํต๊ณผํ๋ ค๊ณ ํ๋ ๊ฒ์ ๋ ์ด์ ๊ด๋ จ์ด ์๋ค. ์ํ์ค๋ ๊ฑท๊ธฐ๊ฐ ์คํจํ ์๊ฐ์ ์คํจ๋ฅผ ๋ฐํํ๋ฉฐ, ์ํ์ค์ ๋ถ๋ชจ๋ ์คํจ๋ฅผ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
์ํ์ค๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์บ๋ฆญํฐ ์์ ์ ์์๋ก ์ด์ด์ง๋ฉฐ, AI Behaviour Tree๊ฐ ์ด๊ฒ์ด ์ ์ผํ ์ฌ์ฉ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์ ์ํ๋ ๊ฒฝํฅ์ด ์๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ ์ํ์ค๋ฅผ ํ์ฉํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ์ด ๋ช ํํ์ง ์์ ์ ์๋ค. ์ด๊ฑธ ๊ณ ๋ คํด๋ณด๋ผ :
์์ ์์์ ์ฐ๋ฆฌ๋ ์์
๋ชฉ๋ก์ด ์๋ ํ
์คํธ ๋ชฉ๋ก์ด ์๋ค. ์์ ๋
ธ๋๋ ์บ๋ฆญํฐ๊ฐ ๋ฐฐ๊ณ ํ์ง, ๊ทธ๋ค์ด ์์งํ์ ์์์ด ์๋์ง, ๊ทธ๋ฆฌ๊ณ ์์ ํ ์์น์ ์๋์ง๋ฅผ ํ์ธํ๊ณ , ์ด ๋ชจ๋ ์กฐ๊ฑด์ด ์ํ์ค ๋ถ๋ชจ์๊ฒ ์ฑ๊ณต์ ๋ฐํํ๋ฉด ์บ๋ฆญํฐ๊ฐ ์์์ ๋จน๊ฒ ๋๋ค.
์ด๋ ๊ฒ ์ํ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋์์ ์ํํ๊ธฐ ์ ์ ํ๋ ์ด์์ ์กฐ๊ฑด์ ํ
์คํธํ ์ ์๋ค. ์ฝ๋์์์ if๋ฌธ์ด๋ ํ๋ก์์์ AND ๊ฒ์ดํธ์ ์ ์ฌํ๋ค. ๋ชจ๋ ์์์ด ์ฑ๊ณตํด์ผ ํ๋ฉฐ, ์ด๋ฌํ ์์์ ๋ณตํฉ, ๋ฐ์ฝ๋ ์ดํฐ ๋๋ ๋ฆฌํ ๋
ธ๋์ ์ด๋ค ์กฐํฉ์ด๋ ๋ ์ ์์ผ๋ฏ๋ก AI Brain ๋ด์์ ๊ฐ๋ ฅํ ์กฐ๊ฑด ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
์ ์น์ ์์ ์ธ๊ธํ Inverter Decorator(์ธ๋ฒํฐ ๋ฐ์ฝ๋ ์ดํฐ)๋ฅผ ์๋ก ๋ค์ด๋ณด๊ฒ ๋ค.
์ด์ ์์ ๊ธฐ๋ฅ์ ์ผ๋ก ๋์ผํ๋ฉฐ ์ฌ๊ธฐ์๋ ์ธํฐ๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ๋ฌดํจํํ๊ณ NOT ๊ฒ์ดํธ๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค. ์ฆ, ์บ๋ฆญํฐ๋ ๊ฒ์ ์ธ๊ณ์ ์กฐ๊ฑด์ ํ ์คํธ ํ๋ ๋ฐ ํ์ํ ๋ ธ๋์ ์์ ๋ํญ ์ค์ผ ์ ์๋ค.
์ ํ์๋ ์ํ์ค์ ์(+)์ ๋ํ ์(-)์ด๋ค.(์ฆ, ๋ฐ๋) ์ํ์ค๊ฐ ๋ชจ๋ ์์์ด ์ฑ๊ณตํด์ผ ์ฑ๊ณต์ผ๋ก ๋ฐํ๋๋ AND ์ฐ์ฐ๊ณผ๋ ๋ฌ๋ฆฌ, ์ ํ์๋ ๊ทธ ์์ ์ค ํ๋๋ผ๋ ์ฑ๊ณตํ๋ฉด ์ฑ๊ณต์ผ๋ก ๋ฐํ๋๊ณ ๊ทธ ์ดํ์ ์์์ ์ฒ๋ฆฌํ์ง ์๋๋ค. ์ฒซ ๋ฒ์งธ ์์์ ์ฒ๋ฆฌํ๊ณ , ์คํจํ๋ฉด ๋ ๋ฒ์งธ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ๊ทธ๊ฒ๋ ์คํจํ๋ฉด ์ธ ๋ฒ์งธ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ์ฑ๊ณต์ด ๋์ค๋ฉด ์ฆ์ ์ฑ๊ณต์ผ๋ก ๋ฐํ๋๋ค. ๋ชจ๋ ์์์ด ์คํจํ๋ฉด ์คํจํ๋ค. ์ด๋ ์ ํ์๊ฐ OR ๊ฒ์ดํธ์ ์ ์ฌํ๋ฉฐ, ์ฌ๋ฌ ์กฐ๊ฑด์ ํ์ธํ์ฌ ๊ทธ ์ค ํ๋๋ผ๋ ์ฐธ์ธ์ง ํ์ธํ๋ ์กฐ๊ฑด๋ฌธ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
์ ํ์์ ์ฃผ์ ๊ฐ์ ์ ๊ฐ์ฅ ์ ๋ฆฌํ ๊ฒ๋ถํฐ ๊ฐ์ฅ ๋ถ๋ฆฌํ ๊ฒ๊น์ง์ ์ฐ์ ์์์ ๋ฐ๋ผ ์ฌ๋ฌ ๋ค์ํ ๊ฒฝ๋ก๋ฅผ ํํํ๊ณ , ์ด๋ค ํ๋ ๊ฒฝ๋ก์์๋ ์ฑ๊ณต์ ๋ฐํํ ์ ์๋ ๋ฅ๋ ฅ์ด ์๋ค. ์ด๊ฒ์ด ์๋ฏธํ๋ ๋ฐ๋ ์์ฒญ๋๋ฉฐ, ์ ํ์๋ฅผ ์ฌ์ฉํ์ฌ ๋งค์ฐ ๋น ๋ฅด๊ณ ์ ๊ตํ AI ํ๋์ ๊ฐ๋ฐํ ์ ์๋ค.
์ด์ ์ ์ธ๊ธํ ๋ฌธ ์ํ์ค ์์ ๋ฅผ ๋ค์ ์ดํด๋ณด๊ฒ ๋ค. ์ด๋ฒ์๋ ์ ์ฌ์ ์ธ ๋ฌธ์ ์ ๊ทธ๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํ ์ ํ์๋ฅผ ์ถ๊ฐํ๋ค.
๊ทธ๋ ๋ค, ์ฌ๊ธฐ์๋ ๋ช ๊ฐ์ง ์๋ก์ด ๋ ธ๋๋ง ์ฌ์ฉํ์ฌ ์ ๊ธด ๋ฌธ์ ์ง๋ฅ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด ์ ํ์๊ฐ ์ฒ๋ฆฌ๋ ๋ ์ด๋ค ์ผ์ด ์ผ์ด๋ ๊น?
๋จผ์ ๋ฌธ ์ด๊ธฐ ๋ ธ๋๋ฅผ ์ฒ๋ฆฌํ๋ค. ๊ฐ์ฅ ์ ํธํ๋ ๋์์ ๋ฌธ์ ์ด๊ธฐ๋ง ํ๋ ๊ฒ์ด๋ค. ๋ณต์กํ์ง ์๋ค. ๊ทธ ์์ ์ด ์ฑ๊ณตํ๋ฉด ์ ํ์๋ ์ฑ๊ณตํ๋ค. ๊ทธ๊ฒ์ด ์ ์ฒ๋ฆฌ๋ ์์ ์์ ์๊ณ ๋ ์ด์ ํด๋น ์ ํ์์ ๋ค๋ฅธ ์์ ๋ ธ๋๋ฅผ ํ์ํ ํ์๊ฐ ์๋ค.
๊ทธ๋ฌ๋ ๋ฌธ์ด ์ ๊ฒจ์์ด ์ด๋ฆฌ์ง ์์ผ๋ฉด ๋ฌธ ์ด๊ธฐ ๋ ธ๋๊ฐ ์คํจํ๊ณ ์คํจ๋ฅผ ๋ถ๋ชจ ์ ํ๊ธฐ์ ์ ๋ฌํ๋ค. ์ด ์์ ์์ ์ ํ์๋ ๋ ๋ฒ์งธ ๋ ธ๋ ๋๋ ๋ ๋ฒ์งธ๋ก ์ ํธ๋๋ ์์ ์ ์๋ํ๋ค. ์ฆ, ๋ฌธ์ ์ด๊ธฐ ์ ์ ๋ฌธ์ ์ด ์ ์๋์ง ์๋ํ๋ค.
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ์ํ์ค๋ฅผ ์์ฑํ๋ค(์ ํ์์ ์ฑ๊ณต์ ๋ค์ ์ ๋ฌํ๋ ค๋ฉด ์์ ํ ์๋ฃ๋์ด์ผ ํจ) ์ฐ๋ฆฌ๊ฐ ๋จผ์ ๋ฌธ์ ์ด๊ธฐ ์ ์ ๋ฌธ์ ์ ๊ธ ํด์ ํ๊ณ ๊ทธ๋ฐ ๋ค์ ์ด์ด๋ณด๋ ค๊ณ ์๋ํ๋ค.
๋ฌธ์ ์ด ๋ ์ ๊ธ ํด์ ๋จ๊ณ ์ค ์ด๋ ํ๋๊ฐ ์คํจํ๋ฉด(AI๊ฐ ์ด์ ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๊ฑฐ๋, ํ์ํ ์๋ฌผ์ ๋ฐ๋ ๊ธฐ์ ์ด ์์ ์ ์์ผ๋ฉฐ, ๋๋ ์๋ฌผ์ ๋ฅผ ํ์ด๋ณด์์ง๋ง ๋ฌธ์ ์ด๋ ค๊ณ ์๋ํ ๋ ๋ฌธ์ด ๋ชป์ผ๋ก ๋ซํ ์๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ ์ง๋ ๋ชจ๋ฅธ๋ค), ์คํจ๋ฅผ ์ ํ์์ ๋ฐํํ๊ณ ์ ํ์๋ ๊ทธ๋ฐ ๋ค์ ์ฝ์ค์ ์ธ ๋ฒ์งธ๋ก ๋์ด๊ฐ ๋ฌธ์ ๋ถ์๊ฒ ๋๋ค.
์บ๋ฆญํฐ๊ฐ ์ถฉ๋ถํ ๊ฐํ์ง ์๋ค๋ฉด ์ด ์์ ์ด ์คํจํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ๋ ์ด์ ์ทจํ ์ ์๋ ์กฐ์น๊ฐ ์์ผ๋ฏ๋ก ์ ํ์๋ ์คํจํ๊ณ ์ด๋ก ์ธํด ์ ํ์์ ๋ถ๋ชจ ์ํ์ค๊ฐ ์คํจํ์ฌ ๋ฌธ์ ํต๊ณผํ๋ ค๋ ์๋๋ฅผ ํฌ๊ธฐํ๋ค.
์ด๋ฅผ ํ ๋จ๊ณ ๋ ๋์๊ฐ๋ฉด, ์๋ง๋ ์ด ์ ํ๊ธฐ ์์๋ ์ด ์ํ์ค์ ์คํจ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ์กฐ์น๋ฅผ ์ ํํ ์ ํ์๊ฐ ์์ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์๋ ์ต์์์ ์ ํ์๋ฅผ ์ถ๊ฐํ๋ค. ์ข์ธก(๊ฐ์ฅ ์ ํธํ๋ ์ชฝ)์์๋ ๋ฌธ์ ํตํด ๋ค์ด๊ฐ๋ ค๊ณ ํ๋ฉฐ, ๊ทธ ์คํจ ์์๋ ์ฐฝ๋ฌธ์ ํตํด ๋ค์ด๊ฐ๋ ค๊ณ ํ๋ค. ์ค์ ๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ ์ด ๊ฒ์ด ์ด๋ ๊ฒ ๋ณด์ด์ง๋ ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฉฐ, ์ด๊ฒ์ Project Zomboid์์ ํ ๊ฒ์ ๋จ์ํํ ๊ฒ์ด๋ค. ๋์ค์ ๋ ์ผ๋ฐ์ ์ด๊ณ ์ ์ฉํ ๊ตฌํ์ ๋ํด ๋ ผ์ํ๊ฒ ๋ค.
์์ฝํ๋ฉด, ์ฌ๊ธฐ์๋ ํน์ ๊ฑด๋ฌผ ๋ด๋ถ๋ก ๋ค์ด๊ฐ๋ '๊ฑด๋ฌผ ์ง์ ' ํ๋์ด ์๋ค. ๊ฑด๋ฌผ ๋ด๋ถ๋ก ๋ค์ด๊ฐ๊ฑฐ๋ ๊ทธ๋ ๊ฒ ํ ์ ์์์ ๋ถ๋ชจ์๊ฒ ์๋ฆด ์ ์๋ค. ์๋ง๋ ์ฐฝ๋ฌธ์ด ์์ ์๋ ์์ ๊ฒ์ด๋ค. ์ด ๊ฒฝ์ฐ ์ต์์ ์ ํ์๊ฐ ์คํจํ๊ณ ๋ถ๋ชจ ์ ํ์๊ฐ AI์๊ฒ ๋ค๋ฅธ ๊ฑด๋ฌผ๋ก ํฅํ๋๋ก ์ง์ํ ์๋ ์๋ค.
Behaviour Tree์์์ ์ค์ํ ์์ ์ค ํ๋๋ ์คํจ๊ฐ ๋ฌด์์ ํ๋ ค๋ ๊ฒ์ ๋ํ ์น๋ช ์ ์ธ ์ค๋จ์ด ์๋๋ผ ๊ฒฐ์ ํ๋ก์ธ์ค์ ์์ฐ์ค๋ฌ์ด ๋ถ๋ถ์ด๋ผ๋ ๊ฒ์ด๋ค. ์ด์ ์๋์ ๋นํด AI๊ฐ๋ฐ์ ํฌ๊ฒ ๋จ์ํ์ํจ ๊ฒ์ด๋ค. (์ด, ๊ฒฝ๋ก์ฐพ๊ธฐ ์คํจ, ์ด์ ์ด๋กํ์ง?) ์คํจ๋ AI์์คํ ์ ํจ๋ฌ๋ค์์ ์์ฐ์ค๋ฝ๊ฒ ์ ํฉํ ์์ฌ ๊ฒฐ์ ๊ณผ์ ์ ์ผ๋ถ๋ก ๊ฐ์ฃผ๋๋ค.
๊ฐ๋ฅํ ๋ชจ๋ ์ํฉ์ ๋ํด ์์ ์ฅ์น์ ๋์ฒด ์กฐ์น๋ฅผ ๊ณ์ธตํ ํ ์ ์๋ค. Project Zomboid์ ์๋ EnacheItemInInventory ๋์์ด๋ค.
์ด ๋์์ ์ธ๋ฒคํ ๋ฆฌ ์์ดํ ์ ํ์ ์ฌ์ฉํ๋ฉฐ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์ดํ ์ด NPC์ ์ธ๋ฒคํ ๋ฆฌ์ ์๋์ง ํ์ธํ๊ธฐ ์ํด ๊ฐ์ ๋์์ ๋ํ ๋ค๋ฅธ ํญ๋ชฉ ๋งค๊ฐ ๋ณ์๋ก ์ฌ๊ท ํธ์ถ์ ํฌํจํ๋ค.
๋จผ์ ๋์์ ์์ดํ ์ด ์บ๋ฆญํฐ์ ์ฃผ์ ์ต์์ ์ธ๋ฒคํ ๋ฆฌ์ ์ด๋ฏธ ์๋์ง ํ์ธํ๋ค. ์ด๊ฒ์ ์ด์์ ์ธ ์ํฉ์ผ๋ก, ์๋ฌด๋ฐ ์กฐ์น๊ฐ ํ์ํ์ง ์๋ค. ์์ดํ ์ด ์ด๋ฏธ ์์ผ๋ฉด ์ ํ์๊ฐ ์ฑ๊ณตํ๊ณ ๋ฐ๋ผ์ ์ ์ฒด ๋์์ด ์ฑ๊ณตํ๋ค. EnacheItemInInventory๊ฐ ์ฑ๊ณตํ๊ณ ์์ดํ ์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
์์ดํ ์ด ์บ๋ฆญํฐ์ ์ธ๋ฒคํ ๋ฆฌ์ ์๋ ๊ฒฝ์ฐ ๊ฐ๋ฐฉ์ด๋ ๋ฐฐ๋ญ์ ๋ด์ฉ์ ํ์ธํ๋ค. ์์ดํ ์ ์ฐพ์ผ๋ฉด ํด๋น ์์ดํ ์ ๊ฐ๋ฐฉ์์ ์ต์์ ์ธ๋ฒคํ ๋ฆฌ๋ก ์ ์กํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฑ๊ณต ๊ธฐ์ค์ด ์ถฉ์กฑ๋๋ฏ๋ก ์ฑ๊ณตํ๋ค.
์ด ๊ฒฝ์ฐ์๋ ์คํจํ๋ฉด ์ ํ์์ ์ธ ๋ฒ์งธ ๋ถ๊ธฐ์์ ์์ดํ ์ด ์บ๋ฆญํฐ๊ฐ ํ์ฌ ๋จธ๋ฌผ๋ฌ ์๋ ๊ฑด๋ฌผ์ ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์บ๋ฆญํฐ๋ ์์ดํ ์ด ๋ค์ด ์๋ ์ปจํ ์ด๋์ ์์น๋ก ์ด๋ํ๊ณ ์ปจํ ์ด๋์์ ์์ดํ ์ ๊ฐ์ ธ์จ๋ค. ๋ค์ ํ๋ฒ ๊ธฐ์ค์ด ์ถฉ์กฑ๋๋ฏ๋ก ์ฑ๊ณต์ด๋ค.
๋ง์ฝ ์ด๊ฒ๋ ์คํจํ๋ฉด NPC ์ฌ๋ฆฌ๋ธ์ ๋ ๋ค๋ฅธ ํธ๋ฆญ์ด ์๋ค. ๊ทธ๋ฌ๋ฉด ๊ทธ๋ค์ ์ํ๋ ์์ดํ ์ ์ป๊ธฐ ์ํ ์ ์ ๋ ์ํผ ๋ชฉ๋ก์ ๋ฐ๋ณตํ๊ณ , ๊ฐ ๋ ์ํผ์ ๋ํด ๊ฐ ์๋ฃ ์์ดํ ์ ๋ฐ๋ณตํ๋ฉฐ, ๊ฐ๊ฐ์ ์์ดํ ์ ๋ํด ์ํ์ ์ผ๋ก EnsureItemInInventory ๋์์ ํธ์ถํ๋ค. ์ด ์ค ํ๋๋ผ๋ ์ฑ๊ณตํ๋ฉด NPC๊ฐ ์ด์ ์ํ๋ ์์ดํ ์ ์ ์ํ ์ ์๋ ๋ชจ๋ ์๋ฃ๋ฅผ ์์ ํ๊ณ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๊ทธ ์บ๋ฆญํฐ๋ ๊ทธ ์๋ฃ๋ค์ ์ฌ์ฉํ์ฌ ์์ดํ ์ ์ ์ํ ๋ค์ ์ฑ๊ณต์ ๋ฐํํ์ฌ ์์ดํ ์ด ์์์ ์ถฉ์กฑํ๋ค.
๋ง์ฝ ์ด๊ฒ๋ ์คํจํ๋ค๋ฉด, EnsureItemInInventory ๋์์ ๋ ์ด์ ๋๋น์ฑ ์ด ์์ด ์คํจํ๊ณ , NPC๋ ๊ทธ ์์ดํ ์ ์ฐพ๊ธฐ ์ํด ์์ผ๋ก์ ์ฝํ ๋ฏธ์ ์ค์ ์ฃผ์ํด์ผ ํ ์์ดํ ๋ชฉ๋ก์ ์ถ๊ฐํ๊ณ ๊ทธ ์์ดํ ์์ด ์ด์๊ฐ๊ฒ ๋๋ค.
์ด ๊ฒฐ๊ณผ๋ก NPC๋ ํ์ํ ์ฌ๋ฃ๊ฐ ์์ผ๋ฉด ๊ฒ์์์ ์ํ๋ ์์ดํ ์ ์ ์ํ๊ฑฐ๋ ํด๋น ์ฌ๋ฃ๋ฅผ ๊ฑด๋ฌผ์์ ์ป์ ์ ์๋ค.
ํ๋์ ๋ฐ๋ณต์ ์ธ ํน์ฑ์ผ๋ก ์ธํด ์ฌ๋ฃ๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ ๋ฎ์ ์์ค์ ์ฌ๋ฃ์์ ์ ์์ ์๋ํ๋ฉฐ ํ์ํ ํญ๋ชฉ์ ์ ์ํ ์ ์๋๋ก ๊ฑด๋ฌผ์ ์ฐพ์๊ฐ๊ณ ์ฌ๋ฌ ๋จ๊ณ์ ์์ดํ ์ ์ ์ํ์ฌ ์ค์ ๋ก ํ์ํ ์์ดํ ์ ์ ์ํ ์ ์๊ฒ ๋๋ค.
Project Zomboid NPCs by Youtube
๊ฐ์๊ธฐ ๋ณต์กํ๊ณ ์ธ์์ ์ผ๋ก ๋ณด์ด๋ AIํ๋์ด ์๊ฒผ์ง๋ง ์ค์ ๋ก๋ ๋น๊ต์ ๊ฐ๋จํ ๋ ธ๋๊ฐ ์๋ก ๊ฒน์ณ์ ธ ์๋ ๊ฒ์ด๋ค. EnsureItemInInventory ํ๋์ ์ดํ์ NPC๊ฐ ์ธ๋ฒคํ ๊ธฐ์ ํน์ ํญ๋ชฉ์ด ์๋์ง ํ์ธํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ค์ํ ํธ๋ฆฌ ์ ์ฒด์์ ์์ ๋กญ๊ฒ ์ฌ์ฉ๋ ์ ์๋ค.
๊ฐ๋ฐ ์ค ์ด๋ ์์ ์์ ์ฐ๋ฆฌ๋ ๋ ๋ง์ ๋์์ ์ถ๊ฐํ์ฌ NPC๊ฐ ์ค์ ๋ก ํ์๋ก ์ํ๋ ํญ๋ชฉ์ ์ฐพ์๋๊ฐ๋๋ก ํ ๊ฒ์ด๋ฉฐ, ํด๋น ํญ๋ชฉ์ ๊ฐ์ฅ ๋ง์ด ํฌํจํ๊ณ ์์ ๊ฒ์ผ๋ก ์์๋๋ ์ฝํ ๋์์ ์ ํํ ์ ์๊ฒ ํ ๊ฒ์ด๋ค.
์์ผ๋ก ์ฐ๋ฆฌ๋ ๋์ ์ฐ์ ์์์ ๋ค๋ฅธ ์์ ์ฅ์น๋ก, ์ ํ๋ ํญ๋ชฉ๊ณผ ๋์ผํ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ ์ ์๋ ๋ค๋ฅธ ํญ๋ชฉ์ ๊ณ ๋ คํ ์ ์์ ๊ฒ์ ๋๋ค. ์ธ์ ๊ฐ makeshift(์์ ๋ณํต) ๋๊ตฌ๋ฅผ ์ง์ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด, ๋ ํจ๊ณผ์ ์ธ ๋์์ ์ฐพ์ ๋๋ก ๋ชป์ ๋ฐ๋ ๊ฒ์ด ์ข๋น๊ฐ ๋ ๋๋ ์ฒ ๋ฌผ์ ์ผ๋ก ๊ฐ๋ ๊ฒ๋ณด๋ค ๋์ ํด๊ฒฐ์ฑ ์ด ๋ ์ ์์ต๋๋ค.
๊ฐ๋ฐ ์ค์ ํธ๋ฆฌ๋ฅผ ํ์ฅํ๊ธฐ๊ฐ ์ฌ์์ '์์ ์ ์ํํ๋' ๊ฐ๋จํ ๋์์ ๋ง๋ค๊ณ ๋์ ์ ํ์๋ฅผ ํตํด ๋ ๊ฒฌ๊ณ ํ ์์ ์ฅ์น์ ๋์ฒ์ฑ ์ ๊ณ ๋ คํ ์ ์๋๋ก NPC ๋์์ ๋ฐ๋ณต์ ์ผ๋ก ํฅ์์ํค๋ ๊ฒ์ด ์ฝ์ต๋๋ค. ์ ์์ค ์์ ์ฅ์น๋ ๋์ค์ ๋ง์ด ์ถ๊ฐ๋์์ผ๋ฉฐ NPC๊ฐ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ ๋์์ ์ฃผ๋ ๋์์ ๋ ์ถ๊ฐํฉ๋๋ค.
๋์ฑ์ด, ์ ์คํ๊ฒ ์ ์ ํ ์ฐ์ ์์๋ฅผ ์ง์ ํ๋ฉด ์ด๋ฌํ ๋์ฒ์ฑ ๋ค์ ๋ณธ์ง์ ์ผ๋ก ์คํฌ๋ฆฝํธ๋ ๋์์์๋ ๋ถ๊ตฌํ๊ณ AI์บ๋ฆญํฐ์๊ฒ ์ง๋ฅ์ ์ธ ๋ฌธ์ ํด๊ฒฐ๊ณผ ์์ฐ์ค๋ฌ์ด ์์ฌ ๊ฒฐ์ ์ ๋ถ์ฌํ๋ค.
์ด์ ์น์ ์์ ์ค๋ช ํ ๊ฒ๊ณผ ๋น์ทํ๊ธฐ ๋๋ฌธ์ ์์ธํ ๋ค๋ฃจ์ง๋ ์๋๋ค. ๋ฌด์์ ์ํ์ค / ์ ํ์ ๋ ํ์ ๋ ธ๋๊ฐ ์ฒ๋ฆฌ๋๋ ์ค์ ์์๊ฐ ๋ฌด์์๋ก ๊ฒฐ์ ๋๋ค๋ ์ ์ ์ ํํ๋ฉด ์ด๋ฆ๊ณผ ๋์ผํ๊ฒ ์๋ํ๋ค. ์ด๋ ๊ฐ๋ฅํ ํ๋ ๊ณผ์ ์ ์คํ์ ๋ํด ๋ช ํํ๊ณ ๋ฐ๋์งํ ์์๊ฐ ์๋ ๊ฒฝ์ฐ AI ์บ๋ฆญํฐ์ ๋ ๋ง์ ์์ธก ๋ถ๊ฐ๋ฅ์ฑ์ ์ถ๊ฐํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์๋ค.
์ด๋ฏธ ์ด๊ฒ์ ๋ํด ๋ค๋ฃจ์๋ค. ๊ฐ๋จํ ๋งํด์ ํ์ ๋ ธ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ํ๊ฑฐ๋ ๋ฌดํจํํ๋ค. ์ฑ๊ณต์ ์คํจ๊ฐ ๋๊ณ , ์คํจ๋ ์ฑ๊ณต์ด ๋๋ค. ์กฐ๊ฑด๋ถ ํ ์คํธ์ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ค.
Succeccder๋ ํ์ ๋ ธ๋๊ฐ ์ค์ ๋ก ๋ฌด์์ ๋ฐํํ๋์ง์ ๊ด๊ณ์์ด ํญ์ ์ฑ๊ณต์ ๋ฐํํ๋ค. ์ด๋ ์คํจ๊ฐ ์์๋๊ฑฐ๋ ์์๋๋ ํธ๋ฆฌ์ ๋ถ๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ถ์ง๋ง ๋ถ๊ธฐ๊ฐ ์๋ ์ํ์ค์ ์ฒ๋ฆฌ๋ฅผ ํฌ๊ธฐํ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค. ์ด ์ ํ์ ๋ ธ๋์ ๋ฐ๋๋๋ ๋ ธ๋๋ ํ์ํ์ง ์๋๋ค. ์์ ๋ ธ๋์ ์ค๋ฅ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ธ๋ฒํฐ๊ฐ ํ์ ๋ ธ๋๋ฅผ '์คํจ์'๋ก ์ ํํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฆฌํผํฐ(Repeater)๋ ํ์ ๋ ธ๋๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ ๋๋ง๋ค ํด๋น ํ์ ๋ ธ๋๋ฅผ ๋ค์ ์ฒ๋ฆฌํ๋ค. ์ด๋ค์ ํธ๋ฆฌ๋ฅผ ๊ณ์ํด์ ์คํํ๋๋ก ๋ง๋ค๊ธฐ ์ํด ์ฃผ๋ก ํธ๋ฆฌ์ ๋งจ ์๋์์ ์ฌ์ฉ๋๋ค. ๋ฆฌํผํฐ๋ ์ ํ์ ์ผ๋ก ํ์ ํญ๋ชฉ์ ์ค์ ๋ ํ์๋งํผ ์คํํ ๋ค์ ๋ถ๋ชจ๋ก ๋ฐํํ ์ ์๋ค.
๋ฆฌํผํฐ์ฒ๋ผ ์ด ๋ฐ์ฝ๋ ์ดํฐ๋ ๊ณ์ํด์ ์์์ ์ฌ์ฒ๋ฆฌํ๋ค. ์ด๋ ์์์ด ์ต์ข ์ ์ผ๋ก ์คํจ๋ฅผ ๋ฐํํ ๋๊น์ง ์ด๋ฉฐ, ๊ทธ ์์ ์์ ๋ฆฌํผํฐ๋ ๋ถ๋ชจ์๊ฒ ์ฑ๊ณต์ ๋ฐํํ๋ค.
์ด์ ๋ํ ์ธ๋ถ ์ฌํญ์ ๋์ ํธ๋ฆฌ์ ์ค์ ๊ตฌํ, ์ฌ์ฉ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ฐ ๊ธฐํ ๋ชจ๋ ๋ฐฉ์์ ๋ฌ๋ ค ์์ผ๋ฏ๋ก ์ด ๋ชจ๋ ๊ฒ์ ๋ค์ ์ถ์์ ์ด๊ณ ๊ฐ๋ ์ ์ผ๋ก ์ ์งํ๊ฒ ๋ค.
Behaviour Tree๊ฐ AI ์ํฐํฐ์์ ํธ์ถ๋ ๋ ๋ฐ์ดํฐ ์ปจํ ์คํธ๋ ์์ฑ๋๋ค. ์ด ๋ฐ์ดํฐ ์ปจํ ์คํธ๋ ๋ ธ๋์ ์ํด ํด์๋๊ณ ๋ณ๊ฒฝ๋๋ ์์์ ๋ณ์๋ฅผ ์ ์ฅํ๋ ์ญํ ์ ํ๋ค. (C#์ Dictionary์์ ๋ฌธ์์ด/๊ฐ์ฒด ์์ ์ฌ์ฉํ๊ฑฐ๋, Java์ HashMaep, ์๋ง๋ C++์ ๋ฌธ์์ด/void*STL ๋งต ๋ฑ์ ์ฌ์ฉํ ๊ฒ์ด๋ค. ๋ค๋ง C++์ ์ฌ์ฉํ ๊ฒ์ ์ค๋์ ์ด๋ผ ๋ ๋์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ด ์์ ์ ์๋ค.)
๋ ธ๋๋ ๋ณ์๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ์ด ๋์ค์ ์ฒ๋ฆฌ๋๋ ๋ ธ๋์ ์ปจํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ณ ํ๋ํธ๋ฆฌ๊ฐ ํตํฉ๋ ๋จ์๋ก ์๋ํ ์ ์๋๋ก ํ๋ค. ์ด๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ๊ธฐ ์์ํ๋ฉด Behaviour Tree์ ์ ์ฐ์ฑ๊ณผ ๋ฒ์๊ฐ ๋งค์ฐ ์ธ์์ ์ด๋ฉฐ, ์๋์์ ์ค์ ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ๋ ฅํจ์ด ๋๋ฌ๋๋ค. ๋ค์ ๋ฌธ๊ณผ ์ฐฝ๋ฌธ ํ๋์ ์ดํด๋ณผ ๋ ์ด์ ๋ํด ์์ธํ ์์๋ณด๊ฒ ๋ค.
Entity : ์ค์ฒด, ๊ฐ์ฒด๋ผ๋ ์๋ฏธ, ์ ๋ฌด์ ํ์ํ๊ณ ์ ์ฉํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ์งํฉ
Literal : ๋ฐ์ดํฐ(๊ฐ) ๊ทธ ์์ฒด๋ฅผ ๋ปํ๋ค. ์ฆ, ๋ณ์์ ๋ฃ๋ ๋ณํ์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ ๊ฒ.
const a = 1; (a๋ ์์, 1์ ๋ฆฌํฐ๋ด)
๋ค์ ๋งํ์ง๋ง, ์ด์ ๋ํ ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ Behaviour Tree์ ์ค์ ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ๋ฆฌํ ๋ ธ๋์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ๊ฒ์ ํน์ ๊ธฐ๋ฅ์ Behaviour Tree์ ์ถ๊ฐํ ์ ์๊ฒ ํ๊ธฐ ์ํด ๋๋ถ๋ถ์ ์์คํ ์ ๊ตฌํํด์ผ ํ ๋ ๊ฐ์ง ํจ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
init : ๋ ธ๋๊ฐ ์ฒ์์ผ๋ก ๋ฐฉ๋ฌธ๋ ๋ ๋ถ๋ชจ์ ์ํด ํธ์ถ๋๋ค. ์๋ฅผ ๋ค์ด ์ํ์ค ๋ ธ๋๋ฅผ ์ฒ๋ฆฌํ ์ฐจ๋ก๊ฐ ๋ ๋ ์ด ํจ์๋ฅผ ํธ์ถํ๋ค. ๋ถ๋ชจ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ชจ์๊ฒ ๋ฐํํ ํ์ ๋ค์ ๋ฒ ๋ถ๋ชจ ๋ ธ๋๊ฐ ๋ฐ๋๋ ๋๊น์ง ๋ค์ ํธ์ถํ์ง ์๋๋ค. ์ด ํจ์๋ ๋ ธ๋๋ฅผ ์ด๊ธฐํํ๊ณ ๋ ธ๋๊ฐ ๋ํ๋ด๋ ์์ ์ ์์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ฐ๋ฆฌ์ ๊ฑท๊ธฐ ์์ ๋ฅผ ์ฌ์ฉํ๋ฉด ๋งค๊ฐ๋ณ์๋ฅผ ๊ฒ์ํ๊ณ ๊ฒฝ๋ก ์ฐพ๊ธฐ ์์ ์ ์์ํ ์๋ ์๋ค.
process : ๋ ธ๋๊ฐ ์ฒ๋ฆฌ๋๋ ๋์ ๋งค ํฑ๋ง๋ค ํธ์ถ๋๋ค. ์ด ํจ์๊ฐ Success ๋๋ Failure๋ฅผ ๋ฐํํ๋ฉด ์ฒ๋ฆฌ๊ฐ ์ข ๋ฃ๋๊ณ ๊ฒฐ๊ณผ๊ฐ ๋ถ๋ชจ์๊ฒ ์ ๋ฌ๋๋ค. Running์ ๋ฐํํ๋ฉด ๋ค์ ํฑ์์ ๋ค์ ์ฒ๋ฆฌ๋๋ฉฐ, ๊ณ์ํด์ Success ๋๋ Failure๋ฅผ ๋ฐํํ ๋๊น์ง ๋ฐ๋ณต๋๋ค. ๊ฑท๊ธฐ ์์ ์์๋ ๊ฒฝ๋ก ์ฐพ๊ธฐ๊ฐ ์ฑ๊ณตํ๊ฑฐ๋ ์คํจํ ๋๊น์ง Running์ ๋ฐํํ๋ค.
๋ ธ๋๋ ๋ช ์์ ์ผ๋ก ๋ฆฌํฐ๋ด ๋งค๊ฐ๋ณ์๋ ์ ์ด๋๋ AI ์ํฐํฐ์ ๋ฐ์ดํฐ ์ปจํ ์คํธ ๋ด ๋ณ์์ ๋ํ ์ฐธ์กฐ์ ๊ด๋ จ๋ ์์ฑ์ ๊ฐ์ง ์ ์๋ค.
๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ๋ํด์๋ ์ธ์ด ๋ฐ Behaviour Tree(ํ๋ ํธ๋ฆฌ)์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฏ๋ก ๋ค๋ฃจ์ง ์๊ฒ ๋ค. ๊ทธ๋ฌ๋ ๋งค๊ฐ๋ณ์์ Behaviour Tree ์ธ์คํด์ค ๋ด์์์ ์์ ๋ฐ์ดํฐ ์ ์ฅ์ด๋ผ๋ ๊ฐ๋ ์ ๊ฝค ๋ฒ์ฉ์ ์ด๋ค.
์๋ฅผ ๋ค์ด, Walk ๋ ธ๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํ ์ ์๋ค.
Walk (character, destination)
- success: ๋ชฉ์ ์ง์ ๋๋ฌํจ
- failure: ๋ชฉ์ ์ง์ ๋๋ฌํ์ง ๋ชปํจ
- running: ์ด๋ ์ค
์ด ๊ฒฝ์ฐ Walk์๋ ๋ ๊ฐ์ ๋งค๊ฐ๋ณ์๊ฐ ์๋ค. ์บ๋ฆญํฐ์ ๋ชฉ์ ์ง์ด๋ค. AI ๋์์ ์คํํ๋ ์บ๋ฆญํฐ๊ฐ ๋ ธ๋์ ์ฃผ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๋ช ์์ ์ผ๋ก ์ ๋ฌํ ํ์๊ฐ ๋ฒ์ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ง๋ง, 'Walk'๊ฐ ๊ฝค ์์ ํ ์ ํ์ด๊ธฐ๋ ํ์ง๋ง ์ด ๊ฐ์ ์ ํ์ง ์๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค. ํนํ ์กฐ๊ฑด ๋ ธ๋์์ ๋ค๋ฅธ ์บ๋ฆญํฐ์ ์ํ๋ฅผ ํ ์คํธํ๊ฑฐ๋ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์ํธ์์ฉํด์ผ ํ ๋ ๋ ธ๋๋ฅผ ๋ค์ ์ฝ๋ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ฌด ๋ง์๋ค. ๊ฑฐ์ ํ์คํ๋๋ผ๋ ๋์์ ์คํํ๋ AI๋ง ํ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐ๋๋ค๋ฉด ๋ช ๋ น์ด ์ ์ฉ๋๋ ์บ๋ฆญํฐ๋ฅผ ์ถ๊ฐ๋ก ์ ๋ฌํ๋ ๊ฒ์ด ํญ์ ๊ฐ์ฅ ์ข๋ค.
์์์ ์ธ๊ธํ ๋๋ก ์ ๋ฌ๋ ์์น๋ ์๋์ผ๋ก x, y, z ์ข๋ฃํฌ ์ ๋ ฅ๋ ์ ์๋ค. ๊ทธ๋ฌ๋ ์์น๋ ์์ฃผ ๋ค๋ฅธ ๋ ธ๋์ ์ํด ๋ณ์๋ก ์ปจํ ์คํธ์ ์ ์ฅ๋๋ฉฐ, ๊ฒ์ ์ค๋ธ์ ํธ๋ ๊ฑด๋ฌผ์ ์์น๋ฅผ ์ป๊ฑฐ๋ NPC์ฃผ๋ณ์ ์์ ํ ๊ณณ์ ๊ณ์ฐํ ์ ์๋ค.
Behaviour Tree๋ฅผ ์ฒ์ ์ดํด๋ณผ ๋, ๋ณดํต ๋ ธ๋๋ค์ ์บ๋ฆญํฐ์ ํ๋์ด๋ ์บ๋ฆญํฐ ๋๋ ํ๊ฒฝ๊ณผ ๊ด๋ จ๋ ์กฐ๊ฑด ํ ์คํธ๋ก๋ง ์ ํํ๋ ๊ฒฝํฅ์ด ์๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ํ์ด ๋์ ํธ๋ฆฌ๊ฐ ์ผ๋ง๋ ๊ฐ๋ ฅํ์ง๋ฅผ ์ดํดํ๊ธฐ์๋ ๋ค์ ์ด๋ ค์ธ ์ ์๋ค.
์คํ ์ฐ์ฐ์ ๋ ธ๋๋ก ๊ตฌํํ๋ฉด์ ๋ ธ๋์ ์ ์ฉ์ฑ์ด ๋์๊ฒ ์ ๋ง๋ก ๋ช ๋ฐฑํด์ก๋ค. ๊ทธ๋์ ๊ฒ์์ ๋ค์ ๋ ธ๋ ๊ตฌํ์ ์ถ๊ฐํ๋ค.
PushToStack(item, stackVar)
PopFromStack(stack, itemVar)
IsEmpty(stack)
์ด ์ธ๊ฐ์ง ๋ ธ๋์๋ ๋จ ๋ช ์ค์ ์ฝ๋๋ก ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์คํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์์ ํ๋ ๋ฐ ํ์ํ init / process ํจ์๋ง ๊ตฌํ๋ฉด ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๊ฒ์ผ๋ก ๋ค์ํ ๊ฐ๋ฅ์ฑ์ด ์ด๋ฆฐ๋ค.
์๋ฅผ ๋ค์ด, PushToStack์ ์ ์คํ์ ์์ฑํ๊ณ ์ ๋ฌ๋ ๋ณ์ ์ด๋ฆ์ ์ ์ฅํ ๋ค์ 'item'๊ฐ์ฒด๋ฅผ ์คํ์ ํธ์ํ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก pop์ ์คํ์์ ํญ๋ชฉ์ ํํ๊ณ itemVar ๋ณ์์ ์ ์ฅํ๋ฉฐ, ์คํ์ด ์ด๋ฏธ ๋น์ด์๋ ๊ฒฝ์ฐ ์คํจํ๋ฉฐ IsEmpty๋ ์ ๋ฌ๋ ์คํ์ด ๋น์ด ์๋์ง ํ์ธํ๊ณ ๋น์ด ์์ผ๋ฉด ์ฑ๊ณต์ ๋ฐํํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ์คํจ๋ฅผ ๋ฐํํ๋ค.
์ด๋ฌํ ๋ ธ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ฒด ์คํ์ ๋ฐ๋ณตํ ์ ์๋ค.
Until Fail ๋ฆฌํผํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์คํ์์ ํญ๋ชฉ์ ๊ณ์ํด์ ํํ๊ณ ํด๋น ํญ๋ชฉ์ ์์ ์ ์ํํ ์ ์๋ค. ์คํ์ด ๋น์ด ์๋ ์ง์ ์์ PopFromStack์ด ์คํจ๋ฅผ ๋ฐํํ๊ณ Until Fail ํผ๋ฆฌํฐ์์ ๋น ์ ธ๋์ฌ ๊ฒ์ด๋ค.
๊ทธ ๋ค์์ผ๋ก ์ ๊ธฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ช ๊ฐ์ง ์ค์ํ ์ ํธ๋ฆฌํฐ ๋ ธ๋๋ค์ด ์๋ค.
SetVariable(varName, object)
IsNull(object)
์ด๋ค์ Composite(๋ณตํฉ)์ Decorator(๋ฐ์ฝ๋ ์ดํฐ)๊ฐ ํ์ํ ์ ๋ณด๋ฅผ ํธ๋ฆฌ ์์๋ก ๊ฐ์ ธ์ค๋ ๋ฐ ์ถฉ๋ถํ ์ธ๋ถ์ฑ์ ์ ๊ณตํ์ง ์์ ๋ Behaviour Tree์ ์ฒด์์ ์์์ ๋ณ์๋ฅผ ์ค์ ํ ์ ์๊ฒ ํ๋ค. ์ ์ ํ์ ์ด์ ๊ฐ์ ์ํฉ์ ์ง๋ฉดํ๊ฒ ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ํ์ํ์ง ์๋๋ก ์ ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ์ ์์ฌํ์ง ์๋๋ค.
์ด์ GetDoorStackFromBuilding ์ด๋ผ๋ ๋ ธ๋๋ฅผ ์ถ๊ฐํด ๋ณด๊ฒ ๋ค. ์ด ๋ ธ๋์๋ ๊ฑด๋ฌผ ๊ฐ์ฒด๊ฐ ์ ๋ฌ๋๋ฉฐ ํด๋น ๊ฑด๋ฌผ์ ์ธ๋ถ ๋ฌธ ๊ฐ์ฒด ๋ชฉ๋ก์ ๊ฒ์ํ์ฌ ์ด๋ฅผ ์ฑ์ฐ๊ณ ์ด๊ธฐํํ ์คํ์ ํด๋น ๊ฐ์ฒด๋ฅผ ์ค์ ํ๋ ๊ธฐ๋ฅ์ด ์๋ค. ๊ทธ๋ผ ์์์ ์ค๋ช ํ ๊ฒ๋ค์ ์ฌ์ฉํ๋ฉด ์ด๋ค ์์ ์ ์ํํ ์ ์์๊น?
์ด๊ฒ ์กฐ๊ธ ๋ณต์กํด์ง ๊ฒ ๊ฐ๊ณ , ์ฒ์์๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ํ๋จํ๊ธฐ ์ด๋ ค์ ๋ณด์ผ ์ ์์ง๋ง, ์ด๋ค ์ธ์ด๋ ์ง ๊ฒฐ๊ตญ์ ํ๋์ ์ฝ๊ธฐ ์ฌ์์ง๊ณ ๊ฐ๋ ์ฑ์ ์๋๋ผ๋ ์ ์ฐ์ฑ์ ์ป๊ฒ ๋๋ค.
๊ทธ๋์ ์ด๊ฒ ๋ฌด์จ ์ผ์ ํ๋ ๊ฑธ๊น? ์ฒ์์๋ ๋ณต์กํ ์ ์์ง๋ง ๋ ธ๋๊ฐ ์ด๋ป๊ฒ ์๋ํ๊ณ ์ฑ๊ณต๊ณผ ์คํจ๊ฐ ํธ๋ฆฌ๋ฅผ ํก๋นํ๋ ๋ฐฉ์์ ์ต์ํด์ง๋ฉด ์๊ฐํํ๊ธฐ๊ฐ ํจ์ฌ ์ฌ์์ง๋ค. ์ค๋ช ์ด ์ถฉ๋ถํ์ง ์๋ค๋ฉด ํธ๋ฆฌ๋ฅผ ๋ฐ๋ผ๊ฐ๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ด ์น์ ์ ํ์ฅํ ์๋ ์๋ค.
๊ฐ๋จํ ๋งํด์, ๊ฑด๋ฌผ์ ๋ชจ๋ ๋ฌธ์ ๊ฒ์ํ ๋ค์ ๋ค์ด๊ฐ๋ ค๊ณ ์๋ํ๊ณ , ์บ๋ฆญํฐ๊ฐ ๋ฌธ ์ค ํ๋๋ผ๋ ๋ค์ด๊ฐ๋ ๋ฐ ์ฑ๊ณตํ๋ฉด ์ฑ๊ณต์ ๋ฐํํ๊ณ , ์คํจํ๋ฉด ์คํจ๋ฅผ ๋ฐํํ๋ ๋์์ด๋ค.
๋จผ์ ๊ฑด๋ฌผ๋ก ๋ค์ด๊ฐ๋ ๋ชจ๋ ์ถ์ ๊ตฌ๊ฐ ํฌํจ๋ ์คํ์ ๊ฐ์ ธ์จ๋ค. ๊ทธ๋ฐ ๋ค์ ์์์ด ์คํจ๋ฅผ ๋ฐํํ ๋๊น์ง ์์์ ๊ณ์ ์ฌ์ฒ๋ฆฌํ๋ Until Fail ๋ฆฌํผํฐ ๋ ธ๋๋ฅผ ํธ์ถํ๋ค.
์ํ์ค์ธ ํด๋น ์์์ ๋จผ์ ๋ฌธ์ ํํ๊ณ ์ด๋ฅผ door ๋ณ์์ ์ ์ฅํ๋ค.
๋ฌธ์ด ์๊ธฐ ๋๋ฌธ์ ์คํ์ด ๋น์ด ์๋ค๋ฉด, ์ด ๋ ธ๋๋ Until Fail ๋ฆฌํผํฐ๋ฅผ ์ฑ๊ณต์ผ๋ก ๊ฐ์ฃผํ์ฌ ๋ถ๋ชจ ์ํ์ค๋ฅผ ๊ณ์ ์งํํ๋ค. (Until Fail์ ํญ์ ์ฑ๊ณต์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ) ๋ถ๋ชจ ์ํ์ค์๋ 'usedDoor'์ ๋ํ ๋ฐ์ ๋ 'IsNull' ์ฒดํฌ๊ฐ ์๋ค. ์ด ์ฒดํฌ๋ 'usedDoor'๊ฐ null์ธ ๊ฒฝ์ฐ์ ์คํจํ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ ธ๋๋ ์คํ์ด ๋น์ด์๋ ์ํ์์ ์ด๋ฏธ Until Fall ๋ฆฌํผํฐ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ 'usedDoor' ๋ณ์๋ฅผ ์ค์ ํ ๊ธฐ์ธ๊ฐ ์์๋ค. ๋ฐ๋ผ์ ์ด ์คํจ๋ ์ ์ฒด ๋์์ ์คํจ ์ํ๋ก ๋ง๋ค๊ฒ ๋๋ค.
์คํ์ด ๋ฌธ์ ์ก๋ ๋ฐ ์ฑ๊ณตํ๋ฉด, ๋ฌธ์ผ๋ก ๊ฑธ์ด๊ฐ์ ๋ฌธ์ ์ด๊ณ ํต๊ณผํ๋ ค๊ณ ์๋ํ๋ ๋ ๋ค๋ฅธ ์ํ์ค(์ธ๋ฒํฐ ํฌํจ)๋ฅผ ํธ์ถํ๋ค.
๋ง์ฝ NPC๊ฐ ์ด์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์๋จ์ผ๋ก ๋ฌธ์ ํต๊ณผํ์ง ๋ชปํ๋ค๋ฉด(๋ฌธ์ด ์ ๊ฒจ์๊ฑฐ๋ NPC๊ฐ ๋ฌธ์ ๋ถ์๊ธฐ์ ๋๋ฌด ์ฝํ๋ค๋ฉด), ์ ํ์(Selecotor)๋ ์คํจํ๊ณ ์ด ์คํจ๋ฅผ ์์ ์ธ๋ฒํฐ(Inverter)์ ๋ฐํํ๋ค. Inverter๋ ์ด ์คํจ๋ฅผ ์ฑ๊ณต์ผ๋ก ๋ฐ์ ์ํจ๋ค. ๋ฐ๋ผ์ Until Fail ๋ฆฌํผํฐ์์ ๋น ์ ธ๋๊ฐ์ง ์๊ฒ ๋๊ณ , ์ด๋ ๋ฐ๋ณต๋์ด ๋ค์ ๋ฌธ์ ์คํ์์ ๊บผ๋ด์ด(Pop) NPC๊ฐ ๋ค์ ๋ฌธ์ ์๋ํ๋ ์๋ก์ด ํธ์ถ์ ์ํํ๋ค.
๋ง์ฝ NPC๊ฐ ๋ฌธ์ ํต๊ณผํ๋ ๋ฐ ์ฑ๊ณตํ๋ค๋ฉด, ํด๋น ๋ฌธ์ 'usedDoor' ๋ณ์์ ์ค์ ํ๊ฒ ๋๊ณ , ์ด ์์ ์์ ์ํ์ค๋์ฑ๊ณต์ ๋ฐํํ๋ค. ๊ทธ๋ฌ๋ ์ด ์ฑ๊ณต์ ์คํจ๋ก ๋ฐ์ ๋์ด Until Fail ๋ฆฌํผํฐ๋ฅผ ๋น ์ ธ๋๊ฐ ์ ์๊ฒ ๋๋ค.
์ด ๊ฒฝ์ฐ์๋ null์ด ์๋๊ธฐ ๋๋ฌธ์ 'UsedDoor'์ ๋ํ IsNull ๊ฒ์ฌ๊ฐ ์คํจํ๊ฒ ๋๋ฉฐ, ์ด๋ ์ฑ๊ณต์ผ๋ก ๋ฐ์ ๋์ด ์ ์ฒด ๋์์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ฒ ๋๋ค. ๋ถ๋ชจ๋ NPC๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋ฌธ์ ์ฐพ์ ๊ฑด๋ฌผ๋ก ๋ค์ด๊ฐ์์ ์๊ฒ ๋๋ค.
๋ง์ฝ ํ๋ก์ธ์ค๊ฐ ์คํจํ๋ค๋ฉด, ๋น์ทํ ๋ฐฉ์์ผ๋ก 'GetWindowStackFromBuilding' ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฐฝ๋ฌธ์ ๋์์ผ๋ก ๋ฐ๋ณตํ ์ ์๋ค. ๋ช ใฑ์ง ์ถ๊ฐ์ ์ธ ์คํ ์กฐ์ ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ 'GetDoorStackFromBuilding' ์ 'GetWindowStackFromBuilding'์ ์ฐ์ด์ด ํธ์ถํ ์๋ ์๋ค. ์ฐฝ๋ฌธ์ ๋ฌธ ์คํ ๋์ ์ถ๊ฐํ๊ณ ๋์ผํ 'Until Fail' ๋ฃจํ ๋ด์์ ์ด๋ค์ ์ฒ๋ฆฌํ์ฌ ๋ฌธ๊ณผ ์ฐฝ๋ฌธ ๋ชจ๋ ์ํธ์์ฉ์ ์๋ํ ์ ์๋ค. ์ด๋ Open, Unlock, Smash, Close์ ๊ฐ์ ์์ ์ด ๋ฌธ๊ณผ ์ฐฝ๋ฌธ์ ์ผ๋ฐ ๋ฒ ์ด์ค์์ ๋์ํ๊ฑฐ๋ ์ํ ์ค์ ์์ ๋์ ๊ฐ์ฒด์ ๋ํ ๋ฐํ์ ํ์ ์ฒดํฌ๋ฅผ ์ํํ๋ค๊ณ ๊ฐ์ ํ๋ค.
๋ง์ง๋ง์ผ๋ก, ๋ฌธ์ ๋ซ๋ ๋ ธ๋์ ๋ถ๋ชจ๋ก Succeeder ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ถ๊ฐํ ๊ฒ์ ์ฃผ๋ชฉํ ๊ฒ์ด๋ค. ์ด๋ NPC๊ฐ ๋ฌธ์ ๋ถ์๋ฉด ๋ซ๋ ๋ฐ ์คํจํ ๊ฒ์ด๋ผ๋ ์๊ฐ์ด ๋ค์ด ์ถ๊ฐํ ๊ฒ์ด๋ค.
๋ง์ฝ Succeeder๊ฐ ์๋ค๋ฉด, 'usedDoor' ๋ณ์๊ฐ ์ค์ ๋๊ณ ๋ค์ ๋ฌธ์ผ๋ก ์ด๋ํ๊ธฐ ์ ์ ์ํ์ค๊ฐ ์คํจํ๊ฒ ๋๋ค. ๋ ๋ค๋ฅธ ํด๊ฒฐ์ฑ ์ ๋ฌธ์ด ๋ถ์์ง ๊ฒฝ์ฐ์๋ 'close Door'๊ฐ ํญ์ ์ฑ๊ณตํ๋๋ก ์ค๊ณํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๋ฌธ์ ๋ซ๋ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ๊ณ์ํด์ ํ ์คํธ ํ๊ณ ์ถ๋ค. (์๋ฅผ ๋ค์ด, 'Secure Safehouse' ๋์์์๋ ๋ฌธ์ด ๊ฑฐ์น๋์์ ๋จ์ด์ ธ ๋๊ฐ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๋ซ๋ ๋ฐ ์คํจํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋จ) ๋ฐ๋ผ์ Succeeder๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ์คํจ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ฌด์ํ ์ ์๋๋ก ์ฒ๋ฆฌํ๋ค.
๋ฉ๋ชจ๋ฆฌ์ ์คํ ์์ญ์ ํจ์์ ํธ์ถ๊ณผ ๊ด๊ณ๋๋ ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์, ๋ฆฌํด ๊ฐ๋ฑ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
์คํ์ด๋ ๋จ์ด '์ฐจ๊ณก ์ฐจ๊ณก ์์ฌ์ง ๋๋ฏธ'๋ฅผ ์๋ฏธํ๋ค.
LIFO(Last In First Out, ํ์ ์ ์ถ) ๊ตฌ์กฐ ๋ผ๊ณ ๋ ํ๋ค.
์คํ์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ PUSH๋ผ๊ณ ํ๋ค.
PUSH๋ฅผ ํ๋ฉด ๊ธฐ์กด ๋ฐ์ดํฐ ์์ ์ ๋ฐ์ดํฐ๊ฐ ์์๋๋ก ์์์ง๋ค.
์คํ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋นผ๋ด๋ ๊ฒ์ POP๋ผ๊ณ ํ๋ค.
Behaviour Tree
AI์ ํ๋ ํธ๋ฆฌ : ์๋ ๋ฐฉ์
์คํ์ด๋?
IT_Try tistory