๐Ÿ“˜ TIL - ์ผ๋ฐ˜ ๋ชฌ์Šคํ„ฐ StateTree ์ „ํˆฌ ํ๋ฆ„ ๋ฐ ์ถฉ๋Œ ๋ฌธ์ œ ๋ถ„์„

HappyCircleยท2026๋…„ 6์›” 9์ผ

Unreal ๊ฐœ๋ฐœ

๋ชฉ๋ก ๋ณด๊ธฐ
142/163

๐Ÿ“˜ TIL - ์ผ๋ฐ˜ ๋ชฌ์Šคํ„ฐ StateTree ์ „ํˆฌ ํ๋ฆ„ ๋ฐ ์ถฉ๋Œ ๋ฌธ์ œ ๋ถ„์„

๋ฐฐ๊ฒฝ

์˜ค๋Š˜์€ ์ผ๋ฐ˜ ๋ชฌ์Šคํ„ฐ AI ์ „ํˆฌ ํ๋ฆ„์„ ์ค‘์‹ฌ์œผ๋กœ ํ”Œ๋ ˆ์ด์–ด ์ถ”์ , ๊ณต๊ฒฉ ์ง„์ž…, ๋ชฌ์Šคํ„ฐ ๊ฐ„ ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ์ ๊ฒ€ํ–ˆ๋‹ค.

๊ธฐ์กด์—๋Š” ์†Œ์ˆ˜์˜ ๋ชฌ์Šคํ„ฐ๋งŒ ์žˆ์„ ๋•Œ๋Š” ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋ณด์ด์ง€ ์•Š์•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ ๋งˆ๋ฆฌ๊ฐ€ ๋™์‹œ์— ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ถ”์ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๊ณต๊ฒฉ ์ƒํƒœ ์ง„์ž…์ด ๊ผฌ์ด๊ฑฐ๋‚˜ ๋ชฌ์Šคํ„ฐ๋ผ๋ฆฌ ์„œ๋กœ ๋ฐ€์–ด๋‚ด๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค. ๋˜ํ•œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹จ์ˆœํžˆ ๋ชธ์œผ๋กœ ๋ถ€๋”ชํ˜”์„ ๋ฟ์ธ๋ฐ ๋ชฌ์Šคํ„ฐ๊ฐ€ ๊ณผํ•˜๊ฒŒ ํŠ•๊ฒจ ๋‚˜๊ฐ€๋Š” ๋ฌธ์ œ๋„ ํ™•์ธ๋˜์—ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ํ”ผ๊ฒฉ ๋ฐ˜์‘ ์‹œ์Šคํ…œ์„ ์˜์‹ฌํ–ˆ์ง€๋งŒ ์‹ค์ œ ์›์ธ์€ ๊ณต๊ฒฉ๊ถŒ ๊ด€๋ฆฌ ๋ฐฉ์‹๊ณผ ๋ชฌ์Šคํ„ฐ ์ถฉ๋Œ ์„ค์ •์— ๋” ๊ฐ€๊นŒ์› ๋‹ค. ์ด๋ฒˆ ์ž‘์—…์—์„œ๋Š” StateTree ๊ตฌ์กฐ ์ž์ฒด๋ฅผ ํฌ๊ฒŒ ๋ณ€๊ฒฝํ•˜๊ธฐ๋ณด๋‹ค ์ „ํˆฌ ํ๋ฆ„์„ ๋ฐฉํ•ดํ•˜๋Š” ์š”์†Œ๋“ค์„ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค.


1. ๊ณต๊ฒฉ๊ถŒ(Token) ๊ฒฝ์Ÿ ๊ตฌ์กฐ ์ ๊ฒ€

์›์ธ ๋ถ„์„

์ผ๋ฐ˜ ๋ชฌ์Šคํ„ฐ๋Š” EncirclementSubsystem์„ ํ†ตํ•ด ํ”Œ๋ ˆ์ด์–ด ์ฃผ๋ณ€์„ ๋ฐฐํšŒํ•˜๊ณ  ๊ณต๊ฒฉ๊ถŒ์„ ํš๋“ํ•œ ๋ชฌ์Šคํ„ฐ๋งŒ ๊ณต๊ฒฉ ์ƒํƒœ๋กœ ์ง„์ž…ํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ณต๊ฒฉ๊ถŒ ์ˆ˜๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๋ชฌ์Šคํ„ฐ๊ฐ€ ๋™์‹œ์— ๊ณต๊ฒฉ์„ ์‹œ๋„ํ•˜๋ฉด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

