๐Ÿ“˜ TIL-Selection/Resource UI ๋ฐ์ดํ„ฐ ์—ฐ๋™๊ณผ ํ‘œ์‹œ ๊ตฌ์กฐ ์ •๋ฆฌ

HappyCircleยท2026๋…„ 4์›” 15์ผ

Unreal ๊ฐœ๋ฐœ

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

๋ฌธ์ œ ์ƒํ™ฉ

์–ด์ œ๊นŒ์ง€๋Š”

์ปค์„œ UI / ๋“œ๋ž˜๊ทธ ์„ ํƒ / ์ž…๋ ฅ ์ขŒํ‘œ๊ณ„ / ํ™”๋ฉด ํ‘œํ˜„ ๊ธฐ์ค€

์„ ์ •๋ฆฌํ•˜๋ฉด์„œ

์ž…๋ ฅ โ†’ ํ™”๋ฉด ๋ฐ˜์‘

๊นŒ์ง€๋Š” ์•ˆ์ •ํ™”๋œ ์ƒํƒœ์˜€๋‹ค.


์˜ค๋Š˜์€ ๊ทธ ์œ„์—

์„ ํƒ๋œ ์œ ๋‹› / ๊ฑด๋ฌผ์˜ ์‹ค์ œ ๋ฐ์ดํ„ฐ
TopBar ์ž์› / ์ธ๊ตฌ ํ‘œ์‹œ
SelectionPanel ์ƒ์„ธ ์ •๋ณด

๋ฅผ ๋ถ™์ด๋ฉด์„œ

๋ฐ˜์‘ํ•˜๋Š” UI โ†’ ์‹ค์ œ ๊ฒŒ์ž„ ๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ฒฐ๋œ UI

๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋‹ค.


๊ตฌํ˜„ ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค.

TopBar โ†’ PlayerState ๊ธฐ์ค€ ์ž์› / ์ธ๊ตฌ / ์œ ์ง€๋น„ ํ‘œ์‹œ
SelectionPanel โ†’ ์„ ํƒ ๋Œ€์ƒ์˜ HP / ํƒ€์ž… / ์ƒ์„ธ ์Šคํƒฏ ํ‘œ์‹œ
Selection ๊ตฌ์กฐ โ†’ NetID ๊ธฐ๋ฐ˜ ์„ ํƒ ๋ฐ์ดํ„ฐ์™€ UI ์—ฐ๊ฒฐ

ํ•˜์ง€๋งŒ ๊ตฌํ˜„ ๊ณผ์ •์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.


๋ฐœ์ƒ ์ฆ์ƒ

  • SelectionPanel์€ ๋œจ๋Š”๋ฐ ์‹ค์ œ ์„ ํƒ ๋Œ€์ƒ ์ •๋ณด๊ฐ€ ๋ถˆ์™„์ „ํ•จ
  • ๋‹จ์ผ ์„ ํƒ / ๋‹ค์ค‘ ์„ ํƒ ์ „ํ™˜ ์‹œ UI ์ƒํƒœ๊ฐ€ ์–ด๊ธ‹๋‚จ
  • ๊ฑด๋ฌผ๊ณผ ์œ ๋‹›์ด ๊ฐ™์€ ํŒจ๋„์„ ์“ฐ๋Š”๋ฐ ํ‘œ์‹œ ๊ธฐ์ค€์ด ์„ž์ž„
  • TopBar๋Š” ๋ณด์ด์ง€๋งŒ ์‹ค์ œ ๋ฐ์ดํ„ฐ์™€ ์—ฐ๋™์ด ๋ถˆ์•ˆ์ •ํ•จ
  • PlayerState ๊ฐ’์ด ๋ฐ”๋€Œ์–ด๋„ UI๊ฐ€ ์ฆ‰์‹œ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ๊ตฌ๊ฐ„์ด ์กด์žฌํ•จ
  • ์Šคํƒฏ ํ‘œ์‹œ ํฌ๋งท์ด ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ๋ฐ˜๋ณต ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์ง

๊ณตํ†ต์ ์€

๋ฐ์ดํ„ฐ๋Š” ์žˆ๋Š”๋ฐ
โ†’ UI์— ์ „๋‹ฌ๋˜๋Š” ๋ฐฉ์‹์ด ์ •๋ฆฌ๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜
โ†’ ๊ฐ™์€ ํŒจ๋„์— ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์–น์œผ๋ฉด์„œ ๊ธฐ์ค€์ด ์„ž์ธ ์ƒํƒœ

