๐Ÿ“˜TIL- GAS ์ฝค๋ณด ์‹œ์Šคํ…œ, ์Šคํƒœ๋ฏธ๋‚˜ ์ ์šฉ

HappyCircleยท2026๋…„ 3์›” 19์ผ

Unreal ๊ฐœ๋ฐœ

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

๋ฌธ์ œ

๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด ๊ธฐ๋ฐ˜ GAS ๊ตฌ์กฐ์—์„œ ์ฝค๋ณด ๊ณต๊ฒฉ๊ณผ ๋ฐฉ์–ด ์‹œ์Šคํ…œ์— ์Šคํƒœ๋ฏธ๋‚˜๋ฅผ ์—ฐ๋™ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

  • ์ฝค๋ณด ๊ณต๊ฒฉ ์‹œ ์Šคํƒœ๋ฏธ๋‚˜ ์†Œ๋ชจ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์Œ
  • GameplayEffect ์ ์šฉ ๋กœ๊ทธ๋Š” ์ฐํžˆ์ง€๋งŒ ์‹ค์ œ Stamina ๊ฐ’์€ ๊ฐ์†Œํ•˜์ง€ ์•Š์Œ
  • Block / Attack / Regen์ด ์„œ๋กœ ๊ฐ„์„ญํ•˜์—ฌ ๋ฆฌ์  ์ด ๋น„์ •์ƒ ๋™์ž‘
  • ์Šคํƒœ๋ฏธ๋‚˜ ๋กœ์ง์ด ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์— ๋ถ„์‚ฐ๋˜์–ด ๊ตฌ์กฐ๊ฐ€ ๋ถˆ๋ช…ํ™•ํ•จ

๋ถ„์„


GameplayEffect ์ ์šฉ ๋ฌธ์ œ ๊ตฌ์กฐ

๋‹จ๊ณ„์ƒํƒœ์‹ค์ œ ์˜๋ฏธ
Ability ์‹คํ–‰์ •์ƒAbility ๋กœ์ง ๋ฌธ์ œ ์•„๋‹˜
GE Apply ๋กœ๊ทธ์ •์ƒSpec ์ƒ์„ฑ ๋ฐ ์ ์šฉ ์„ฑ๊ณต
Attribute ๋ณ€ํ™”์—†์ŒGE ๋‚ด๋ถ€ ์„ค์ • ๋ฌธ์ œ

๊ฒฐ๋ก : ๋กœ์ง ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ GE ์„ค์ • ๋ฌธ์ œ


SetByCaller ๋ฌธ์ œ ๊ตฌ์กฐ

[์ฝ”๋“œ]        Data.StaminaCost
[GE ์—์…‹]     Data.Stamina.Cost
๋ฌธ์ œ๊ฒฐ๊ณผ
ํƒœ๊ทธ ๋ถˆ์ผ์น˜SetByCaller ๊ฐ’ = 0
์ตœ์ข… ๊ฒฐ๊ณผStamina ๋ณ€ํ™” ์—†์Œ

GAS์—์„œ ๊ฐ€์žฅ ํ”ํ•œ ํ•จ์ •


GameplayEffect ์˜ฌ๋ฐ”๋ฅธ ๊ตฌ์กฐ

ํ•ญ๋ชฉ์„ค์ •
Duration PolicyInstant
AttributeStamina
Modifier OpAdd
MagnitudeSetByCaller(Data.StaminaCost)

์ฑ…์ž„ ๋ถ„๋ฆฌ ๋ฌธ์ œ (Before / After)

Before (๋ฌธ์ œ ๊ตฌ์กฐ)

Character
 โ”œโ”€ ์ผ๋ถ€ ์Šคํƒœ๋ฏธ๋‚˜ ์ฒ˜๋ฆฌ
ComboManager
 โ”œโ”€ ์ผ๋ถ€ ์ฒ˜๋ฆฌ
Ability
 โ”œโ”€ ์ผ๋ถ€ ์ฒ˜๋ฆฌ