๊ณต๊ฒฉ ์ง„์ž… ์‹œ๋„
โ†’ ์„œ๋กœ ๊ฒฝ๋กœ ๊ฐ„์„ญ
โ†’ ๋ฐฉํ–ฅ ์ „ํ™˜ ๋ฐ˜๋ณต
โ†’ ๊ณต๊ฒฉ ์‹œ์ž‘ ์ง€์—ฐ
โ†’ ๋ฐฐํšŒ/๊ณต๊ฒฉ ์ƒํƒœ ๋ฐ˜๋ณต ์ „ํ™˜

ํŠนํžˆ ํ”Œ๋ ˆ์ด์–ด ๊ทผ์ฒ˜ ๊ณต๊ฐ„์ด ์ข์€ ์ƒํ™ฉ์—์„œ๋Š” ์—ฌ๋Ÿฌ ๋ชฌ์Šคํ„ฐ๊ฐ€ ํ•œ ์ง€์ ์— ๋ชฐ๋ฆฌ๋ฉด์„œ ์ „ํˆฌ ํ๋ฆ„์ด ๋ถ€์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ณด์˜€๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

EncirclementSubsystem์˜ ๊ณต๊ฒฉ๊ถŒ ์ˆ˜๋ฅผ ์กฐ์ •ํ–ˆ๋‹ค.

MaxAttackTokens = 3;

โ†“

MaxAttackTokens = 2;

์ด๋ฅผ ํ†ตํ•ด ๋™์‹œ์— ๊ณต๊ฒฉ ์ƒํƒœ๋กœ ์ง„์ž…ํ•˜๋Š” ๋ชฌ์Šคํ„ฐ ์ˆ˜๋ฅผ ์ค„์ด๊ณ , ๋‚˜๋จธ์ง€ ๋ชฌ์Šคํ„ฐ๋Š” ํ”Œ๋ ˆ์ด์–ด ์ฃผ๋ณ€์—์„œ ๋Œ€๊ธฐํ•˜๊ฑฐ๋‚˜ ๋ฐฐํšŒํ•˜๋„๋ก ๊ตฌ์„ฑํ–ˆ๋‹ค.

์ „ํˆฌ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ฆฌ๋œ๋‹ค.

๋ชฌ์Šคํ„ฐ ์ถ”์ 
    โ†“
ํ”Œ๋ ˆ์ด์–ด ์ฃผ๋ณ€ ๋ฐฐํšŒ
    โ†“
๊ณต๊ฒฉ๊ถŒ ํš๋“
    โ†“
๊ณต๊ฒฉ ์ƒํƒœ ์ง„์ž…
    โ†“
๊ณต๊ฒฉ ์ข…๋ฃŒ
    โ†“
๋ฐฐํšŒ ๋ณต๊ท€

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‹ค์ˆ˜์˜ ๋ชฌ์Šคํ„ฐ๊ฐ€ ํ•œ๊บผ๋ฒˆ์— ๊ณต๊ฒฉ ์ƒํƒœ๋กœ ๋ชฐ๋ฆฌ๋Š” ํ˜„์ƒ์„ ์ค„์ด๊ณ  ์ „ํˆฌ ๊ฐ€๋…์„ฑ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ˆ˜์ •ํ–ˆ๋‹ค.


2. ๋ชฌ์Šคํ„ฐ ์ถฉ๋Œ ์„ค์ • ์ ๊ฒ€

์›์ธ ๋ถ„์„

ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ณต๊ฒฉํ•˜์ง€ ์•Š์•˜์Œ์—๋„ ๋ชฌ์Šคํ„ฐ๊ฐ€ ํฌ๊ฒŒ ๋ฐ€๋ ค๋‚˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” HitReactionComponent๋‚˜ ๋„‰๋ฐฑ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์˜์‹ฌํ–ˆ์ง€๋งŒ, ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ๋ณต๊ตฌํ•œ ์ดํ›„์—๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žฌํ˜„๋˜์—ˆ๋‹ค.

๋””๋ฒ„๊น… ๊ณผ์ •์—์„œ ์ผ๋ฐ˜ ๋ชฌ์Šคํ„ฐ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ์˜ ์ถฉ๋Œ ์„ค์ •์ด ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค.

Capsule Collision = Custom
Mesh Collision = Custom

์ด ์ƒํƒœ์—์„œ๋Š” ๋ฉ”์‹œ ์ถฉ๋Œ๊ณผ ์บก์А ์ถฉ๋Œ์ด ๋™์‹œ์— ๋ฌผ๋ฆฌ ๊ณ„์‚ฐ์— ๊ด€์—ฌํ•  ์ˆ˜ ์žˆ์–ด ์ถฉ๋Œ ๋ฐ˜์‘์ด ๊ณผ๋„ํ•˜๊ฒŒ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