์ฆ‰

UI๊ฐ€ ๋ณด์ด๊ธฐ ์‹œ์ž‘ํ•œ ์‹œ์ ๋ถ€ํ„ฐ๋Š” โ€œ๋ฌด์—‡์„ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์ค„์ง€โ€์— ๋Œ€ํ•œ ๊ตฌ์กฐ ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•ด์ง„ ์ƒํƒœ์˜€๋‹ค.


๋ถ„์„


1. SelectionPanel์ด ํ‘œํ˜„ ๋Œ€์ƒ๋ณ„๋กœ ์„ฑ๊ฒฉ์ด ๋‹ฌ๋ž๋‹ค

SelectionPanel ํ•˜๋‚˜๋กœ

๋‹จ์ผ ์œ ๋‹›
๋‹จ์ผ ๊ฑด๋ฌผ
๋‹ค์ค‘ ์„ ํƒ

์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ,
๊ฐ ์ƒํƒœ๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ •๋ณด๊ฐ€ ๋‹ฌ๋ž๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด

๋‹จ์ผ ์œ ๋‹› โ†’ HP + ์ƒ์„ธ ์Šคํƒฏ
๋‹จ์ผ ๊ฑด๋ฌผ โ†’ HP + ์ƒ์‚ฐ ์ƒํƒœ
๋‹ค์ค‘ ์„ ํƒ โ†’ ์š”์•ฝ ๋ชฉ๋ก

์ฆ‰ ๊ฐ™์€ ํŒจ๋„์ด์ง€๋งŒ ์‚ฌ์‹ค์ƒ

๋ณด์—ฌ์ค˜์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฆ„

์ด๋ผ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.


2. Selection ๋ฐ์ดํ„ฐ์™€ TopBar ๋ฐ์ดํ„ฐ์˜ ์ถœ์ฒ˜๊ฐ€ ๋‹ฌ๋ž๋‹ค

ํ˜„์žฌ ๊ตฌ์กฐ์—์„œ

TopBar โ†’ PlayerState ๊ธฐ๋ฐ˜
SelectionPanel โ†’ UnitSubsystem / ์„ ํƒ ์ƒํƒœ ๊ธฐ๋ฐ˜

์œผ๋กœ ๋“ค์–ด์˜ค๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—,
๊ฒ‰๋ณด๊ธฐ์—๋Š” ๋‘˜ ๋‹ค HUD์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

๊ทธ ์ž์ฒด๋Š” ํ‹€๋ฆฐ ๊ตฌ์กฐ๋Š” ์•„๋‹ˆ์—ˆ์ง€๋งŒ,
์ค‘๊ฐ„์—์„œ ViewModel์„ ํ†ต์ผํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด

UI ๊ฐฑ์‹  ํƒ€์ด๋ฐ
ํ‘œ์‹œ ๊ธฐ์ค€
๋ฐ์ดํ„ฐ ํ•ด์„ ๋ฐฉ์‹

์ด ์‰ฝ๊ฒŒ ์–ด๊ธ‹๋‚  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์˜€๋‹ค.


3. UI ๊ฐฑ์‹ ์€ โ€œ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝโ€๊ณผ โ€œํ‘œ์‹œ ๊ฐฑ์‹ โ€์ด ๋™์‹œ์— ๋งž์•„์•ผ ํ–ˆ๋‹ค

PlayerState ๊ฐ’์ด ๋ฐ”๋€Œ๋”๋ผ๋„

๊ฐ’ ๋ณ€๊ฒฝ
โ†’ Notify
โ†’ PlayerController
โ†’ UIBridge
โ†’ Refresh

ํ๋ฆ„์ด ๋๊นŒ์ง€ ํƒ€์ง€ ์•Š์œผ๋ฉด
๊ฒฐ๊ตญ ํ™”๋ฉด์€ ์ด์ „ ๊ฐ’์„ ๊ณ„์† ๋ณด์—ฌ์ฃผ๊ฒŒ ๋œ๋‹ค.

