FSM์ผ๋ก ai ๋ง๋ค๊ณ ๋์ bt๋ก๋ ๋ง๋ค์ด ๋ณด๊ณ ์ถ์ด์ ๊ณต๋ถ์ค์
๋๋ค.
์ ์ง๊ธ ์ ๊ฐ ํท๊ฐ๋ฆฌ๋๊ฒ ์๋ฅผ๋ค์ด attack ํ๋ ํธ๋ฆฌ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
IsInMeleeAttackRange = 3f
IsInRangeAttackRange = 6f
attackTree = Selector (
new Sequence
(
Condition(IsInMeleeAttackRange),
Action(meleeAttack),
),
new Sequenceย ย ย ย
(ย ย ย ย
Condition(IsInRangeAttackRange),ย ย ย ย
Action(rangeAttack),ย ย ย ย
),
)
์ด๋ ๊ฒ ์๋ค๊ณ ๊ฐ์ ํ์ ๋, ๊ณต๊ฒฉ ํธ๋ฆฌ ์์ ์์, ์ฒ์์ ํ๋ ์ด์ด์์ ๊ฑฐ๋ฆฌ๊ฐ 5์ผ ๋ RangeAttack์ด ์คํ๋๋ค๊ฐ ๋ค์ ํ๋ ์์ ํ๋ ์ด์ด๊ฐ 2์ ๊ฑฐ๋ฆฌ๋ก ๊ฐ๊น์์ง๋ฉด, IsInMeleeAttackRange ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ด ์๊ฑฐ๋ฆฌ ๊ณต๊ฒฉ ์ค์ ๊ทผ์ ๊ณต๊ฒฉ์ด ํธ๋ฆฌ๊ฑฐ๋ ๊ฒ ๊ฐ์๋ฐ ์๋ํ๋ฉด ํธ๋ฆฌ ๊ตฌ์กฐ์ meleeattackย ์ํ์ค ๋ ธ๋๊ฐ ๋จผ์ ์คํ๋๊ณ ์๊ฑฐ๋ฆฌ๊ณต๊ฒฉ ์ํ์ค๊ฐ ์คํ์ด ๋๋ค๋ณด๋,,, ์ด๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด private BehaviorTreeNode runningNode ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ์คํ ์ค์ธ ๋ ธ๋๊ฐ Success๋ฅผ ๋ฐํํ ํ์๋ง ๋ค๋ฅธ ์์ ๋ ธ๋๋ฅผ ํ๊ฐํ๋๋ก ๋ง๋ค์ด์ผ ํ ๊น์? repeatuntillsucess decorator node๊ฐ์๊ฑฐ ๋ง๋ค๊ณ ์ถ์๋ฐ ์ด๋ป๊ฒ ํด์ผํ ์ง ๊ฐ์ด ์์กํ๋ค์ฉ ใ ใ
action ํ๋ ๋๋ฌ์ ๋ ๋ค์ action ์ฐพ๋๋ก ์ง์๋ฉด ๋ ๊ฑฐ ๊ฐ์์. repeatuntillsucess ์๊ฑด ๋ด๋ถ condition์ ๋ฐ๋ผ์ success ๋ฐํ ํ ๋๊น์ง ๋ฐ๋ณต๋๋ฉด action ๋๋ฌ์ ๋ ๋ค์ action ์ฐพ์ผ๋๊น ์๋์ผ๋ก ์ฑ๊ณตํ ๋๊น์ง ๋๋ฏ
๊ทธ๋ฌ๋๊น runningNode๊ฐ์ ๋ณ์์ ํ์ฌ ์คํ์ค์ธ ๋ ธ๋ ๋ฃ๊ณ runningNode.execute๋ฅผ ์คํ์ํค๊ณ ํ์ฌ ์คํ์ค์ธ ๋ ธ๋๊ฐ success๋ฅผ ๋ฐํํ๋ฉด ๋ค๋ฅธ ๋ ธ๋๋ค์ ์ฐพ๋๋ก ๋ง์์ด์์ฃ ? repeatuntillsucess ์ด๊ฒ ๋ค์ ์๋ ๋ ธ๋๋ค์ ์คํ์๋๊ฒ ๋ง์์ฃผ๋๋ฐ repeatuntillsucess ์์ ์๋ ๋ ธ๋๋ค์ ์คํ์ด ๋๋๋ผ๊ตฌ์ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์์๋๋ก ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค๋ณด๋