[TIL] 250909

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

โœ๏ธToday I Learned

๐Ÿ“… 2025-09-09

  • Lyra - CommonUI

Lyra - CommonUI

CommonUI: UMG๋ฅผ ํ•œ ๋ฒˆ ๋” ๋งคํ•‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ. ์“ธ ๋ถ€๋ถ„๋งŒ ์“ฐ๊ธฐ

UIPolicy: UI ์„ค์ • ๋ฐฉ์‹ ๊ฒฐ์ •. UI๋ฅผ ์ง„์งœ ๊ด€๋ฆฌ

โ†’ ๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ ์“ฐ๋ ค๋ฉด ์ด๊ฑฐ ๋งŒ๋“ค์–ด์„œ GameUIManagerSubsystem์— ๋“ฑ๋ก

Primary Layout

  • ์ œ์ผ ๋จผ์ € ์ •์˜ํ•ด์•ผ ํ•จ
  • ๋ช‡๊ฐ€์ง€ ๋ ˆ์ด์•„์›ƒ(๋ฉ”๋‰ด, ์ธ๊ฒŒ์ž„, ํŒ์—… ๋“ฑ)์„ ๊ฐ€์งˆ ์ง€ ์ •์˜
  • Common Activatable Widget Stack
    • ๊ฐ€์žฅ ์ตœ๊ทผ ์œ„์ ฏ ๋จผ์ € ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด Stack ์‚ฌ์šฉ
    • ๋ ˆ์ด์•„์›ƒ 4๊ฐœ ์ƒ์„ฑ - GameLayer, GameMenu(๊ฒŒ์ž„), Menu(์„ค์ •), Modal(ํŒ์—…)
    • RegisterLayer ๋กœ ๊ฒŒ์ž„ํ”Œ๋ ˆ์ด ํƒœ๊ทธ์™€ ๋ ˆ์ด์•„์›ƒ ๋งคํ•‘

์–ด๋–ค ๋ ˆ์ด์•„์›ƒ์ธ์ง€ - ํƒœ๊ทธ, ํ•ด๋‹น ๋ ˆ์ด์•„์›ƒ ์•ˆ์— ์–ด๋–ค UIExtension(์œ„์ ฏ)์ด ๋“ค์–ด๊ฐ€๋Š”์ง€ - ํƒœ๊ทธ

๋ ˆ์ด์•„์›ƒ ์•ˆ์— ์œ„์ ฏ ์„ธํŒ… โ†’ Game Feature Action ์‚ฌ์šฉ (Add Widget)

UIExtension

  • ExtensionPointTag : ์œ„์ ฏ์˜ ํƒœ๊ทธ
  • Data < UObject> : ์œ„์ ฏ ํด๋ž˜์Šค
  • ContextObject < UObject> : ์œ„์ ฏ ์†Œ์œ ์ž

UIExtensionHandle

  • Subsystem
  • UIExtension

Layout, UIExtension ๊ด€๋ฆฌ ๊ตฌ์กฐ

Layout ๊ด€๋ฆฌ

  • GameUIManagerSubsystem โ†’ UIPolicy โ†’ Layout

UIExtension ๊ด€๋ฆฌ

  • UIExtensionSystem โ†’ UIExtension

GameFeature_AddWidget

ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ ˆ์ด์•„์›ƒ์— ์›ํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ ๋„ฃ๊ณ  ๊ทธ ๋ ˆ์ด์•„์›ƒ์˜ UIExtension์— ์–ด๋–ค ์œ„์ ฏ์„ ์žฅ์ฐฉํ• ์ง€ ํƒœ๊ทธ๋กœ ๊ฒฐ์ •

FLyraHUDLayoutRequest

  • LayoutClass <UCommonActivatableWidget> : ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ ˆ์ด์•„์›ƒ์— ๋„ฃ์„ ์œ„์ ฏ
  • LayerID : ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ ˆ์ด์•„์›ƒ์— ๋“ฑ๋กํ•  ํƒœ๊ทธ

FLyraHUDElementEntry

  • WidgetClass <UUserWidget>: ๋ ˆ์ด์•„์›ƒ์— ๋“ค์–ด๊ฐˆ ์œ„์ ฏ
  • SlotID : LayoutClass์— ์ •์˜๋œ ์Šฌ๋กฏ์˜ ํƒœ๊ทธ