์ฆ‰ ๋ฌธ์ œ๋Š” ๋‹จ์ˆœํžˆ ๊ฐ’์ด ๋ฐ”๋€Œ๋А๋ƒ๊ฐ€ ์•„๋‹ˆ๋ผ

๊ฐ’ ๋ณ€๊ฒฝ์ด UI ๊ฐฑ์‹ ๊นŒ์ง€ ์—ฐ๊ฒฐ๋˜๋А๋ƒ

์˜€๋‹ค.


4. SelectionPanel ์Šคํƒฏ ํฌ๋งท์€ ์ ์  ํ•˜๋“œ์ฝ”๋”ฉ์ด ๋Š˜์–ด๋‚˜๋Š” ๊ตฌ์กฐ์˜€๋‹ค

์ฒ˜์Œ์—๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ

"ATK: %.0f"
"DEF: %.0f"
"AS: %.2f"

ํ˜•ํƒœ๋กœ ๋ฐ”๋กœ ๋„ฃ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ,
์ด ๋ฐฉ์‹์€ ๋น ๋ฅด๊ฒŒ ๋ถ™์ผ ์ˆ˜๋Š” ์žˆ์–ด๋„

ํฌ๋งท ์ค‘๋ณต
ํ‘œํ˜„ ๊ทœ์น™ ๋ถ„์‚ฐ
์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€

๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์‰ฌ์› ๋‹ค.

ํŠนํžˆ ์Šคํƒฏ ์ข…๋ฅ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ฑฐ๋‚˜,
ํ‘œ๊ธฐ ๋ฐฉ์‹์„ ํ•œ ๋ฒˆ์— ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ ๋ถˆ๋ฆฌํ•œ ๊ตฌ์กฐ์˜€๋‹ค.


5. NetID ๊ธฐ๋ฐ˜ ์„ ํƒ ๊ตฌ์กฐ๋Š” ๋งž์ง€๋งŒ, UI์— ๋ฐ”๋กœ ์“ฐ๊ธฐ์—๋Š” ํ•ด์„ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค

์„ ํƒ ์ž์ฒด๋Š” NetID ๊ธฐ๋ฐ˜์œผ๋กœ ์žกํ˜€ ์žˆ์—ˆ์ง€๋งŒ
UI๋Š” NetID๋ฅผ ์ง์ ‘ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ

์ด๋ฆ„
ํƒ€์ž…
HP
์Šคํƒฏ
Portrait

๊ฐ™์€ โ€œํ‘œ์‹œ์šฉ ์ •๋ณดโ€๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.

์ฆ‰ ์„ ํƒ ์‹œ์Šคํ…œ๊ณผ UI ์‚ฌ์ด์—๋Š” ๋ฐ˜๋“œ์‹œ

์„ ํƒ ๋ฐ์ดํ„ฐ โ†’ ViewModel ๋ณ€ํ™˜

๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ–ˆ๊ณ ,
์˜ค๋Š˜ ์ž‘์—…์˜ ํ•ต์‹ฌ์€ ๊ฒฐ๊ตญ ์ด ๋ณ€ํ™˜ ๋ ˆ์ด์–ด๋ฅผ ์•ˆ์ •ํ™”ํ•˜๋Š” ์ชฝ์— ๊ฐ€๊นŒ์› ๋‹ค.


ํ•ด๊ฒฐ


1. SelectionPanel์˜ ํ‘œ์‹œ ๋ชจ๋“œ๋ฅผ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ–ˆ๋‹ค

ํ•˜๋‚˜์˜ ํŒจ๋„์„ ์œ ์ง€ํ•˜๋˜, ๋‚ด๋ถ€์ ์œผ๋กœ๋Š”

None
Single
Multi

์ƒํƒœ๋ฅผ ๋ถ„๊ธฐํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๊ณ ,
๋‹จ์ผ ์„ ํƒ ์•ˆ์—์„œ๋„

Unit
Building

์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ •๋ฆฌํ–ˆ๋‹ค.

์ฆ‰ ํŒจ๋„์€ ํ•˜๋‚˜์ง€๋งŒ ๋‚ด๋ถ€ ํ‘œํ˜„์€

๋‹จ์ผ ์œ ๋‹›์šฉ
๋‹จ์ผ ๊ฑด๋ฌผ์šฉ
๋‹ค์ค‘ ์„ ํƒ์šฉ

