๐ ๊ณต์ง ์ฌํญ ์ด ํฌ์คํธ๋ ์ธํ๋ฐ์ ์ ๋ฌธ์๋ฅผ ์ํ UE5-Part3. ์ธ๋ฆฌ์ผ ์์ง 3D ๊ฒ์ ๊ฐ๋ฐ ์ ๋ฌธ ๊ฐ์๋ฅผ ํตํด ํ์ตํ ๋ด์ฉ์ ์์ฝ์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ํด๋น ๊ฐ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
Monster AI
๋ง๋ค์ด์ผ ํ ๋ธ๋ฃจํ๋ฆฐํธ ๋ฆฌ์คํธ
- BP_Monster : pawn ์์. ๋ชฌ์คํฐ์ ์ธํ๊ณผ ๊ธฐ๋ณธ์ ์ธ ํ๋
- BP_MonsterController : AIController ์์.
- BT_Monster : Behavior Tree ์์.
- BB_Monster : BT์ ์ง. Black board ์์.
blueprint์์ ์ค์ ํค๋ฅผ ๋๋ฅธ ๋ค์ show inherited variables๋ฅผ ํด๋ฆญํ๋ฉด ๋ถ๋ชจ ํด๋์ค์๊ฒ์ ์์๋ฐ์ ๋ณ์๋ค์ ๋ณผ ์ ์๋ค.
Behavior Tree ์ฐํด๋ฆญํ๋ฉด Tasks์ Composites๊ฐ ์๋ค. Tasks๋ ์ต์ข ์ ์ผ๋ก ํ๋ํด์ผํ๋ ๊ฒฐ๊ณผ๋ผ๊ณ ํ ์ ์๊ณ , Composites๋ ๋ถ๊ธฐ ๋ฑ์ ๋ปํ๋ค. New Task๋ฅผ ํตํด์ ์๋ก์ด ํ์คํฌ๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ์์ฑ๋ Task๋ Receive Execute AI๋ผ๋ ์ด๋ฒคํธ๋ฅผ ํตํด์ ์คํ๋๋ค. - task๋ ์ฑ๊ณต์ฌ๋ถ๊ฐ ์ค์ํ๊ธฐ ๋๋ฌธ์, ๋ฐ๋์ Finish Execute๋ฅผ ํตํด์ ์ฑ๊ณตํ๋์ง ์คํจํ๋์ง ์๋ ค์ฃผ์ด์ผ ํ๋ค.
์๋ก ์์ฑํ Task : BTTask_FindPatrolLocation ์์ฐฐํ ์ ์๋ ์์น๋ฅผ ์ฐพ๊ณ ์ ํ๋ค. ์ด๋ฅผ ์ํด์ ์ด๋๊ฐ ๊ฐ ์ ์๋ ๊ณณ์ธ์ง ํ์ ํด์ผํ๋ค. ์๋์ NavMeshBoundsVolume์ ์ถ๊ฐํ๋ค. P๋ฅผ ๋๋ฅด๋ฉด ์ด๋ก์์ผ๋ก ๊ฐ ์ ์๋ ์์น๊ฐ ์๋์ผ๋ก ๊ณ์ฐ๋๋ค. ์ด์ ์ค๋น๊ฐ ๋์์ผ๋, Get Random Location In Navigable Radious๋ฅผ ์ด์ฉํ๋ค. ์ด๋ฆ ๊ทธ๋๋ก ๊ฐ ์ ์๋ ๋ฒ์ ์์์ ๋ฌด์์์ ์์น๋ฅผ ์ป์ด์ค๋ ํจ์.
Q. ์์น๋ฅผ ์ฐพ์๋ค๊ณ ํด๋ ์ฐพ์ ์์น๋ฅผ ์ด๋ป๊ฒ BT๋ก ๋ณด๋ด์ค ๊ฒ์ธ๊ฐ? A. Blackboard๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด๋ค. 1. ์ด๋ฅผ ์ํด์๋ BT์์ ๋ธ๋๋ณด๋๋ก ์ด๋ ํ ํค๊ฐ์ ์ถ๊ฐํด์ฃผ์ด์ผํ๋ค. 2. BTTask์ ๋ณ์๋ฅผ ์ถ๊ฐํด์ฃผ๋๋ฐ, Blackboard Key Selector ํ์ ์ผ๋ก ์์ฑํด์ผ ํ๋ค. 3. ์ดํ ๋๋ชจ์์ ํด๋ฆญํด์ public์ผ๋ก ๋ณ๊ฒฝํด์ฃผ๋ฉด, BT๋ด์ BTTask ๋ ธ๋์์ ๋ณ์๋ฅผ ์ ํํ ์ ์๊ฒ ๋๋ค.
์ด์ BTTask ์์์ Set Blackboard Value as Vector๋ฅผ ํตํด์ ๊ฐ์ ์ ๋ฌํ ์ ์๊ฒ ๋์๋ค.
BT : Service ์ฃผ๊ธฐ์ ์ผ๋ก ํด์ผํ๋ ์ผ๋ค(ํ๋ ์ด์ด๋ฅผ ํ์ํด์ ์ฐพ์์ผ ํ๋ค๊ฑฐ๋) Event Receive Tick AI ๋ฅผ ํตํด์ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค. ์ด๋ฆ ๊ทธ๋๋ก ๋งค ํฑ๋น ํธ์ถ๋๋ ๋ฏ ํ์ง๋ง Class Default์ ๊ฐ์ ์ฃผ๊ธฐ๋ฅผ ์ค์ ํ ์ ์๋ค.
- ์๋น์ค๋ฅผ ์์ฑํ๋ค๋ฉด BT์ composites์ ์ถ๊ฐํด์ ์ฌ์ฉํ ์ ์๋ค.
์ด์ ์๋น์ค์์ ํ๊ฒ์ ์ฐพ๋ ๋ก์ง์ ์ถ๊ฐํด๋ณด์
- ์ผ๋จ object type์ ์ฐพ์์ ๋๊ฒจ์ผ ํ๋ฏ๋ก, BT->BB์์ ์ค๋ธ์ ํธ ํ์ ์ ์ถ๊ฐํด์ค๋ค.
- Service_FindTarget์ ๋ก์ง์ ์๋์ ๊ฐ๋ค.
- Get Actor of Class๋ฅผ ์ด์ฉํด์ BP_Player๋ฅผ ์ฐพ์ ํ, Controlled Pawn์ ์์น์ ๋น๊ตํด์ ๋จ์ด์ง ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ค. ๋จ์ด์ง ๊ฑฐ๋ฆฌ๊ฐ ์ผ์ ์ดํ์ผ ๋, Set Blackboard Value as Object๋ฅผ ์ด์ฉํด์ ์ฐพ์ BP_Player ์ค๋ธ์ ํธ๋ฅผ ํ ๋นํ๋ค. ์ด ๊ฐ์ ๋๊ฒจ์ฃผ๊ฒ ๋๋ฏ๋ก, ํด๋น ์๋น์ค๋ฅผ ์คํํ๋ฉด ํ๋ ์ด์ด์ ์์น๋ฅผ ์ฐพ์์ ์ ๋ฌํด์ฃผ๊ฒ ๋จ.
BT : Decorator Composites์ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ, Service๊ฐ ์คํ๋๋ ๊ฐ๋ ์ด๋ผ๋ฉด, Decorator๋ if๋ฌธ์ ์กฐ๊ฑด์ ์ค์ ํ๋ ๊ฐ๋ ์ด๋ค. TargetEnemy is Is Not Set ์ผ๋ก ์ค์ ํด๋๋ฉด, ์ ์ ์ฐพ์ง ๋ชปํ์ ๋์๋ง (๋๋ค์์น ์์ฐฐ์ด) ์คํ๋๋๋ก ๋ง๋ค ์ ์๋ค.
- ๋ฐ๋ผ์ ๋ฐ์ฝ๋ ์ดํฐ ์ถ๊ฐ ํ, ์ ์ ์ฐพ์ ๊ฒฝ์ฐ์ TargetEnemy ์ชฝ์ผ๋ก ์ด๋ํ๋๋ก ๊ตฌํํ๋ฉด ์ค์ผ์ด.
Custom Decorator ์์ฑ target๊ณผ range ๋ณ์๋ฅผ public์ผ๋ก ์์ฑํด์ค๋ค. ํจ์๋ PerformConditionCheckAI๋ฅผ override ํด์ ์ฌ์ฉํด์ค๋ค. ๊ฐ์ฅ ํํ ํจ์.
๋๊ธ๋จ๊ธฐ๊ธฐ