[TIL] 251110

๊น€์„ธํฌยท2025๋…„ 11์›” 10์ผ

โœ๏ธToday I Learned

๐Ÿ“… 2025-11-10

  • ์•„์ดํ…œ ์‚ฌ์šฉ ์–ด๋นŒ๋ฆฌํ‹ฐ ํ™œ์„ฑํ™”
  • ๋ถ€ํŒจ๋„ ์‹œ์Šคํ…œ ๊ตฌ์ƒ

์•„์ดํ…œ ์‚ฌ์šฉ ์–ด๋นŒ๋ฆฌํ‹ฐ ํ™œ์„ฑํ™”

์•„์ดํ…œ ๋ฐ์ดํ„ฐ์— ๋“ฑ๋ก๋œ Ability๋ฅผ ์ฆ‰์‹œ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

// ์•„์ดํ…œ ์‚ฌ์šฉ ์–ด๋นŒ๋ฆฌํ‹ฐ ํ™œ์„ฑํ™”
UAbilitySystemComponent* ASC = GetASC();
if (!ASC)
{
    UE_LOG(LogTemp, Warning, TEXT("UseItem failed: No ASC found"));
    return;
}

FItemData ItemInfo;
if (!GetItemData(Slot.StaticDataID, ItemInfo))
{
    UE_LOG(LogTemp, Warning, TEXT("UseItem failed: Invalid ItemData for ID=%d"), Slot.StaticDataID);
    return;
}

if (ItemInfo.AbilityBP)
{
    FGameplayAbilitySpec Spec(ItemInfo.AbilityBP, 1, 0);
    ASC->GiveAbilityAndActivateOnce(Spec);
}

ํ•ต์‹ฌ ๋™์ž‘:

  • GiveAbilityAndActivateOnce() ์‚ฌ์šฉ์œผ๋กœ Ability๋ฅผ ์ฆ‰์‹œ ๋ถ€์—ฌํ•˜๊ณ  ํ™œ์„ฑํ™”
  • ํ™œ์„ฑํ™” ํ›„ ์ž๋™์œผ๋กœ Ability๊ฐ€ ์ œ๊ฑฐ๋จ (์ผํšŒ์„ฑ ์‚ฌ์šฉ)
  • ์†Œ๋ชจํ’ˆ ์•„์ดํ…œ์— ์ ํ•ฉํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์—๋„ ์œ ๋ฆฌํ•จ

๋ถ€ํŒจ๋„ ์‹œ์Šคํ…œ ๊ตฌ์ƒ

์„œ๋ฒ„ ์ธก ๋กœ์ง

  • ์•„์ดํ…œ ์Šต๋“ ์‹œ: ํ˜„์žฌ ์‹œ๊ฐ ๊ธฐ์ค€์œผ๋กœ ์ตœ์ข… ๋งŒ๋ฃŒ ์‹œ๊ฐ ๊ณ„์‚ฐ ๋ฐ ์ €์žฅ
  • ๋ถ€ํŒจ๋„ ๋งค๋‹ˆ์ € ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ๊ตฌ๋…: 1์ดˆ๋งˆ๋‹ค ๋ถ€ํŒจ๋„ ํ™•์ธ ์š”์ฒญ ์ˆ˜์‹ 
  • ์ธ๋ฒคํ† ๋ฆฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ถ€ํŒจ๋„ ๊ณ„์‚ฐ: ๋งŒ๋ฃŒ ์‹œ๊ฐ ๊ธฐ์ค€์œผ๋กœ ํผ์„ผํŠธ ๊ฐฑ์‹ 
  • ์„œ๋ฒ„ ์Šคํฐ ์‹œ: ๋ถ€ํŒจ ํƒ€์ด๋จธ ์‹œ์ž‘

์ฃผ์š” ๊ธฐ๋Šฅ

1. ์ƒˆ๋กœ์šด ์•„์ดํ…œ ์Šต๋“ ์‹œ ์Šคํƒ ๋ณ‘ํ•ฉ

  • ๊ธฐ์กด ์•„์ดํ…œ๊ณผ ์ƒˆ ์•„์ดํ…œ์˜ ๋ถ€ํŒจ ๋งŒ๋ฃŒ ์‹œ๊ฐ์„ ํ‰๊ท ๊ฐ’์œผ๋กœ ๊ณ„์‚ฐ
  • ์Šคํƒ๋œ ์•„์ดํ…œ๋“ค์˜ ๋ถ€ํŒจ๋„๋ฅผ ํ†ต์ผ

2. ๋ถ€ํŒจ ์™„๋ฃŒ ์‹œ

  • ํ•ด๋‹น ์•„์ดํ…œ์ด "๋ถ€ํŒจ๋ฌผ ์•„์ดํ…œ"์œผ๋กœ ์ž๋™ ๋ณ€๊ฒฝ๋จ
  • ์‚ฌ์šฉ ์‹œ ์ƒํƒœ์ด์ƒ ๋””๋ฒ„ํ”„

3. ๋ถ€ํŒจ๋„ ๋งค๋‹ˆ์ €

  • 1์ดˆ๋งˆ๋‹ค ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ
  • ๋ชจ๋“  ๊ตฌ๋…์ž(์ธ๋ฒคํ† ๋ฆฌ ์ปดํฌ๋„ŒํŠธ ๋“ฑ)์—๊ฒŒ ๋ถ€ํŒจ๋„ ํ™•์ธ ์š”์ฒญ ์ „์†ก
  • ์ค‘์•™ ์ง‘์ค‘์‹ ํƒ€์ด๋จธ ๊ด€๋ฆฌ๋กœ ์„ฑ๋Šฅ ์ตœ์ ํ™”

์„ค๊ณ„ ํฌ์ธํŠธ

  • ๋ถ€ํŒจ๋„ ๊ณ„์‚ฐ๊ณผ ์•„์ดํ…œ ๋ณ€๊ฒฝ์€ ๋ชจ๋‘ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌ (Server Authority)
  • ํด๋ผ์ด์–ธํŠธ๋Š” Replication์œผ๋กœ ๊ฒฐ๊ณผ๋งŒ ์ˆ˜์‹ 
  • ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด์œผ๋กœ ๋งค๋‹ˆ์ € โ†” ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋А์Šจํ•œ ๊ฒฐํ•ฉ ๊ตฌํ˜„

๐Ÿ’ก ๋А๋‚€ ์  (What I Felt)

GiveAbilityAndActivateOnce()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ผํšŒ์„ฑ ์•„์ดํ…œ ์‚ฌ์šฉ ๋กœ์ง์„ ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ–ˆ๋‹ค. ๋งค๋ฒˆ Ability๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์•ˆ์ „ํ•˜๊ณ  ํŽธ๋ฆฌํ•˜๋‹ค.

๋ถ€ํŒจ๋„ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ํ‰๊ท ๊ฐ’ ๊ณ„์‚ฐ ๋ฐฉ์‹์ด ๊ฒŒ์ž„ ๋ฐธ๋Ÿฐ์Šค ์ธก๋ฉด์—์„œ ๊ณต์ •ํ•œ์ง€๋Š” ์‹ค์ œ ํ”Œ๋ ˆ์ดํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๊ฒ€์ฆ์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค. ๋˜ํ•œ ์•„์ดํ…œ ์‚ฌ์šฉ ์‹œ ์ฟจ๋‹ค์šด์ด๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์—ฐ๋™๋„ ์ถ”๊ฐ€๋กœ ๊ณ ๋ คํ•ด๋ด์•ผ๊ฒ ๋‹ค.


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