๊ด€์ ์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋ณด๊ฒŒ ๋๋‹ค.


2. TopBar๋Š” PlayerState ๊ธฐ์ค€, SelectionPanel์€ ์„ ํƒ ๋ฐ์ดํ„ฐ ๊ธฐ์ค€์œผ๋กœ ์—ญํ• ์„ ๊ณ ์ •ํ–ˆ๋‹ค

HUD ์ „์ฒด๋ฅผ ํ•œ ๋ฉ์–ด๋ฆฌ๋กœ ๋ณด์ง€ ์•Š๊ณ 

TopBar = PlayerState ๊ธฐ๋ฐ˜ ์ˆ˜์น˜ HUD
SelectionPanel = ํ˜„์žฌ ์„ ํƒ ๋Œ€์ƒ ํ‘œ์‹œ HUD

๋กœ ์—ญํ• ์„ ๋‚˜๋ˆด๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋‹ˆ๊นŒ ๋ฐ์ดํ„ฐ ์ถœ์ฒ˜๊ฐ€ ๋‹ค๋ฅด๋”๋ผ๋„
๊ฐ ํŒจ๋„์ด โ€œ๋ฌด์Šจ ์ •๋ณด๋ฅผ ์ฑ…์ž„์ง€๋Š”์ง€โ€๊ฐ€ ๋ช…ํ™•ํ•ด์กŒ๋‹ค.


3. PlayerState โ†’ UI ๊ฐฑ์‹  ํ๋ฆ„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์—ฐ๊ฒฐํ–ˆ๋‹ค

์ž์› / ์ธ๊ตฌ / ์œ ์ง€๋น„ ๊ด€๋ จ ๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด

PlayerState
โ†’ NotifyUIResourceStateChanged()
โ†’ PlayerController
โ†’ UIBridge::RefreshResources()
โ†’ TopBar ๊ฐฑ์‹ 

์œผ๋กœ ์ด์–ด์ง€๋„๋ก ์ •๋ฆฌํ–ˆ๋‹ค.

์ฆ‰ UI๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ ,
ํ•ญ์ƒ PlayerState๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋ฐ›๋Š” ๊ตฌ์กฐ๋กœ ์œ ์ง€ํ–ˆ๋‹ค.


4. SelectionPanel ์Šคํƒฏ ํ‘œ์‹œ๋Š” ๊ณตํ†ต ํฌ๋งท ํ•จ์ˆ˜๋กœ ์ •๋ฆฌํ–ˆ๋‹ค

๊ธฐ์กด์ฒ˜๋Ÿผ ๊ฐ ์ค„๋งˆ๋‹ค ์ง์ ‘ Printf ๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ณ ,

์ •์ˆ˜ํ˜• ์Šคํƒฏ
์‹ค์ˆ˜ํ˜• ์Šคํƒฏ

์„ ๋‚˜๋ˆ  ๊ณตํ†ต ํ•จ์ˆ˜๋กœ ๋นผ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ •๋ฆฌํ–ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด

FormatStatInt("ATK", Value)
FormatStatFloat("AS", Value)

์ฒ˜๋Ÿผ ์ •๋ฆฌํ•ด์„œ

ํฌ๋งท ์ค‘๋ณต ์ œ๊ฑฐ
ํ‘œ๊ธฐ ๋ฐฉ์‹ ํ†ต์ผ
ํ™•์žฅ์„ฑ ํ™•๋ณด

๋ฅผ ๊ฐ™์ด ํ•ด๊ฒฐํ–ˆ๋‹ค.


5. ViewModel ์ค‘์‹ฌ์œผ๋กœ โ€œUI๊ฐ€ ์•Œ์•„์•ผ ํ•  ๊ฐ’๋งŒโ€ ๋„˜๊ธฐ๋„๋ก ์ •๋ฆฌํ–ˆ๋‹ค

UI๊ฐ€ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ง์ ‘ ํ•ด์„ํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๊ณ ,

DisplayName
TypeLabel
HP
Damage
Armor
AttackSpeed
MoveSpeed
Range

๊ฐ™์€ ๊ฐ’๋งŒ ViewModel์— ๋‹ด์•„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋งž์ท„๋‹ค.

์ฆ‰ UI๋Š” ์ด์ œ

๋ฌด์—‡์„ ๋ณด์—ฌ์ค„์ง€