RetrieveEnemyCharacter์—์„œ ๋ชฌ์Šคํ„ฐ ์ถฉ๋Œ ์„ค์ •์„ ๋Ÿฐํƒ€์ž„์— ๊ฐ•์ œ ์ ์šฉํ•˜๋„๋ก ์ˆ˜์ •ํ–ˆ๋‹ค.

Capsule
โ†’ Pawn

Mesh
โ†’ CharacterMesh
โ†’ QueryOnly

Physics Simulation
โ†’ Off

๋˜ํ•œ ์ƒ์„ฑ์ž๋ฟ ์•„๋‹ˆ๋ผ BeginPlay์—์„œ๋„ ๋™์ผํ•œ ์„ค์ •์„ ๋‹ค์‹œ ์ ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑํ–ˆ๋‹ค.

์ƒ์„ฑ์ž
โ†’ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

BeginPlay
โ†’ BP ์—์…‹ ๊ฐ’ ๋ฎ์–ด์“ฐ๊ธฐ

์ด๋ฅผ ํ†ตํ•ด ๋ธ”๋ฃจํ”„๋ฆฐํŠธ์— ์ €์žฅ๋œ ์ž˜๋ชป๋œ ์ถฉ๋Œ ์„ค์ •์ด ์žˆ๋”๋ผ๋„ ํ”Œ๋ ˆ์ด ์‹œ์ž‘ ์‹œ ์ผ๊ด€๋œ ์ „ํˆฌ์šฉ ์ถฉ๋Œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •๋ฆฌํ–ˆ๋‹ค.


3. ์‹ค์ œ ์›์ธ ํ›„๋ณด ์ •๋ฆฌ

์ด๋ฒˆ ์ž‘์—… ๊ณผ์ •์—์„œ ๋ช‡ ๊ฐ€์ง€ ๊ฐ€๋Šฅ์„ฑ์„ ๋‹จ๊ณ„์ ์œผ๋กœ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

HitReactionComponent

์ดˆ๊ธฐ ์˜์‹ฌ ๋Œ€์ƒ์ด์—ˆ์ง€๋งŒ ์ง์ ‘ ์›์ธ์€ ์•„๋‹ˆ์—ˆ๋‹ค.

HitReaction ์ œ๊ฑฐ
โ†’ ๋™์ผ ์ฆ์ƒ ๋ฐœ์ƒ

๋”ฐ๋ผ์„œ ํ˜„์žฌ ์ถฉ๋Œ ๋ฌธ์ œ๋Š” ํ”ผ๊ฒฉ ๋ฐ˜์‘๋ณด๋‹ค ์ถฉ๋Œ ํ”„๋กœํ•„ ๋ฐ ๋ฌผ๋ฆฌ ์„ค์ • ์ชฝ์— ๊ฐ€๊นŒ์šด ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ–ˆ๋‹ค.

๋ชฌ์Šคํ„ฐ ์ถฉ๋Œ ํ”„๋กœํ•„

ํ˜„์žฌ ๊ฐ€์žฅ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ์›์ธ์ด๋‹ค.

Custom Collision
โ†’ ๋น„์ •์ƒ ์‘๋‹ต ๊ฐ€๋Šฅ์„ฑ

Mesh Collision ํ™œ์„ฑ
โ†’ ์บก์А๊ณผ ์ค‘๋ณต ์ถฉ๋Œ
โ†’ ๊ณผ๋„ํ•œ ๋ฐ€๋ฆผ ๋ฐœ์ƒ

์ด๋ฒˆ ์ˆ˜์ •์€ ์ด ๋ถ€๋ถ„์„ ์šฐ์„ ์ ์œผ๋กœ ์•ˆ์ •ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด์—ˆ๋‹ค.


4. EnemyPawn ์ฑ„๋„ ๋ถ„๋ฆฌ ๋ฐฉํ–ฅ ๊ฒ€ํ† 

ํ˜„์žฌ๋Š” ๊ธฐ๋ณธ Pawn ์ฑ„๋„์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ์žฅ๊ธฐ์ ์œผ๋กœ๋Š” ํ”Œ๋ ˆ์ด์–ด์™€ ๋ชฌ์Šคํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๋” ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

ํ”Œ๋ ˆ์ด์–ด โ†” ๋ชฌ์Šคํ„ฐ
โ†’ Block

๋ชฌ์Šคํ„ฐ โ†” ๋ชฌ์Šคํ„ฐ
โ†’ Overlap

์ด๋ฅผ ์œ„ํ•ด ๋ณ„๋„์˜ EnemyPawn ์ฑ„๋„์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ณต๊ฒฉ ํŒ์ •๊ณผ ํƒ€๊ฒŸ ํƒ์ƒ‰๋„ ํ•ด๋‹น ์ฑ„๋„์„ ํ•จ๊ป˜ ๊ฒ€์‚ฌํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฒ€ํ† ํ–ˆ๋‹ค.

