-
[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 ๋ชจ๋ ์ ์ฉ
์ผ์ ๊ฑฐ๋ฆฌ ์ด์ ๋ฉ์ด์ง๋ฉด ๋๋์๊ฐ๊ฒ ํ๊ธฐ

์ ์ ๊ดด๋ฌผ์ด ๋๊ณ ์๋ค CheckDistanceToPosDecorator ๋ฅผ ์ถ๊ฐํด์ ์๋ ์์น์์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํด์ค๋คmove to ์ TrackMoveGoal ์ต์ ์ ์ผ์ฃผ์๋๋ฐ, ์ด๊ฒ ๋๋ฌธ์ ์บ๋ฆญํฐ์ ์ผ์ ์์ค ๊ฐ๊น์์ง์ง ์์ผ๋ฉด MoveTo๊ฐ ์ข ๋ฃ๋์ง ์์ ์์ ๊ณผ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ์ด์ก์์๋ ๊ณ์ ์ซ์์ค๋ ์ด์๊ฐ ์๋ค
์ผ๋จ MoveTo ์ AcceptableRadius ๋ฅผ ์ค์ ์ฌ๊ฑฐ๋ฆฌ๋ณด๋ค ์ข ๋ ํฐ ๊ฐ์ผ๋ก ๋๊ณ , ์ฃผ๊ธฐ์ ์ผ๋ก MoveTo ๊ฐ ๋ค์ ํธ์ถ๋ ์ ์๋๋ก ์กฐ์ ํด๋์๋ค
์ด๋ ๊ฒ ํด๋ ์๋๋ค๋ฉด ์ง์ MoveTo Task๋ฅผ ๊ตฌํํ ์๋ฐ์..
์์ฐฐ Patrol + ๊ณต๊ฒฉ + ๋ณต๊ท

NavSys::GetRandomPointInNavigableRadius(OriginPos, PatrolRadius, Result))๋ฅผ ์ฌ์ฉํด์ ๊ธฐ์กด ์์น์์ ํน์ ๋ฐ๊ฒฝ ๋ด์์๋ง ์์ฐฐํ๋๋ก ์ ํํ๋ค๊ฐ์ง๋๊ณ ๋์๋ ์ ํฌํ๋ค๊ฐ ๋๋ฌด ๋ฉ๋ฆฌ ๋์ค๋ฉด ๋ค์ ๋ณต๊ทํ๋ค

์ง๊ธ๊น์ง์ ์ต์ข ๋ชฌ์คํฐ BT๋ ์ด์ ๊ฐ๋ค์ด์ ์ ์๋์ชฝ์ Battle์ ๋ง์ ๊ฒ์ ์ถ๊ฐํด์ผํ ๊ฒ์ด๋ค..
+ ํด๋๊ด๋ฆฌ
๋ฌธ๋ ํ ํด๋ ์์ cpp, h ํ์ผ์ ๋ค ๋ฃ๋๊ฒ๊ณผ private/public ์ผ๋ก ๋๋ ๋ฃ๋๊ฒ์ ์ฐจ์ด๊ฐ ๊ถ๊ธํด์ก๋ค