๋งŒ ์•Œ๊ณ ,

๊ทธ ๊ฐ’์ด ์–ด๋””์„œ ์™”๋Š”์ง€

๋Š” UIBridge / Provider ๋ ˆ๋ฒจ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉํ–ฅ์ด ๋˜์—ˆ๋‹ค.


๊ตฌ์กฐ ์ •๋ฆฌ


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

๊ฒŒ์ž„ ๋ฐ์ดํ„ฐ
โ†’ PlayerState / UnitSubsystem / Building

โ†’ PlayerController

โ†’ UIBridge

โ†’ ViewModel

โ†’ Widget

TopBar ํ๋ฆ„

PlayerState ๊ฐ’ ๋ณ€๊ฒฝ
โ†’ NotifyUIResourceStateChanged
โ†’ PlayerController
โ†’ RefreshResources
โ†’ TopBarWidget

SelectionPanel ํ๋ฆ„

์„ ํƒ ์ƒํƒœ ๋ณ€๊ฒฝ
โ†’ PlayerController
โ†’ UIBridge::RefreshSelection
โ†’ SelectionViewModel ์ƒ์„ฑ
โ†’ SelectionPanelWidget ๋ฐ˜์˜

SelectionPanel ๋‚ด๋ถ€ ๋ชจ๋“œ

None
Single(Unit)
Single(Building)
Multi

๋ฐœ์ƒ ์›์ธ ์ •๋ฆฌ


1. ํ•˜๋‚˜์˜ ํŒจ๋„์— ์—ฌ๋Ÿฌ ์„ฑ๊ฒฉ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์–น๊ณ  ์žˆ์—ˆ๋‹ค

์œ ๋‹› / ๊ฑด๋ฌผ / ๋‹ค์ค‘ ์„ ํƒ

์€ ๊ฐ™์€ ์„ ํƒ ํŒจ๋„์„ ์“ฐ์ง€๋งŒ
ํ•„์š”ํ•œ ์ •๋ณด๋Š” ์„œ๋กœ ๋‹ฌ๋ž๋‹ค.


2. HUD ์ „์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์œผ๋กœ ๋ณด๊ธฐ ์–ด๋ ค์› ๋‹ค

TopBar
SelectionPanel

์ด ์„œ๋กœ ๋‹ค๋ฅธ ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š”๋ฐ๋„
๊ฒ‰์œผ๋กœ๋Š” ํ•œ HUD์ฒ˜๋Ÿผ ๋ถ™์–ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—
๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํžˆ ๋‚˜๋ˆ„๋Š” ์ž‘์—…์ด ํ•„์š”ํ–ˆ๋‹ค.


3. UI๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ โ€œํ•ด์„๋œ ํ‘œ์‹œ๊ฐ’โ€์„ ๋ฐ›์•„์•ผ ํ–ˆ๋‹ค

NetID, Fragment, PlayerState ๋‚ด๋ถ€๊ฐ’์€
๊ฒŒ์ž„ ์ชฝ ๋ฐ์ดํ„ฐ์ด๊ณ ,

UI๋Š” ๊ทธ๊ฒƒ์„ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์—†์—ˆ๋‹ค.

์ฆ‰ ์ค‘๊ฐ„ ํ•ด์„ ๋ ˆ์ด์–ด๊ฐ€ ํ•„์ˆ˜์˜€๋‹ค.


4. ํฌ๋งท/๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ๋„ ๊ตฌ์กฐ์˜ ์ผ๋ถ€์˜€๋‹ค

์ˆซ์ž๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์˜€์ง€๋งŒ ์‹ค์ œ๋กœ๋Š”

ํ‘œํ˜„ ๊ทœ์น™์˜ ์ผ๊ด€์„ฑ

๋ฌธ์ œ์˜€๋‹ค.


๋ฐฐ์šด ์ 


1. UI ์—ฐ๊ฒฐ ๋‹จ๊ณ„๋ถ€ํ„ฐ๋Š” โ€œ๋ฌด์—‡์„ ๋ณด์—ฌ์ค„์ง€โ€๋ฅผ ๋จผ์ € ์ •ํ•ด์•ผ ํ•œ๋‹ค

๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋ฐ”๋กœ UI์— ์—ฐ๊ฒฐํ•˜๋ฉด ์•ˆ ๋˜๊ณ ,