GameFeatureAction_AddWidgets์˜ ์ž‘๋™ ํ๋ฆ„

  1. AddToWorld: Game Feature๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ์ด ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” UGameFrameworkComponentManager์— ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•ธ๋“ค๋Ÿฌ๋Š” ํŠน์ • ์•กํ„ฐ(์—ฌ๊ธฐ์„œ๋Š” ALyraHUD)์—์„œ ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ HandleActorExtension ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  2. HandleActorExtension: ์ด ํ•จ์ˆ˜๋Š” ALyraHUD์—์„œ UGameFrameworkComponentManager::NAME_GameActorReady ์ด๋ฒคํŠธ๊ฐ€ ์ˆ˜์‹ ๋˜๋ฉด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ด ์ด๋ฒคํŠธ๊ฐ€ ๋ฐ”๋กœ *LyraHUD::BeginPlay()์—์„œ ๋ณด๋‚ธ ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.
  3. AddWidgets: HandleActorExtension ํ•จ์ˆ˜๋Š” ์ด๋ฒคํŠธ ์ด๋ฆ„์ด NAME_GameActorReady์ธ ๊ฒฝ์šฐ AddWidgets ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜์—์„œ ์‹ค์ œ๋กœ ์œ„์ ฏ์„ HUD์— ์ถ”๊ฐ€ํ•˜๋Š” ๋กœ์ง์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์š”์•ฝํ•˜์ž๋ฉด, ALyraHUD::BeginPlay()๋Š” "๋‚˜ ์ค€๋น„๋์–ด!"๋ผ๋Š” ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๊ณ , GameFeatureAction_AddWidgets๋Š” ๊ทธ ์‹ ํ˜ธ๋ฅผ ๋ฐ›์•„์„œ "์•Œ์•˜์–ด, ๊ทธ๋Ÿผ ๋‚ด๊ฐ€ ์œ„์ ฏ์„ ์ถ”๊ฐ€ํ•ด ์ค„๊ฒŒ"๋ผ๊ณ  ์‘๋‹ตํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ„๋ฆฌ๋œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ฐฉ์‹์€ ์‹œ์Šคํ…œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

Common Activatable Widget

  • ๋Ÿฐํƒ€์ž„ ์ค‘ Activate/Deactivate ๊ฐ€๋Šฅ
  • Input ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ์ปค์Šคํ…€

Assetbundle : client, server ํ‘œ์‹œํ•ด์„œ ํ•„์š”ํ•œ ๊ฒƒ๋“ค๋งŒ ๋กœ๋”ฉ

TobjectPtr์€ ๋ฒˆ๋“ค๋กœ ๋“ฑ๋กํ•˜์ง€ ์•Š์•„๋„ ํ•ญ์ƒ ๊ฐ€์ ธ์˜ด. ํด๋ผ์ด์–ธํŠธ๋‚˜ ์„œ๋ฒ„ ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ํ•„์š”ํ•œ ๊ฒƒ๋“ค์€ objectPtr๋กœ ์„ค์ •

์œ„์ ฏ์€ ํด๋ผ์ด์–ธํŠธ์—์„œ๋งŒ ํ•„์š”ํ•˜๊ณ  ์„œ๋ฒ„๋Š” ์—†์–ด๋„ ๋˜๋ฏ€๋กœ TSoftClassPtr๋กœ ์„ค์ •ํ•จ. ๊ทธ๋Ÿฌ๋ฉด ํด๋ผ์ด์–ธํŠธ๋งŒ ๊ฐ€์ ธ์˜ค๋„๋ก ์„ค์ •ํ•ด์•ผํ•จ

UIExtensionPoint

  1. ์„œ๋ธŒ์‹œ์Šคํ…œ์—์„œ ๊ด€๋ จ ํƒœ๊ทธ๋กœ extension point๋ฅผ ์ฐพ๊ณ  ๋งค์น˜ ๊ธฐ์ค€ ํ™•์ธ (ํƒœ๊ทธ ์ผ์น˜, ํ—ˆ์šฉ๋œ ์œ„์ ฏ ํด๋ž˜์Šค)
  2. ๊ธฐ์ค€์— ๋งž์œผ๋ฉด ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ํ†ตํ•ด์„œ ExtensionPoint ์œ„์ ฏ์— ์žฅ์ฐฉ

์„œ๋ธŒ์‹œ์Šคํ…œ์—์„œ UIExtensionPointHandle๋กœ ๊ด€๋ฆฌ

  • UIExtensionSubsystem : ํ•ธ๋“ค์„ ํ†ตํ•ด์„œ ์„œ๋ธŒ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ
  • UIExtensionPoint

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

ํ•œ ๋ฒˆ ์ž˜ ์ดํ•ดํ•˜๋ฉด ์œ ์šฉํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.


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