์ฑ…์ž„์ด ๋ถ„์‚ฐ โ†’ ๋””๋ฒ„๊น… ์–ด๋ ค์›€


After (๊ฐœ์„  ๊ตฌ์กฐ)

Character
 โ”œโ”€ Ability ์‹คํ–‰ ์ง„์ž…์ 

Ability (GA_Block / GA_Attack)
 โ”œโ”€ ๋น„์šฉ ๊ณ„์‚ฐ
 โ”œโ”€ GE ์ ์šฉ

GameplayEffect
 โ”œโ”€ ์‹ค์ œ ์ˆ˜์น˜ ๋ณ€๊ฒฝ

AttributeSet
 โ”œโ”€ Stamina ๊ฐ’ ๋ณด์œ 

ComboManager
 โ”œโ”€ ์ฝค๋ณด ์ธ๋ฑ์Šค ๊ด€๋ฆฌ

์—ญํ•  ๋ช…ํ™•ํ™”


ํ•ด๊ฒฐ


์ „์ฒด ์‹œ์Šคํ…œ ํ๋ฆ„ (๋‹ค์ด์–ด๊ทธ๋žจ)

[์ž…๋ ฅ]
   โ†“
ComboManager
   โ†“ (ํ˜„์žฌ ์ฝค๋ณด ๋‹จ๊ณ„ ์ œ๊ณต)
GA_ComboAttack
   โ†“
CanActivateAbility
   โ†“ (์Šคํƒœ๋ฏธ๋‚˜ ์ฒดํฌ)
ActivateAbility
   โ†“
GameplayEffect (Cost ์ ์šฉ)
   โ†“
AttributeSet (Stamina ๊ฐ์†Œ)

์ฝค๋ณด ์Šคํƒœ๋ฏธ๋‚˜ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ

๋‹จ๊ณ„์—ญํ• 
ComboManagerํ˜„์žฌ ์ฝค๋ณด index ์ œ๊ณต
AbilityStaminaCost ๊ณ„์‚ฐ
CanActivate์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์‚ฌ
ActivateGE ์ ์šฉ
AttributeSet์‹ค์ œ ๊ฐ’ ๋ณ€๊ฒฝ

Block / Attack / Regen ๊ตฌ์กฐ ๋น„๊ต

๊ธฐ์กด ๋ฐฉ์‹ (๋ฌธ์ œ)

์‹œ์Šคํ…œ๋ฐฉ์‹
BlockRegen ์ œ๊ฑฐ
AttackRegen ์˜ํ–ฅ ์—†์Œ
Regen์ˆ˜๋™ ์ ์šฉ

์ƒํƒœ ๊ผฌ์ž„ ๋ฐœ์ƒ


๊ฐœ์„  ๋ฐฉ์‹ (Tag ๊ธฐ๋ฐ˜)

์‹œ์Šคํ…œ๋ฐฉ์‹
RegenBeginPlay์—์„œ 1ํšŒ ์ ์šฉ
BlockState.Blocking ํƒœ๊ทธ
AttackState.Attacking ํƒœ๊ทธ
Regen ์ œ์–ดTag ์กฐ๊ฑด์œผ๋กœ ์ž๋™ ์ค‘์ง€

ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ์ œ์–ด ๊ตฌ์กฐ

State.Blocking
State.Attacking

Regen GE ๋™์ž‘ ์กฐ๊ฑด

์ƒํƒœ๊ฒฐ๊ณผ
BlockingRegen OFF
AttackingRegen OFF
IdleRegen ON

Block Ability ์—ญํ•  ์ •๋ฆฌ

์‹œ์ ์ฒ˜๋ฆฌ
์‹œ์ž‘DefenseBuff ์ ์šฉ
์‹œ์ž‘StaminaDrain ์ ์šฉ
์ข…๋ฃŒBuff ์ œ๊ฑฐ
์ข…๋ฃŒDrain ์ œ๊ฑฐ
๋ฆฌ์  ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์Œ

Combo Ability ์—ญํ•  ์ •๋ฆฌ