์ด ํŒจ๋„์€ ๋ฌด์—‡์„ ์ฑ…์ž„์ง€๋Š”๊ฐ€

๋ถ€ํ„ฐ ์ •ํ•ด์•ผ ํ•œ๋‹ค.


2. ๊ฐ™์€ HUD๋ผ๋„ ๋ฐ์ดํ„ฐ ์ถœ์ฒ˜๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค

TopBar โ‰  SelectionPanel

๋‘˜ ๋‹ค HUD์ด์ง€๋งŒ ์›๋ณธ์€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ณ ,
๊ทธ๋ž˜์„œ ์—ฐ๊ฒฐ ๊ณ„์ธต๋„ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค.


3. UI๋Š” ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์•Œ๋ฉด ์•ˆ ๋œ๋‹ค

UI๋Š”

ํ‘œ์‹œ๊ฐ’
์ƒํƒœ
๊ฐ€์‹œ์„ฑ

๋งŒ ์•Œ๋ฉด ๋˜๊ณ ,
์‹ค์ œ ๊ฒŒ์ž„ ๋ฐ์ดํ„ฐ ํ•ด์„์€ ์ค‘๊ฐ„ ๋ ˆ์ด์–ด๊ฐ€ ๋งก์•„์•ผ ํ•œ๋‹ค.


4. ViewModel์€ ๋‹จ์ˆœ ์ „๋‹ฌ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ โ€œํ‘œ์‹œ ๊ทœ์น™์˜ ๊ธฐ์ค€์ โ€์ด๋‹ค

์–ด๋–ค ๊ฐ’์„ ๋„ฃ๊ณ  ์–ด๋–ค ๊ฐ’์„ ๋„ฃ์ง€ ์•Š์„์ง€ ์ •๋ฆฌํ•˜๋Š” ์ˆœ๊ฐ„,
UI ๊ตฌ์กฐ๋„ ๊ฐ™์ด ์ •๋ฆฌ๋œ๋‹ค.


5. ๋ฐ˜๋ณต๋˜๋Š” ํฌ๋งท์€ ์ดˆ๋ฐ˜์—๋ผ๋„ ์ •๋ฆฌํ•ด๋‘๋Š” ๊ฒŒ ์ข‹๋‹ค

์ž‘์€ ๋ฐ˜๋ณต์ฒ˜๋Ÿผ ๋ณด์—ฌ๋„
์Šคํƒฏ UI์ฒ˜๋Ÿผ ์ค„์ด ๋Š˜์–ด๋‚˜๋Š” ๊ตฌ์กฐ์—์„œ๋Š” ๊ธˆ๋ฐฉ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์ด ์ปค์ง„๋‹ค.


6. UI ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์—ฌ๋„ ์‹ค์ œ๋กœ๋Š” ๊ตฌ์กฐ ๋ฌธ์ œ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค

์˜ค๋Š˜ ์ž‘์—…๋„ ๊ฒ‰์œผ๋กœ๋Š”

TopBar ๊ฐ’ ํ‘œ์‹œ
SelectionPanel ๊ฐ’ ํ‘œ์‹œ

์˜€์ง€๋งŒ ์‹ค์ œ๋กœ๋Š”

๋ฐ์ดํ„ฐ ์ถœ์ฒ˜
๊ฐฑ์‹  ํƒ€์ด๋ฐ
ํ‘œํ˜„ ๋ชจ๋“œ ๋ถ„๋ฆฌ

๋ฅผ ์ •๋ฆฌํ•˜๋Š” ์ž‘์—…์— ๋” ๊ฐ€๊นŒ์› ๋‹ค.


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

์˜ค๋Š˜ ์ž‘์—…์€ ๋‹จ์ˆœํžˆ UI์— ์ˆซ์ž๋ฅผ ๋„์šฐ๋Š” ์ž‘์—…์ด ์•„๋‹ˆ๋ผ
PlayerState, Selection, ViewModel, Widget ์‚ฌ์ด์˜ ์—ญํ• ์„ ์ •๋ฆฌํ•˜๋Š” ๊ณผ์ •์ด์—ˆ๋‹ค.

profile
๊ฐœ๋ฐœํ•ฉ์‹œ๋‹ค!

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