๐Ÿ“˜TIL-RTS ๊ธฐ๋ณธ UI ๋ ˆ์ด์•„์›ƒ ์„ค๊ณ„ ๋ฐ WBP ๊ตฌ์„ฑ ์ •๋ฆฌ

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

Unreal ๊ฐœ๋ฐœ

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

๋ฌธ์ œ

์ด๋ฒˆ ์ž‘์—…์˜ ๋ชฉ์ ์€ ๋‹จ์ˆœํ•œ UI ๊ตฌํ˜„์ด ์•„๋‹ˆ๋ผ
RTS ์žฅ๋ฅด์—์„œ ์‹ค์ œ ํ”Œ๋ ˆ์ด์— ๋งž๋Š” HUD ๋ ˆ์ด์•„์›ƒ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด ์•ˆ์ •์ ์œผ๋กœ ๋ฐ˜์˜๋˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

์ดˆ๊ธฐ์—๋Š” ์ขŒํ•˜๋‹จ / ์šฐํ•˜๋‹จ์œผ๋กœ ํŒจ๋„์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ–ˆ์ง€๋งŒ,
๊ตฌ์กฐ๋ฅผ ์‹ค์ œ ํ”Œ๋ ˆ์ด ๊ธฐ์ค€์œผ๋กœ ๋‹ค์‹œ ๊ฒ€ํ† ํ•˜๋ฉด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

  • ์„ ํƒ ์ •๋ณด์™€ ๋ช…๋ น UI๊ฐ€ ๋ถ„๋ฆฌ๋˜๋ฉด ์‹œ์„  ์ด๋™์ด ๋งŽ์•„์ง
  • ํ•˜๋‹จ UI๊ฐ€ ์—ฌ๋Ÿฌ ๋ฉ์–ด๋ฆฌ๋กœ ๋‚˜๋‰˜์–ด ์ง๊ด€์„ฑ์ด ๋–จ์–ด์ง
  • ํ™•์žฅ ์‹œ UI ๊ฐ„ ๊ฐ„๊ฒฉ๊ณผ ์ •๋ ฌ ์œ ์ง€๊ฐ€ ์–ด๋ ค์›€

๊ทธ๋ž˜์„œ ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ์ •๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค.


๋ถ„์„


1. RTS UI ๋ ˆ์ด์•„์›ƒ ๊ธฐ์ค€ ์žฌ์ •์˜

RTS ์žฅ๋ฅด์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ UI ์˜์—ญ์€ ํ•˜๋‹จ ์ปจํŠธ๋กค ์˜์—ญ์ด๋‹ค.

์ƒ๋‹จ        โ†’ ์ž์› / ์‹œ๊ฐ„
ํ•˜๋‹จ ์ „์ฒด   โ†’ ์„ ํƒ ์ •๋ณด + ๋ช…๋ น UI + ์ถ”๊ฐ€ UI

์ฆ‰ ํ•˜๋‹จ์„ ํ•˜๋‚˜์˜ ์˜์—ญ์œผ๋กœ ๋ฌถ๋Š” ๊ฒƒ์ด ๋” ์ž์—ฐ์Šค๋Ÿฝ๋‹ค.


2. ํ•˜๋‹จ ์ผ๋ ฌ ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝ

๊ธฐ์กด ๋ถ„๋ฆฌ ๊ตฌ์กฐ ๋Œ€์‹ 
ํ•˜๋‹จ์„ ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ณด๊ณ  ๋‚ด๋ถ€๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.


์ „์ฒด ๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                  TopBar                    โ”‚
โ”‚                                            โ”‚
โ”‚              NotificationPanel             โ”‚
โ”‚                                            โ”‚
โ”‚                                            โ”‚
โ”‚                                            โ”‚
โ”‚                                            โ”‚
โ”‚                                            โ”‚
โ”‚ [Selection] [CommandPanel] [Queue/Minimap] โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

3. ํ•˜๋‹จ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ๊ตฌ์กฐ

ํ•˜๋‹จ์„ ํ•˜๋‚˜์˜ ํŒจ๋„๋กœ ๋ณด๊ณ  ๋‚ด๋ถ€๋ฅผ ๋‚˜๋ˆด๋‹ค.

BottomPanel
 โ”” HorizontalBox
    โ”œ SelectionPanel
    โ”œ CommandPanel
    โ”” ExtraPanel (Minimap / ProductionQueue)