์ด ๋ฐฉ์‹์ด ์ ์šฉ๋˜๋ฉด ๋ชฌ์Šคํ„ฐ๋ผ๋ฆฌ ์„œ๋กœ ๋ฐ€์–ด๋‚ด๋Š” ํ˜„์ƒ์„ ์ค„์ด๋ฉด์„œ๋„ ํ”Œ๋ ˆ์ด์–ด์™€์˜ ์ „ํˆฌ ์ถฉ๋Œ์€ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.


5. ํ–ฅํ›„ ๊ฐœ์„  ๋ฐฉํ–ฅ ์ •๋ฆฌ

ํ˜„์žฌ ๊ณต๊ฒฉ๊ถŒ ์ˆ˜๋Š” ๊ณ ์ •๊ฐ’์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค.

MaxAttackTokens = 2

ํ•˜์ง€๋งŒ ๋ชฌ์Šคํ„ฐ ์ข…๋ฅ˜๊ฐ€ ๋‹ค์–‘ํ•ด์งˆ ๊ฒฝ์šฐ ์ „์—ญ ์ƒ์ˆ˜๋งŒ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋ฅผ ๊ฒ€ํ† ํ–ˆ๋‹ค.

AttackTokenCost
AttackTokenBudget
OrbitInnerRadius
OrbitOuterRadius

์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€ํ˜• ๋ชฌ์Šคํ„ฐ๋Š” ๊ณต๊ฒฉ๊ถŒ ๋น„์šฉ์„ ๋†’์ด๊ณ , ์†Œํ˜• ๋ชฌ์Šคํ„ฐ๋Š” ๋น„์šฉ์„ ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋ชฌ์Šคํ„ฐ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ณต๊ฒฉ ๋ฐ€๋„๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ๋ฐฐํšŒ ๋ฐ˜๊ฒฝ๋„ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•˜๋ฉด ๋ชฌ์Šคํ„ฐ ์ฒด๊ธ‰๋ณ„ ์ „ํˆฌ ๊ฑฐ๋ฆฌ ์ฐจ์ด๋ฅผ ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.


์˜ค๋Š˜์˜ ์ •๋ฆฌ

  • ์ผ๋ฐ˜ ๋ชฌ์Šคํ„ฐ ์ „ํˆฌ ํ๋ฆ„์„ ์ ๊ฒ€ํ•˜๋ฉด์„œ ๊ณต๊ฒฉ ์ƒํƒœ ์ง„์ž…์ด ๊ผฌ์ด๋Š” ์›์ธ์„ ๊ณต๊ฒฉ๊ถŒ ๊ฒฝ์Ÿ๊ณผ ๊ณต๊ฐ„ ์ ์œ  ๋ฌธ์ œ์—์„œ ํ™•์ธํ–ˆ๋‹ค.
  • EncirclementSubsystem์˜ ๊ณต๊ฒฉ๊ถŒ ์ˆ˜๋ฅผ ์ค„์—ฌ ๋‹ค์ˆ˜ ๋ชฌ์Šคํ„ฐ๊ฐ€ ๋™์‹œ์— ๊ณต๊ฒฉ ์ƒํƒœ๋กœ ๋ชฐ๋ฆฌ๋Š” ํ˜„์ƒ์„ ์™„ํ™”ํ–ˆ๋‹ค.
  • ๋ชฌ์Šคํ„ฐ ์ถฉ๋Œ ์„ค์ •์„ ๋Ÿฐํƒ€์ž„์—์„œ ๊ฐ•์ œ ๋ณด์ •ํ•ด ๋‹จ์ˆœ ์ ‘์ด‰๋งŒ์œผ๋กœ ๊ณผ๋„ํ•˜๊ฒŒ ๋ฐ€๋ ค๋‚˜๋Š” ํ˜„์ƒ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋„๋ก ์ •๋ฆฌํ–ˆ๋‹ค.
  • ํ–ฅํ›„์—๋Š” EnemyPawn ์ฑ„๋„ ๋ถ„๋ฆฌ์™€ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜ ๊ณต๊ฒฉ๊ถŒยท๋ฐฐํšŒ ๋ฐ˜๊ฒฝ ๊ด€๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ ์šฉํ•ด ์ „ํˆฌ ํ๋ฆ„์„ ๋”์šฑ ์•ˆ์ •ํ™”ํ•  ์˜ˆ์ •์ด๋‹ค.
profile
๊ฐœ๋ฐœํ•ฉ์‹œ๋‹ค!

0๊ฐœ์˜ ๋Œ“๊ธ€