๋‹จ๊ณ„์ฒ˜๋ฆฌ
์‹œ์ž‘ComboData ์กฐํšŒ
๊ฒ€์‚ฌStamina ์ฒดํฌ
์‹คํ–‰Cost GE ์ ์šฉ
์‹คํ–‰Montage ์žฌ์ƒ
์ข…๋ฃŒAbility ์ข…๋ฃŒ

ํ•ต์‹ฌ ์ฝ”๋“œ ๊ตฌ์กฐ

SpecHandle.Data->SetSetByCallerMagnitude(
    FGameplayTag::RequestGameplayTag(FName("Data.StaminaCost")),
    -MyComboData->StaminaCost
);

๋””๋ฒ„๊น… ์ฒดํฌ๋ฆฌ์ŠคํŠธ

์ฒดํฌ ํ•ญ๋ชฉ๋ฐฉ๋ฒ•
GE ์ ์šฉ ์—ฌ๋ถ€Apply ๋กœ๊ทธ
์‹ค์ œ ๊ฐ’ ๋ณ€ํ™”AttributeSet ๋กœ๊ทธ
SetByCaller ๊ฐ’Tag ์ถœ๋ ฅ
GE ์„ค์ • ํ™•์ธ์—์…‹ Modifier ํ™•์ธ

๋””๋ฒ„๊น… ํ๋ฆ„

1. GE ์ ์šฉ ๋กœ๊ทธ ํ™•์ธ
2. AttributeSet ๊ฐ’ ๋ณ€ํ™” ๋กœ๊ทธ ํ™•์ธ
3. ๊ฐ’์ด ์•ˆ ๋ณ€ํ•˜๋ฉด โ†’ SetByCaller ํ™•์ธ
4. ๊ทธ๋ž˜๋„ ์•ˆ ๋˜๋ฉด โ†’ GE Modifier ํ™•์ธ

ํ•ต์‹ฌ ์ธ์‚ฌ์ดํŠธ

  • GAS์—์„œ โ€œ์ ์šฉ๋จโ€๊ณผ โ€œ๊ฐ’ ๋ณ€๊ฒฝ๋จโ€์€ ๋‹ค๋ฅธ ๊ฐœ๋…์ด๋‹ค
  • SetByCaller๋Š” Tag ํ•˜๋‚˜ ํ‹€๋ฆฌ๋ฉด ์ „์ฒด ์‹œ์Šคํ…œ์ด ๋ฌดํšจํ™”๋œ๋‹ค
  • ์Šคํƒœ๋ฏธ๋‚˜๋Š” Ability๊ฐ€ ์•„๋‹ˆ๋ผ GameplayEffect๊ฐ€ ์ฑ…์ž„์ ธ์•ผ ํ•œ๋‹ค
  • ์ƒํƒœ ์ œ์–ด๋Š” ์ฝ”๋“œ๋ณด๋‹ค Tag ๊ธฐ๋ฐ˜์ด ํ›จ์”ฌ ์•ˆ์ •์ ์ด๋‹ค
  • ์‹œ์Šคํ…œ์ด ์ปค์งˆ์ˆ˜๋ก ์ฑ…์ž„ ๋ถ„๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ๋””๋ฒ„๊น… ๋‚œ์ด๋„๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค

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

  • GAS ์Šคํƒœ๋ฏธ๋‚˜ ์‹œ์Šคํ…œ์€ ๊ฐ’์„ ์ง์ ‘ ์ฐจ๊ฐํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ GameplayEffect + Tag ๊ธฐ๋ฐ˜์œผ๋กœ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋ฉฐ,
    ๊ฐ ํ–‰๋™์€ ๋น„์šฉ ๊ณ„์‚ฐ๋งŒ ๋‹ด๋‹นํ•˜๊ณ  ์‹ค์ œ ์ ์šฉ์€ GE๊ฐ€ ๋งก๋„๋ก ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์ถฉ๋Œ ์—†์ด ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ๋””๋ฒ„๊น…์ด ์‰ฌ์šด ๊ตฌ์กฐ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
profile
๊ฐœ๋ฐœํ•ฉ์‹œ๋‹ค!

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