์ด ๊ตฌ์กฐ์˜ ์žฅ์ :

  • ์‹œ์„  ์ด๋™ ์ตœ์†Œํ™”
  • UI๊ฐ€ ํ•œ ๋ฉ์–ด๋ฆฌ๋กœ ๋ฌถ์—ฌ ์•ˆ์ •์ 
  • ํ™•์žฅ ์‹œ ์œ„์น˜ ํ”๋“ค๋ฆผ ์—†์Œ

4. Anchor ์ „๋žต ์žฌ์ •์˜

๊ธฐ์กด์—๋Š” ํŒจ๋„๋ณ„๋กœ Anchor๋ฅผ ๋”ฐ๋กœ ์คฌ์ง€๋งŒ
์ด์ œ๋Š” ํ•˜๋‹จ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ค€์œผ๋กœ ํ†ต์ผํ–ˆ๋‹ค.

์˜์—ญAnchor
TopBarTop Stretch
NotificationTop Center
BottomPanelBottom Stretch

ํ•˜๋‹จ์€ ๊ฐœ๋ณ„ ํŒจ๋„์ด ์•„๋‹ˆ๋ผ
BottomPanel ํ•˜๋‚˜๋กœ ๊ด€๋ฆฌ


5. ๋ ˆ์ด์•„์›ƒ ๊ณ„์ธต ๊ตฌ์กฐ

๊ตฌ์กฐ๋ฅผ ๋‹ค์Œ์ฒ˜๋Ÿผ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ–ˆ๋‹ค.

CanvasPanel (์œ„์น˜ ๋ฐฐ์น˜)
 โ”œ TopBar
 โ”œ Notification
 โ”” BottomPanel
     โ”” HorizontalBox
         โ”œ Selection
         โ”œ Command
         โ”” Extra

์ด ๊ตฌ์กฐ๋กœ ๋ฐ”๊พธ๋ฉด์„œ

  • Canvas ์‚ฌ์šฉ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ 
  • ๋‚ด๋ถ€๋Š” Box ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ํ†ต์ผํ–ˆ๋‹ค

6. ๋งˆ์ง„ ์‹œ์Šคํ…œ ์œ ์ง€

๊ธฐ์กด ๊ธฐ์ค€์€ ์œ ์ง€ํ–ˆ๋‹ค.

๊ธฐ๋ณธ Margin = 16

์ ์šฉ ๋ฐฉ์‹:

  • BottomPanel ์ขŒ์šฐ ์—ฌ๋ฐฑ
  • TopBar ์—ฌ๋ฐฑ
  • ํŒจ๋„ ๊ฐ„ ๊ฐ„๊ฒฉ (HorizontalBox Slot Padding)

WBP ๋ ˆ์ด์•„์›ƒ ๊ตฌ์„ฑ


1. WBP_RTSHUDRoot ๊ตฌ์กฐ

WBP_RTSHUDRoot
โ”” CanvasPanel
   โ”œ TopBar
   โ”œ NotificationPanel
   โ”” BottomPanel
      โ”” HorizontalBox
         โ”œ SelectionPanel
         โ”œ CommandPanel
         โ”” ExtraPanel

2. Canvas Slot ์„ค์ •

TopBar

  • Anchor: Top Stretch
  • Margin: Left 16 / Right 16 / Top 16
  • Height: 64

NotificationPanel

  • Anchor: Top Center
  • Position Y: 92
  • Size: 420 x 48

BottomPanel

  • Anchor: Bottom Stretch
  • Left: 16
  • Right: 16
  • Bottom: 16
  • Height: 220

3. BottomPanel ๋‚ด๋ถ€ ๊ตฌ์„ฑ

HorizontalBox ๊ตฌ์กฐ

[SelectionPanel]   [CommandPanel]   [ExtraPanel]

Slot ๋น„์œจ ์„ค์ •

ํŒจ๋„Size Rule๋น„์œจ
SelectionPanelFill0.3
CommandPanelFill0.5
ExtraPanelFill0.2

์ด๋ ‡๊ฒŒ ๋‚˜๋ˆ„๋ฉด ํ•ด์ƒ๋„์— ๋”ฐ๋ผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋Š˜์–ด๋‚œ๋‹ค.


Slot Padding

๊ฐ ์Šฌ๋กฏ Padding = 8

4. ๋‚ด๋ถ€ ํŒจ๋„ ๊ตฌ์กฐ ์œ ์ง€

๊ฐ ํŒจ๋„ ๋‚ด๋ถ€๋Š” ๊ธฐ์กด๊ณผ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ–ˆ๋‹ค.

Border โ†’ SizeBox โ†’ Box Layout

์ด ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ

  • ๋‚ด๋ถ€ ์ •๋ ฌ ์•ˆ์ •์„ฑ ํ™•๋ณด
  • ํ™•์žฅ ์šฉ์ด์„ฑ ์œ ์ง€

