ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [UE5 RPG] 10. ๋ชฌ์Šคํ„ฐ AI ์ˆ˜์ • : BT Abort, ์ผ์ •๊ฑฐ๋ฆฌ ์ด์ƒ ๋ฉ€์–ด์ง€๋ฉด ๋ณต๊ท€ํ•˜๊ธฐ, ํด๋” ๊ด€๋ฆฌ
    UnrealEngine/SomedayProject 2025. 11. 25. 17:39

     

     


    ๐Ÿ“Œ Someday Proejct ๊ฐœ๋ฐœ์ผ์ง€ ์‹œ๋ฆฌ์ฆˆ

    ๋”๋ณด๊ธฐ
     

     

     

     

    ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ์— ์ค‘๋‹จ์  ๊ฑธ์–ด๋†จ๋”๋‹ˆ ์—๋””ํ„ฐ๊ฐ€ ์•ˆ์ผœ์ง€๋Š” ๋ฒ„๊ทธ๊ฐ€ ์žˆ์—ˆ๋‹ค

    ํ•ด๋‹น ์—์…‹ ์ž ๊น ์ž˜๋ผ๋†“๊ณ  ๋นŒ๋“œํ•œํ›„์— ๋ถ™์—ฌ๋„ฃ๊ธฐํ•˜๋‹ˆ๊นŒ ์ •์ƒ ์ž‘๋™ํ•จ..

     

     

    ๐ŸŒณ BT ๋ณด์™„ํ•˜๊ธฐ

    BT์— Tag ์ถ”๊ฐ€ํ•˜๊ธฐ

    Target Setting ์—ฌ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ Tag๋กœ ๊ด€๋ฆฌํ•˜๋Š”๊ฒŒ ๋‚ซ์ง€์•Š์„๊นŒ?

     

     

    ์ด๋Ÿฐ Tag๋ฅผ ์‚ฌ์šฉํ•ด์„œ BT๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์—†์„๊นŒ?

     

     

     

    ์ด๋Ÿฐ ์• ๊ฐ€ ์žˆ์–ด์„œ ์“ธ์ˆ˜์žˆ์„๊ฒƒ๊ฐ™๋‹ค

    ์ผ๋‹จ GA_MonsterAttack ์ด ํ™œ์„ฑํ™”๋˜๋ฉด Battle State ์ผœ์ฃผ๊ฒŒ ์„ธํŒ…ํ•ด์ฃผ๊ณ 

     

     

    BT๋Š” ์ด์ •๋„๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ๋กœ ํ•˜์ž

     

    Abort

    ๋ชฌ์Šคํ„ฐ๊ฐ€ ์ˆœ์ฐฐํ•˜๋Š” ๋„์ค‘์— ์บ๋ฆญํ„ฐ๋ฅผ ์ธ์ง€ํ•˜๋ฉด ์บ๋ฆญํ„ฐ๋ฅผ ์ณ๋‹ค๋ณด๋ฉด์„œ ์ˆœํšŒ๋ฅผ ํ•˜๋Š”๊ฒŒ ์–ด์ƒ‰ํ•˜๋‹ค

    ์บ๋ฆญํ„ฐ๊ฐ€ ์ธ์ง€๋˜์ž๋งˆ์ž AIController::SetFocus ๋กœ ํฌ์ปค์Šค๋ฅผ ์„ค์ •ํ•ด์ฃผ๋Š”๋ฐ

    ์•„์ง ๊ทธ ํƒ€์ด๋ฐ์— ์ด์ „์˜ Patrol Task ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค

    Decorator ์˜ Abort ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ ํ•˜์œ„ ์šฐ์„ ์ˆœ์œ„ ํƒœ์Šคํฌ๊ฐ€ ์ค‘๋‹จ๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค

     

     

     

    ํŒŒ๋ž€์ƒ‰์œผ๋กœ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ๋Š” ํƒœ์Šคํฌ๋“ค์„ ํ‘œ์‹œํ•ด์ค€๋‹ค

    • None: ์ค‘๋‹จํ•˜์ง€ ์•Š์Œ - Task๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ์กฐ๊ฑด์„ ์žฌํ‰๊ฐ€ํ•˜์ง€ ์•Š์Œ
    • Self: ์ž์‹  ์ค‘๋‹จ - ์‹คํ–‰ ์ค‘์ธ ์ž์‹ ์˜ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ์กฐ๊ฑด์ด false๊ฐ€ ๋˜๋ฉด ์ฆ‰์‹œ ์ค‘๋‹จ
    • Lower Priority: ํ•˜์œ„ ์šฐ์„ ์ˆœ์œ„ ์ค‘๋‹จ - ์กฐ๊ฑด์ด true๊ฐ€ ๋˜๋ฉด ์˜ค๋ฅธ์ชฝ(๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„) ๋…ธ๋“œ๋ฅผ ์ฆ‰์‹œ ์ค‘๋‹จ
    • Both: ๋‘˜ ๋‹ค ์ค‘๋‹จ - Self์™€ Lower Priority ๋ชจ๋‘ ์ ์šฉ

     

    ์ผ์ • ๊ฑฐ๋ฆฌ ์ด์ƒ ๋ฉ€์–ด์ง€๋ฉด ๋˜๋Œ์•„๊ฐ€๊ฒŒ ํ•˜๊ธฐ

     

    ์ ์  ๊ดด๋ฌผ์ด ๋˜๊ณ ์žˆ๋‹ค

     

     

    CheckDistanceToPos Decorator ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์›๋ž˜ ์œ„์น˜์™€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•ด์ค€๋‹ค

    move to ์˜ TrackMoveGoal ์˜ต์…˜์„ ์ผœ์ฃผ์—ˆ๋Š”๋ฐ, ์ด๊ฒƒ ๋•Œ๋ฌธ์— ์บ๋ฆญํ„ฐ์™€ ์ผ์ •์ˆ˜์ค€ ๊ฐ€๊นŒ์›Œ์ง€์ง€ ์•Š์œผ๋ฉด MoveTo๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์•„ ์›์ ๊ณผ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€์–ด์กŒ์Œ์—๋„ ๊ณ„์† ์ซ“์•„์˜ค๋Š” ์ด์Šˆ๊ฐ€ ์žˆ๋‹ค

    ์ผ๋‹จ MoveTo ์˜ AcceptableRadius ๋ฅผ ์‹ค์ œ ์‚ฌ๊ฑฐ๋ฆฌ๋ณด๋‹ค ์ข€ ๋” ํฐ ๊ฐ’์œผ๋กœ ๋‘๊ณ , ์ฃผ๊ธฐ์ ์œผ๋กœ MoveTo ๊ฐ€ ๋‹ค์‹œ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๋„๋ก ์กฐ์ •ํ•ด๋‘์—ˆ๋‹ค

    ์ด๋ ‡๊ฒŒ ํ•ด๋„ ์•ˆ๋œ๋‹ค๋ฉด ์ง์ ‘ MoveTo Task๋ฅผ ๊ตฌํ˜„ํ• ์ˆ˜๋ฐ–์—..

     

     

    ์ˆœ์ฐฐ Patrol + ๊ณต๊ฒฉ + ๋ณต๊ท€

     

     

     

    NavSys::GetRandomPointInNavigableRadius(OriginPos, PatrolRadius, Result)) ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ธฐ์กด ์œ„์น˜์—์„œ ํŠน์ • ๋ฐ˜๊ฒฝ ๋‚ด์—์„œ๋งŒ ์ˆœ์ฐฐํ•˜๋„๋ก ์ œํ•œํ–ˆ๋‹ค

    ๊ฐ์ง€๋˜๊ณ ๋‚˜์„œ๋Š” ์ „ํˆฌํ•˜๋‹ค๊ฐ€ ๋„ˆ๋ฌด ๋ฉ€๋ฆฌ ๋‚˜์˜ค๋ฉด ๋‹ค์‹œ ๋ณต๊ท€ํ•œ๋‹ค

     

     


    ์ง€๊ธˆ๊นŒ์ง€์˜ ์ตœ์ข… ๋ชฌ์Šคํ„ฐ BT๋Š” ์ด์™€ ๊ฐ™๋‹ค

    ์ด์ œ ์ € ์•„๋ž˜์ชฝ์— Battle์— ๋งŽ์€ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•ด์•ผํ• ๊ฒƒ์ด๋‹ค..

     


    + ํด๋”๊ด€๋ฆฌ

    ๋ฌธ๋“ ํ•œ ํด๋” ์•ˆ์— cpp, h ํŒŒ์ผ์„ ๋‹ค ๋„ฃ๋Š”๊ฒƒ๊ณผ private/public ์œผ๋กœ ๋‚˜๋ˆ ๋„ฃ๋Š”๊ฒƒ์˜ ์ฐจ์ด๊ฐ€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค

     

    ์ƒ์„ธ ๋น„๊ต

    1. ๋ชจ๋“ˆ ๊ฐ„ ์ ‘๊ทผ์„ฑ
      • Public ํด๋”์— ์žˆ๋Š” ํ—ค๋”๋Š” ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Private ํด๋”์˜ cpp ํŒŒ์ผ๊ณผ ๊ทธ ์•ˆ์˜ ํ—ค๋”๋Š” ํ•ด๋‹น ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
      • ๊ฐ™์€ ํด๋”์— ์žˆ์œผ๋ฉด ์–ธ๋ฆฌ์–ผ์ด ์ž๋™์œผ๋กœ ํ—ค๋” ๊ฒฝ๋กœ์— ํฌํ•จ์‹œํ‚ค์ง€๋งŒ, ๋ช…ํ™•ํ•œ ์ ‘๊ทผ ์ œ์–ด๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค
    2. ์–ธ๋ฆฌ์–ผ ์—๋””ํ„ฐ์˜ ์ž๋™ ์ฒ˜๋ฆฌ
      • Public/Private ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด๋‘๋ฉด, ์–ธ๋ฆฌ์–ผ ์—๋””ํ„ฐ์—์„œ ์ƒˆ C++ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž๋™์œผ๋กœ ํ—ค๋”๋Š” Public์—, cpp๋Š” Private์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
      • ๊ฐ™์€ ํด๋” ๊ตฌ์กฐ์—์„œ๋Š” ๋ชจ๋“  ํŒŒ์ผ์ด ๊ฐ™์€ ์œ„์น˜์— ์ƒ์„ฑ๋˜์–ด ์ˆ˜๋™์œผ๋กœ ์ •๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    3. ํ—ค๋” include ๊ฒฝ๋กœ
      • ์–ธ๋ฆฌ์–ผ ์—”์ง„์€ ๋‹ค์Œ ํด๋”๋“ค์„ ์ž๋™์œผ๋กœ ํ—ค๋” ๊ฒฝ๋กœ์— ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:
        • {๋ชจ๋“ˆ๋ช…} ํด๋”
        • {๋ชจ๋“ˆ๋ช…}/Public ํด๋”
        • {๋ชจ๋“ˆ๋ช…}/Private ํด๋”
        • ๋”ฐ๋ผ์„œ Public/Private ๊ตฌ์กฐ์—์„œ๋„ #include "MyClass.h"๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ include ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    4. ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋ฐ ์œ ์ง€๋ณด์ˆ˜
      • Public/Private ๋ถ„๋ฆฌ๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๊ณ , ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜๋Š”์ง€ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋‚˜ ํ”„๋กœํ† ํƒ€์ž…์—์„œ๋Š” ๊ฐ™์€ ํด๋”์— ๋„ฃ์–ด๋„ ํฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

    ์ •๋ฆฌํ•˜์ž๋ฉด

    • ๊ฐ™์€ ํด๋”์— ํ•จ๊ป˜ ๋„ฃ๋Š” ๊ฒฝ์šฐ
      • ์ž‘์€ ํ”„๋กœํ† ํƒ€์ž…์ด๋‚˜ ํ•™์Šต์šฉ ํ”„๋กœ์ ํŠธ
      • ๋ชจ๋“ˆ์ด ํ•˜๋‚˜๋ฟ์ธ ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ
      • ๋น ๋ฅธ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ค‘์š”ํ•  ๋•Œ
    • Public/Private ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ
      • ํŒ€ ํ”„๋กœ์ ํŠธ๋‚˜ ์ƒ์šฉ ๊ฒŒ์ž„
      • ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ
      • API๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
      • ์–ธ๋ฆฌ์–ผ ๊ณต์‹ ๊ถŒ์žฅ ๋ฐฉ์‹

    ์–ธ๋ฆฌ์–ผ ์—”์ง„ ๊ณต์‹ ๊ฐ€์ด๋“œ์™€ ๋Œ€๋ถ€๋ถ„์˜ ํŠœํ† ๋ฆฌ์–ผ์€ Public/Private ๋ถ„๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

    ์ฒ˜์Œ๋ถ€ํ„ฐ ์ด ๊ตฌ์กฐ๋กœ ์‹œ์ž‘ํ•˜๋ฉด ๋‚˜์ค‘์— ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ ธ๋„ ๋ฆฌํŒฉํ† ๋ง ์—†์ด ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

     

    ๋ผ๊ณ ํ•œ๋‹ค ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ์— ํฐ ์ฐจ์ด๋Š” ์—†์„ ์ˆ˜ ์žˆ์ง€๋งŒ

    ๋ชจ๋“ˆ์ด ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ์—” ๋‚˜๋ˆ ์„œ ์ž‘์—…ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค๋Š”๋“ฏํ•˜๋‹ค

    ์ผ๋‹จ ๋‚œ ์†Œ๊ทœ๋ชจ๋‹ˆ๊นŒ ๊ทธ๋Œ€๋กœ ์ง„ํ–‰ํ•ด๋ณด๋Š”๊ฑธ๋กœ.. ๋‚˜์ค‘์— ํด๋”๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๊ทธ๋•Œ ๋‚˜๋ˆ ๋ณด์ž

     

    + ์บ๋ฆญํ„ฐ ๊ณต์šฉ ํด๋ž˜์Šค ์„ค์ •

    • ์ด๋™์ด๋‚˜ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์—ญํ• ์ด ํ•„์š”ํ•œ ์•กํ„ฐ๋Š” ASomedayProjectCharacter ๋ฅผ ์ƒ์†๋ฐ›๋„๋ก ํ•˜์ž
      • ์ด ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๊ณตํ†ต์ ์ธ ์˜ค๋ธŒ์ ํŠธ ์ƒํƒœ, ์ดˆ๊ธฐํ™”, ์—…๋ฐ์ดํŠธ, ์–ด๋นŒ๋ฆฌํ‹ฐ ์ฒ˜๋ฆฌ๊ฐ™์€ ๊ฒƒ๋“ค์„ ๋„ฃ์„๊ฒƒ
    • ๊ทธ ์™ธ์— ๊ธฐ๋ณธ์ ์ธ ์•กํ„ฐ๋Š” ๋ณ„๋„์˜ ASPActor ๋ฅผ ์ƒ์†๋ฐ›๊ฒŒ ํ• ๊ฒƒ
    • EObjectState ๋ผ๋Š” Enum ์„ ์ถ”๊ฐ€ํ•ด์„œ ์˜ค๋ธŒ์ ํŠธ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์“ฐ๋ ค๊ณ  ํ•˜๋Š”๋ฐ, ์ด๊ฑด ์‚ฌ์‹ค์ƒ GameplayTag ๋ž‘ ๋™์ผํ•œ๊ฒƒ๊ฐ™์•„์„œ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ• ์ง€ ๊ณ ๋ฏผ์ค‘…
    728x90
Designed by Tistory.