์์ธ ๋น๊ต
- ๋ชจ๋ ๊ฐ ์ ๊ทผ์ฑ
- Public ํด๋์ ์๋ ํค๋๋ ๋ค๋ฅธ ๋ชจ๋์์๋ ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค. Private ํด๋์ cpp ํ์ผ๊ณผ ๊ทธ ์์ ํค๋๋ ํด๋น ๋ชจ๋ ๋ด๋ถ์์๋ง ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ฐ์ ํด๋์ ์์ผ๋ฉด ์ธ๋ฆฌ์ผ์ด ์๋์ผ๋ก ํค๋ ๊ฒฝ๋ก์ ํฌํจ์ํค์ง๋ง, ๋ช ํํ ์ ๊ทผ ์ ์ด๊ฐ ์ด๋ ต์ต๋๋ค
- ์ธ๋ฆฌ์ผ ์๋ํฐ์ ์๋ ์ฒ๋ฆฌ
- Public/Private ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด๋๋ฉด, ์ธ๋ฆฌ์ผ ์๋ํฐ์์ ์ C++ ํด๋์ค๋ฅผ ์์ฑํ ๋ ์๋์ผ๋ก ํค๋๋ Public์, cpp๋ Private์ ์์ฑ๋ฉ๋๋ค.
- ๊ฐ์ ํด๋ ๊ตฌ์กฐ์์๋ ๋ชจ๋ ํ์ผ์ด ๊ฐ์ ์์น์ ์์ฑ๋์ด ์๋์ผ๋ก ์ ๋ฆฌํด์ผ ํฉ๋๋ค.
- ํค๋ include ๊ฒฝ๋ก
- ์ธ๋ฆฌ์ผ ์์ง์ ๋ค์ ํด๋๋ค์ ์๋์ผ๋ก ํค๋ ๊ฒฝ๋ก์ ํฌํจํฉ๋๋ค:
{๋ชจ๋๋ช }ํด๋{๋ชจ๋๋ช }/Publicํด๋{๋ชจ๋๋ช }/Privateํด๋- ๋ฐ๋ผ์ Public/Private ๊ตฌ์กฐ์์๋
#include "MyClass.h"๋ก ๊ฐ๋จํ๊ฒ include ๊ฐ๋ฅํฉ๋๋ค.
- ์ธ๋ฆฌ์ผ ์์ง์ ๋ค์ ํด๋๋ค์ ์๋์ผ๋ก ํค๋ ๊ฒฝ๋ก์ ํฌํจํฉ๋๋ค:
- ํ๋ก์ ํธ ๊ด๋ฆฌ ๋ฐ ์ ์ง๋ณด์
- Public/Private ๋ถ๋ฆฌ๋ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ ํ๊ณ , ์ด๋ค ํด๋์ค๊ฐ ์ธ๋ถ์ ๋ ธ์ถ๋๋์ง ์ฝ๊ฒ ํ์ ํ ์ ์์ต๋๋ค.
- ์๊ท๋ชจ ํ๋ก์ ํธ๋ ํ๋กํ ํ์ ์์๋ ๊ฐ์ ํด๋์ ๋ฃ์ด๋ ํฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ ๋ฆฌํ์๋ฉด
- ๊ฐ์ ํด๋์ ํจ๊ป ๋ฃ๋ ๊ฒฝ์ฐ
- ์์ ํ๋กํ ํ์ ์ด๋ ํ์ต์ฉ ํ๋ก์ ํธ
- ๋ชจ๋์ด ํ๋๋ฟ์ธ ๋จ์ํ ๊ตฌ์กฐ
- ๋น ๋ฅธ ๊ฐ๋ฐ ์๋๊ฐ ์ค์ํ ๋
- Public/Private ๋ถ๋ฆฌํ๋ ๊ฒฝ์ฐ
- ํ ํ๋ก์ ํธ๋ ์์ฉ ๊ฒ์
- ์ฌ๋ฌ ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ตฌ์กฐ
- API๋ฅผ ๋ช ํํ ์ ์ํ๊ณ ์ถ์ ๋
- ์ธ๋ฆฌ์ผ ๊ณต์ ๊ถ์ฅ ๋ฐฉ์
์ธ๋ฆฌ์ผ ์์ง ๊ณต์ ๊ฐ์ด๋์ ๋๋ถ๋ถ์ ํํ ๋ฆฌ์ผ์ Public/Private ๋ถ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค.
์ฒ์๋ถํฐ ์ด ๊ตฌ์กฐ๋ก ์์ํ๋ฉด ๋์ค์ ํ๋ก์ ํธ๊ฐ ์ปค์ ธ๋ ๋ฆฌํฉํ ๋ง ์์ด ํ์ฅํ ์ ์์ต๋๋ค
๋ผ๊ณ ํ๋ค ์ค์ ๋ก ๊ตฌํํ๋๋ฐ์ ํฐ ์ฐจ์ด๋ ์์ ์ ์์ง๋ง
๋ชจ๋์ด ์ฌ๋ฌ๊ฐ๊ฐ ๋๋ ๊ฒฝ์ฐ์ ๋๋ ์ ์์ ํ๋๊ฒ ์ข๋ค๋๋ฏํ๋ค
์ผ๋จ ๋ ์๊ท๋ชจ๋๊น ๊ทธ๋๋ก ์งํํด๋ณด๋๊ฑธ๋ก.. ๋์ค์ ํด๋๊ฐ ๋ง์์ง๋ฉด ๊ทธ๋ ๋๋ ๋ณด์
+ ์บ๋ฆญํฐ ๊ณต์ฉ ํด๋์ค ์ค์
- ์ด๋์ด๋ ์ปจํธ๋กค๋ฌ์ ์ญํ ์ด ํ์ํ ์กํฐ๋
ASomedayProjectCharacter๋ฅผ ์์๋ฐ๋๋ก ํ์- ์ด ํด๋์ค ๋ด๋ถ์์ ๊ณตํต์ ์ธ ์ค๋ธ์ ํธ ์ํ, ์ด๊ธฐํ, ์ ๋ฐ์ดํธ, ์ด๋น๋ฆฌํฐ ์ฒ๋ฆฌ๊ฐ์ ๊ฒ๋ค์ ๋ฃ์๊ฒ
- ๊ทธ ์ธ์ ๊ธฐ๋ณธ์ ์ธ ์กํฐ๋ ๋ณ๋์
ASPActor๋ฅผ ์์๋ฐ๊ฒ ํ ๊ฒ EObjectState๋ผ๋ Enum ์ ์ถ๊ฐํด์ ์ค๋ธ์ ํธ ์ํ ๊ด๋ฆฌ๊ฐ ํ์ํ ๋ ์ฐ๋ ค๊ณ ํ๋๋ฐ, ์ด๊ฑด ์ฌ์ค์ GameplayTag ๋ ๋์ผํ๊ฒ๊ฐ์์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ์ง ๊ณ ๋ฏผ์ค…
728x90'UnrealEngine > SomedayProject' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