WBP ๊ฐ’ ํ• ๋‹น ๊ตฌ์กฐ


1. ๋ฐ์ดํ„ฐ ํ๋ฆ„

Provider
 โ†’ Coordinator
 โ†’ HUDRoot
 โ†’ BottomPanel ๋‚ด๋ถ€ ๊ฐ ํŒจ๋„
 โ†’ TextBlock

2. HUDRoot ์—ญํ• 

HUDRoot๋Š” BottomPanel ๋‚ด๋ถ€ ํŒจ๋„์„ ์ง์ ‘ ์ฐธ์กฐํ•˜๊ณ 
๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋งŒ ํ•œ๋‹ค.

SetTopBarData
SetSelectionData
SetCommandData
ShowNotification

3. ํŒจ๋„์—์„œ ๊ฐ’ ๋ฐ˜์˜ ๋ฐฉ์‹

๊ฐ ํŒจ๋„์€ ๋ฐ›์€ ViewModel์„ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.


TopBar

TextWood โ† Wood ๊ฐ’
TextGas โ† Gas ๊ฐ’
TextPopulation โ† Population ๊ฐ’
TextGameTime โ† Time ๊ฐ’

SelectionPanel

Switcher Index ๋ณ€๊ฒฝ
โ†’ Name / Type / HP / Description ์ถœ๋ ฅ

CommandPanel

Command ๋ฆฌ์ŠคํŠธ
โ†’ Slot0 ~ Slot5 ๋งคํ•‘

4. UI ๋‚ด๋ถ€ ๋กœ์ง ์ œํ•œ

WBP์—์„œ๋Š” ๋‹ค์Œ์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋ฐ์ดํ„ฐ ๊ณ„์‚ฐ
  • ์ƒํƒœ ํŒ๋‹จ
  • ์‹œ์Šคํ…œ ์ ‘๊ทผ

์˜ค์ง

๊ฐ’ ์ถœ๋ ฅ๋งŒ ์ˆ˜ํ–‰

๊ฒฐ๊ณผ


1. ๋ ˆ์ด์•„์›ƒ ๊ตฌ์กฐ ๋‹จ์ˆœํ™”

๊ธฐ์กด:

์ขŒํ•˜๋‹จ / ์šฐํ•˜๋‹จ ๋ถ„๋ฆฌ ๊ตฌ์กฐ

๋ณ€๊ฒฝ:

ํ•˜๋‹จ ํ†ตํ•ฉ ๊ตฌ์กฐ

2. UI ์ผ๊ด€์„ฑ ํ™•๋ณด

  • ํ•˜๋‹จ UI๊ฐ€ ํ•˜๋‚˜์˜ ์˜์—ญ์œผ๋กœ ๋ฌถ์ž„
  • ์‹œ์„  ์ด๋™ ๊ฐ์†Œ
  • ๊ตฌ์กฐ ์ง๊ด€์„ฑ ์ฆ๊ฐ€

3. ํ•ด์ƒ๋„ ๋Œ€์‘ ๊ฐœ์„ 

  • BottomPanel Stretch ๊ตฌ์กฐ
  • ๋‚ด๋ถ€ Fill ๊ธฐ๋ฐ˜ ๋ถ„ํ• 
  • ๋น„์œจ ์œ ์ง€

4. ํ™•์žฅ ์šฉ์ด์„ฑ ํ™•๋ณด

  • ExtraPanel ์˜์—ญ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅ
  • Minimap / ProductionQueue ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

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

  • UI ๋ ˆ์ด์•„์›ƒ์€ ๋‹จ์ˆœํžˆ ๋ฐฐ์น˜๊ฐ€ ์•„๋‹ˆ๋ผ
    ํ”Œ๋ ˆ์ด ํ๋ฆ„๊ณผ ์ •๋ณด ์ „๋‹ฌ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ์กฐ๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ์ž‘์—…์ด์—ˆ๋‹ค.
  • ํ•˜๋‹จ์„ ๋ถ„๋ฆฌ๋œ ํŒจ๋„์ด ์•„๋‹ˆ๋ผ ํ•˜๋‚˜์˜ ์ปจํŠธ๋กค ์˜์—ญ์œผ๋กœ ๋ฌถ์œผ๋ฉด์„œ
    UI ์ „์ฒด ๊ตฌ์กฐ๊ฐ€ ํ›จ์”ฌ ์•ˆ์ •์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์ •๋ฆฌ๋˜์—ˆ๋‹ค.
profile
๊ฐœ๋ฐœํ•ฉ์‹œ๋‹ค!

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