๐ TIL - ์ผ๋ฐ ๋ชฌ์คํฐ StateTree ์ ํฌ ํ๋ฆ ๋ฐ ์ถฉ๋ ๋ฌธ์ ๋ถ์
์ค๋์ ์ผ๋ฐ ๋ชฌ์คํฐ AI ์ ํฌ ํ๋ฆ์ ์ค์ฌ์ผ๋ก ํ๋ ์ด์ด ์ถ์ , ๊ณต๊ฒฉ ์ง์ , ๋ชฌ์คํฐ ๊ฐ ์ถฉ๋ ๋ฌธ์ ๋ฅผ ์ ๊ฒํ๋ค.
๊ธฐ์กด์๋ ์์์ ๋ชฌ์คํฐ๋ง ์์ ๋๋ ํฌ๊ฒ ๋ฌธ์ ๊ฐ ๋ณด์ด์ง ์์์ง๋ง, ์ฌ๋ฌ ๋ง๋ฆฌ๊ฐ ๋์์ ํ๋ ์ด์ด๋ฅผ ์ถ์ ํ๋ ์ํฉ์์๋ ๊ณต๊ฒฉ ์ํ ์ง์ ์ด ๊ผฌ์ด๊ฑฐ๋ ๋ชฌ์คํฐ๋ผ๋ฆฌ ์๋ก ๋ฐ์ด๋ด๋ ํ์์ด ๋ฐ์ํ๋ค. ๋ํ ํ๋ ์ด์ด๊ฐ ๋จ์ํ ๋ชธ์ผ๋ก ๋ถ๋ชํ์ ๋ฟ์ธ๋ฐ ๋ชฌ์คํฐ๊ฐ ๊ณผํ๊ฒ ํ๊ฒจ ๋๊ฐ๋ ๋ฌธ์ ๋ ํ์ธ๋์๋ค.
์ฒ์์๋ ํผ๊ฒฉ ๋ฐ์ ์์คํ ์ ์์ฌํ์ง๋ง ์ค์ ์์ธ์ ๊ณต๊ฒฉ๊ถ ๊ด๋ฆฌ ๋ฐฉ์๊ณผ ๋ชฌ์คํฐ ์ถฉ๋ ์ค์ ์ ๋ ๊ฐ๊น์ ๋ค. ์ด๋ฒ ์์ ์์๋ StateTree ๊ตฌ์กฐ ์์ฒด๋ฅผ ํฌ๊ฒ ๋ณ๊ฒฝํ๊ธฐ๋ณด๋ค ์ ํฌ ํ๋ฆ์ ๋ฐฉํดํ๋ ์์๋ค์ ์ ๋ฆฌํ๋ ๋ฐฉํฅ์ผ๋ก ์ ๊ทผํ๋ค.
์ผ๋ฐ ๋ชฌ์คํฐ๋ EncirclementSubsystem์ ํตํด ํ๋ ์ด์ด ์ฃผ๋ณ์ ๋ฐฐํํ๊ณ ๊ณต๊ฒฉ๊ถ์ ํ๋ํ ๋ชฌ์คํฐ๋ง ๊ณต๊ฒฉ ์ํ๋ก ์ง์ ํ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
ํ์ง๋ง ๊ณต๊ฒฉ๊ถ ์๊ฐ ๋ง์ ๊ฒฝ์ฐ ์ฌ๋ฌ ๋ชฌ์คํฐ๊ฐ ๋์์ ๊ณต๊ฒฉ์ ์๋ํ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๊ณต๊ฒฉ ์ง์
์๋
โ ์๋ก ๊ฒฝ๋ก ๊ฐ์ญ
โ ๋ฐฉํฅ ์ ํ ๋ฐ๋ณต
โ ๊ณต๊ฒฉ ์์ ์ง์ฐ
โ ๋ฐฐํ/๊ณต๊ฒฉ ์ํ ๋ฐ๋ณต ์ ํ
ํนํ ํ๋ ์ด์ด ๊ทผ์ฒ ๊ณต๊ฐ์ด ์ข์ ์ํฉ์์๋ ์ฌ๋ฌ ๋ชฌ์คํฐ๊ฐ ํ ์ง์ ์ ๋ชฐ๋ฆฌ๋ฉด์ ์ ํฌ ํ๋ฆ์ด ๋ถ์์ฐ์ค๋ฝ๊ฒ ๋ณด์๋ค.
EncirclementSubsystem์ ๊ณต๊ฒฉ๊ถ ์๋ฅผ ์กฐ์ ํ๋ค.
MaxAttackTokens = 3;
โ
MaxAttackTokens = 2;
์ด๋ฅผ ํตํด ๋์์ ๊ณต๊ฒฉ ์ํ๋ก ์ง์ ํ๋ ๋ชฌ์คํฐ ์๋ฅผ ์ค์ด๊ณ , ๋๋จธ์ง ๋ชฌ์คํฐ๋ ํ๋ ์ด์ด ์ฃผ๋ณ์์ ๋๊ธฐํ๊ฑฐ๋ ๋ฐฐํํ๋๋ก ๊ตฌ์ฑํ๋ค.
์ ํฌ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฆฌ๋๋ค.
๋ชฌ์คํฐ ์ถ์
โ
ํ๋ ์ด์ด ์ฃผ๋ณ ๋ฐฐํ
โ
๊ณต๊ฒฉ๊ถ ํ๋
โ
๊ณต๊ฒฉ ์ํ ์ง์
โ
๊ณต๊ฒฉ ์ข
๋ฃ
โ
๋ฐฐํ ๋ณต๊ท
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ค์์ ๋ชฌ์คํฐ๊ฐ ํ๊บผ๋ฒ์ ๊ณต๊ฒฉ ์ํ๋ก ๋ชฐ๋ฆฌ๋ ํ์์ ์ค์ด๊ณ ์ ํฌ ๊ฐ๋ ์ฑ์ ๊ฐ์ ํ๋ ๋ฐฉํฅ์ผ๋ก ์์ ํ๋ค.
ํ๋ ์ด์ด๊ฐ ๊ณต๊ฒฉํ์ง ์์์์๋ ๋ชฌ์คํฐ๊ฐ ํฌ๊ฒ ๋ฐ๋ ค๋๋ ํ์์ด ๋ฐ์ํ๋ค.
์ฒ์์๋ HitReactionComponent๋ ๋๋ฐฑ ์ฒ๋ฆฌ ๋ก์ง์ ์์ฌํ์ง๋ง, ๊ด๋ จ ์ฝ๋๋ฅผ ๋ณต๊ตฌํ ์ดํ์๋ ๋์ผํ ๋ฌธ์ ๊ฐ ์ฌํ๋์๋ค.
๋๋ฒ๊น ๊ณผ์ ์์ ์ผ๋ฐ ๋ชฌ์คํฐ ๋ธ๋ฃจํ๋ฆฐํธ์ ์ถฉ๋ ์ค์ ์ด ์์๊ณผ ๋ค๋ฅด๊ฒ ๊ตฌ์ฑ๋์ด ์๋ ๊ฒ์ ํ์ธํ๋ค.
Capsule Collision = Custom
Mesh Collision = Custom
์ด ์ํ์์๋ ๋ฉ์ ์ถฉ๋๊ณผ ์บก์ ์ถฉ๋์ด ๋์์ ๋ฌผ๋ฆฌ ๊ณ์ฐ์ ๊ด์ฌํ ์ ์์ด ์ถฉ๋ ๋ฐ์์ด ๊ณผ๋ํ๊ฒ ๋ฐ์ํ ์ ์๋ค.
RetrieveEnemyCharacter์์ ๋ชฌ์คํฐ ์ถฉ๋ ์ค์ ์ ๋ฐํ์์ ๊ฐ์ ์ ์ฉํ๋๋ก ์์ ํ๋ค.
Capsule
โ Pawn
Mesh
โ CharacterMesh
โ QueryOnly
Physics Simulation
โ Off
๋ํ ์์ฑ์๋ฟ ์๋๋ผ BeginPlay์์๋ ๋์ผํ ์ค์ ์ ๋ค์ ์ ์ฉํ๋๋ก ๊ตฌ์ฑํ๋ค.
์์ฑ์
โ ๊ธฐ๋ณธ๊ฐ ์ค์
BeginPlay
โ BP ์์
๊ฐ ๋ฎ์ด์ฐ๊ธฐ
์ด๋ฅผ ํตํด ๋ธ๋ฃจํ๋ฆฐํธ์ ์ ์ฅ๋ ์๋ชป๋ ์ถฉ๋ ์ค์ ์ด ์๋๋ผ๋ ํ๋ ์ด ์์ ์ ์ผ๊ด๋ ์ ํฌ์ฉ ์ถฉ๋ ์ํ๋ฅผ ์ ์งํ ์ ์๋๋ก ์ ๋ฆฌํ๋ค.
์ด๋ฒ ์์ ๊ณผ์ ์์ ๋ช ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ ๋จ๊ณ์ ์ผ๋ก ์ ๊ฑฐํ ์ ์์๋ค.
์ด๊ธฐ ์์ฌ ๋์์ด์์ง๋ง ์ง์ ์์ธ์ ์๋์๋ค.
HitReaction ์ ๊ฑฐ
โ ๋์ผ ์ฆ์ ๋ฐ์
๋ฐ๋ผ์ ํ์ฌ ์ถฉ๋ ๋ฌธ์ ๋ ํผ๊ฒฉ ๋ฐ์๋ณด๋ค ์ถฉ๋ ํ๋กํ ๋ฐ ๋ฌผ๋ฆฌ ์ค์ ์ชฝ์ ๊ฐ๊น์ด ๊ฒ์ผ๋ก ํ๋จํ๋ค.
ํ์ฌ ๊ฐ์ฅ ๊ฐ๋ฅ์ฑ์ด ๋์ ์์ธ์ด๋ค.
Custom Collision
โ ๋น์ ์ ์๋ต ๊ฐ๋ฅ์ฑ
Mesh Collision ํ์ฑ
โ ์บก์๊ณผ ์ค๋ณต ์ถฉ๋
โ ๊ณผ๋ํ ๋ฐ๋ฆผ ๋ฐ์
์ด๋ฒ ์์ ์ ์ด ๋ถ๋ถ์ ์ฐ์ ์ ์ผ๋ก ์์ ํํ๊ธฐ ์ํ ์์ ์ด์๋ค.
ํ์ฌ๋ ๊ธฐ๋ณธ Pawn ์ฑ๋์ ์ฌ์ฉํ๊ณ ์์ง๋ง ์ฅ๊ธฐ์ ์ผ๋ก๋ ํ๋ ์ด์ด์ ๋ชฌ์คํฐ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ตฌ์กฐ๊ฐ ๋ ์ ํฉํ๋ค๊ณ ํ๋จํ๋ค.
๋ชฉํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
ํ๋ ์ด์ด โ ๋ชฌ์คํฐ
โ Block
๋ชฌ์คํฐ โ ๋ชฌ์คํฐ
โ Overlap
์ด๋ฅผ ์ํด ๋ณ๋์ EnemyPawn ์ฑ๋์ ์ถ๊ฐํ๊ณ ๊ณต๊ฒฉ ํ์ ๊ณผ ํ๊ฒ ํ์๋ ํด๋น ์ฑ๋์ ํจ๊ป ๊ฒ์ฌํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฒํ ํ๋ค.
์ด ๋ฐฉ์์ด ์ ์ฉ๋๋ฉด ๋ชฌ์คํฐ๋ผ๋ฆฌ ์๋ก ๋ฐ์ด๋ด๋ ํ์์ ์ค์ด๋ฉด์๋ ํ๋ ์ด์ด์์ ์ ํฌ ์ถฉ๋์ ์ ์งํ ์ ์๋ค.
ํ์ฌ ๊ณต๊ฒฉ๊ถ ์๋ ๊ณ ์ ๊ฐ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์๋ค.
MaxAttackTokens = 2
ํ์ง๋ง ๋ชฌ์คํฐ ์ข ๋ฅ๊ฐ ๋ค์ํด์ง ๊ฒฝ์ฐ ์ ์ญ ์์๋ง์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ด๋ ต๋ค.
๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ๊ฒํ ํ๋ค.
AttackTokenCost
AttackTokenBudget
OrbitInnerRadius
OrbitOuterRadius
์๋ฅผ ๋ค์ด ๋ํ ๋ชฌ์คํฐ๋ ๊ณต๊ฒฉ๊ถ ๋น์ฉ์ ๋์ด๊ณ , ์ํ ๋ชฌ์คํฐ๋ ๋น์ฉ์ ๋ฎ๊ฒ ์ค์ ํ๋ฉด ๋ชฌ์คํฐ ์ข ๋ฅ์ ๋ฐ๋ผ ์์ฐ์ค๋ฝ๊ฒ ๊ณต๊ฒฉ ๋ฐ๋๋ฅผ ์กฐ์ ํ ์ ์๋ค.
๋ํ ๋ฐฐํ ๋ฐ๊ฒฝ๋ ๋ฐ์ดํฐ ํ ์ด๋ธ์์ ๊ด๋ฆฌํ๋๋ก ํ๋ฉด ๋ชฌ์คํฐ ์ฒด๊ธ๋ณ ์ ํฌ ๊ฑฐ๋ฆฌ ์ฐจ์ด๋ฅผ ์ฝ๊ฒ ํํํ ์ ์๋ค.