1 ๋ถ„ ์†Œ์š”

๐ŸŒ ๊ณต์ง€ ์‚ฌํ•ญ ์ด ํฌ์ŠคํŠธ๋Š” ์ธํ”„๋Ÿฐ์˜ ์ž…๋ฌธ์ž๋ฅผ ์œ„ํ•œ 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 ํ•ด์„œ ์‚ฌ์šฉํ•ด์ค€๋‹ค. ๊ฐ€์žฅ ํ”ํ•œ ํ•จ์ˆ˜.

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