์ด์ ๊น์ง๋
์ปค์ UI / ๋๋๊ทธ ์ ํ / ์
๋ ฅ ์ขํ๊ณ / ํ๋ฉด ํํ ๊ธฐ์ค
์ ์ ๋ฆฌํ๋ฉด์
์
๋ ฅ โ ํ๋ฉด ๋ฐ์
๊น์ง๋ ์์ ํ๋ ์ํ์๋ค.
์ค๋์ ๊ทธ ์์
์ ํ๋ ์ ๋ / ๊ฑด๋ฌผ์ ์ค์ ๋ฐ์ดํฐ
TopBar ์์ / ์ธ๊ตฌ ํ์
SelectionPanel ์์ธ ์ ๋ณด
๋ฅผ ๋ถ์ด๋ฉด์
๋ฐ์ํ๋ UI โ ์ค์ ๊ฒ์ ๋ฐ์ดํฐ์ ์ฐ๊ฒฐ๋ UI
๋จ๊ณ๋ก ๋์ด๊ฐ๋ ์์ ์ ์งํํ๋ค.
๊ตฌํ ๋ชฉํ๋ ๋ค์๊ณผ ๊ฐ์๋ค.
TopBar โ PlayerState ๊ธฐ์ค ์์ / ์ธ๊ตฌ / ์ ์ง๋น ํ์
SelectionPanel โ ์ ํ ๋์์ HP / ํ์
/ ์์ธ ์คํฏ ํ์
Selection ๊ตฌ์กฐ โ NetID ๊ธฐ๋ฐ ์ ํ ๋ฐ์ดํฐ์ UI ์ฐ๊ฒฐ
ํ์ง๋ง ๊ตฌํ ๊ณผ์ ์์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๊ณตํต์ ์
๋ฐ์ดํฐ๋ ์๋๋ฐ
โ UI์ ์ ๋ฌ๋๋ ๋ฐฉ์์ด ์ ๋ฆฌ๋์ง ์์๊ฑฐ๋
โ ๊ฐ์ ํจ๋์ ์ฌ๋ฌ ํ์
์ ๋ฐ์ดํฐ๋ฅผ ์น์ผ๋ฉด์ ๊ธฐ์ค์ด ์์ธ ์ํ
์ฆ
UI๊ฐ ๋ณด์ด๊ธฐ ์์ํ ์์ ๋ถํฐ๋ โ๋ฌด์์ ์ด๋ป๊ฒ ๋ณด์ฌ์ค์งโ์ ๋ํ ๊ตฌ์กฐ ์ ๋ฆฌ๊ฐ ํ์ํด์ง ์ํ์๋ค.
SelectionPanel ํ๋๋ก
๋จ์ผ ์ ๋
๋จ์ผ ๊ฑด๋ฌผ
๋ค์ค ์ ํ
์ ๋ชจ๋ ์ฒ๋ฆฌํ๊ณ ์์๋๋ฐ,
๊ฐ ์ํ๊ฐ ์๊ตฌํ๋ ์ ๋ณด๊ฐ ๋ฌ๋๋ค.
์๋ฅผ ๋ค๋ฉด
๋จ์ผ ์ ๋ โ HP + ์์ธ ์คํฏ
๋จ์ผ ๊ฑด๋ฌผ โ HP + ์์ฐ ์ํ
๋ค์ค ์ ํ โ ์์ฝ ๋ชฉ๋ก
์ฆ ๊ฐ์ ํจ๋์ด์ง๋ง ์ฌ์ค์
๋ณด์ฌ์ค์ผ ํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์๋ก ๋ค๋ฆ
์ด๋ผ๋ ๋ฌธ์ ๊ฐ ์์๋ค.
ํ์ฌ ๊ตฌ์กฐ์์
TopBar โ PlayerState ๊ธฐ๋ฐ
SelectionPanel โ UnitSubsystem / ์ ํ ์ํ ๊ธฐ๋ฐ
์ผ๋ก ๋ค์ด์ค๊ณ ์์๊ธฐ ๋๋ฌธ์,
๊ฒ๋ณด๊ธฐ์๋ ๋ ๋ค HUD์ง๋ง ์ค์ ๋ก๋ ์์ ํ ๋ค๋ฅธ ์์ค๋ฅผ ์ฌ์ฉํ๊ณ ์์๋ค.
๊ทธ ์์ฒด๋ ํ๋ฆฐ ๊ตฌ์กฐ๋ ์๋์์ง๋ง,
์ค๊ฐ์์ ViewModel์ ํต์ผํด์ฃผ์ง ์์ผ๋ฉด
UI ๊ฐฑ์ ํ์ด๋ฐ
ํ์ ๊ธฐ์ค
๋ฐ์ดํฐ ํด์ ๋ฐฉ์
์ด ์ฝ๊ฒ ์ด๊ธ๋ ์ ์๋ ์ํ์๋ค.
PlayerState ๊ฐ์ด ๋ฐ๋๋๋ผ๋
๊ฐ ๋ณ๊ฒฝ
โ Notify
โ PlayerController
โ UIBridge
โ Refresh
ํ๋ฆ์ด ๋๊น์ง ํ์ง ์์ผ๋ฉด
๊ฒฐ๊ตญ ํ๋ฉด์ ์ด์ ๊ฐ์ ๊ณ์ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ค.
์ฆ ๋ฌธ์ ๋ ๋จ์ํ ๊ฐ์ด ๋ฐ๋๋๋๊ฐ ์๋๋ผ
๊ฐ ๋ณ๊ฒฝ์ด UI ๊ฐฑ์ ๊น์ง ์ฐ๊ฒฐ๋๋๋
์๋ค.
์ฒ์์๋ ๊ฐ๋จํ๊ฒ
"ATK: %.0f"
"DEF: %.0f"
"AS: %.2f"
ํํ๋ก ๋ฐ๋ก ๋ฃ๊ณ ์์๋๋ฐ,
์ด ๋ฐฉ์์ ๋น ๋ฅด๊ฒ ๋ถ์ผ ์๋ ์์ด๋
ํฌ๋งท ์ค๋ณต
ํํ ๊ท์น ๋ถ์ฐ
์ ์ง๋ณด์ ์ด๋ ค์
๋ฌธ์ ๋ฅผ ๋ง๋ค๊ธฐ ์ฌ์ ๋ค.
ํนํ ์คํฏ ์ข
๋ฅ๊ฐ ๋์ด๋๊ฑฐ๋,
ํ๊ธฐ ๋ฐฉ์์ ํ ๋ฒ์ ๋ฐ๊พธ๊ณ ์ถ์ ๋ ๋ถ๋ฆฌํ ๊ตฌ์กฐ์๋ค.
์ ํ ์์ฒด๋ NetID ๊ธฐ๋ฐ์ผ๋ก ์กํ ์์์ง๋ง
UI๋ NetID๋ฅผ ์ง์ ๋ณด์ฌ์ฃผ๋ ๊ฒ ์๋๋ผ
์ด๋ฆ
ํ์
HP
์คํฏ
Portrait
๊ฐ์ โํ์์ฉ ์ ๋ณดโ๊ฐ ํ์ํ๋ค.
์ฆ ์ ํ ์์คํ ๊ณผ UI ์ฌ์ด์๋ ๋ฐ๋์
์ ํ ๋ฐ์ดํฐ โ ViewModel ๋ณํ
๋จ๊ณ๊ฐ ํ์ํ๊ณ ,
์ค๋ ์์
์ ํต์ฌ์ ๊ฒฐ๊ตญ ์ด ๋ณํ ๋ ์ด์ด๋ฅผ ์์ ํํ๋ ์ชฝ์ ๊ฐ๊น์ ๋ค.
ํ๋์ ํจ๋์ ์ ์งํ๋, ๋ด๋ถ์ ์ผ๋ก๋
None
Single
Multi
์ํ๋ฅผ ๋ถ๊ธฐํด์ ์ฒ๋ฆฌํ๊ณ ,
๋จ์ผ ์ ํ ์์์๋
Unit
Building
์ ๊ตฌ๋ถํ๋ ๋ฐฉํฅ์ผ๋ก ์ ๋ฆฌํ๋ค.
์ฆ ํจ๋์ ํ๋์ง๋ง ๋ด๋ถ ํํ์
๋จ์ผ ์ ๋์ฉ
๋จ์ผ ๊ฑด๋ฌผ์ฉ
๋ค์ค ์ ํ์ฉ
๊ด์ ์ผ๋ก ๋๋ ์ ๋ณด๊ฒ ๋๋ค.
HUD ์ ์ฒด๋ฅผ ํ ๋ฉ์ด๋ฆฌ๋ก ๋ณด์ง ์๊ณ
TopBar = PlayerState ๊ธฐ๋ฐ ์์น HUD
SelectionPanel = ํ์ฌ ์ ํ ๋์ ํ์ HUD
๋ก ์ญํ ์ ๋๋ด๋ค.
์ด๋ ๊ฒ ํ๋๊น ๋ฐ์ดํฐ ์ถ์ฒ๊ฐ ๋ค๋ฅด๋๋ผ๋
๊ฐ ํจ๋์ด โ๋ฌด์จ ์ ๋ณด๋ฅผ ์ฑ
์์ง๋์งโ๊ฐ ๋ช
ํํด์ก๋ค.
์์ / ์ธ๊ตฌ / ์ ์ง๋น ๊ด๋ จ ๊ฐ์ด ๋ฐ๋๋ฉด
PlayerState
โ NotifyUIResourceStateChanged()
โ PlayerController
โ UIBridge::RefreshResources()
โ TopBar ๊ฐฑ์
์ผ๋ก ์ด์ด์ง๋๋ก ์ ๋ฆฌํ๋ค.
์ฆ UI๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๊ณ์ฐํ์ง ์๊ณ ,
ํญ์ PlayerState๋ฅผ ํตํด ์ ๋ฌ๋ฐ๋ ๊ตฌ์กฐ๋ก ์ ์งํ๋ค.
๊ธฐ์กด์ฒ๋ผ ๊ฐ ์ค๋ง๋ค ์ง์ Printf ๋ฅผ ๋ฐ๋ณตํ์ง ์๊ณ ,
์ ์ํ ์คํฏ
์ค์ํ ์คํฏ
์ ๋๋ ๊ณตํต ํจ์๋ก ๋นผ๋ ๋ฐฉํฅ์ผ๋ก ์ ๋ฆฌํ๋ค.
์๋ฅผ ๋ค๋ฉด
FormatStatInt("ATK", Value)
FormatStatFloat("AS", Value)
์ฒ๋ผ ์ ๋ฆฌํด์
ํฌ๋งท ์ค๋ณต ์ ๊ฑฐ
ํ๊ธฐ ๋ฐฉ์ ํต์ผ
ํ์ฅ์ฑ ํ๋ณด
๋ฅผ ๊ฐ์ด ํด๊ฒฐํ๋ค.
UI๊ฐ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์ง์ ํด์ํ์ง ์๊ฒ ํ๊ณ ,
DisplayName
TypeLabel
HP
Damage
Armor
AttackSpeed
MoveSpeed
Range
๊ฐ์ ๊ฐ๋ง ViewModel์ ๋ด์ ์ ๋ฌํ๋ ๋ฐฉํฅ์ผ๋ก ๋ง์ท๋ค.
์ฆ UI๋ ์ด์
๋ฌด์์ ๋ณด์ฌ์ค์ง
๋ง ์๊ณ ,
๊ทธ ๊ฐ์ด ์ด๋์ ์๋์ง
๋ UIBridge / Provider ๋ ๋ฒจ์์ ์ฒ๋ฆฌํ๋ ๋ฐฉํฅ์ด ๋์๋ค.
๊ฒ์ ๋ฐ์ดํฐ
โ PlayerState / UnitSubsystem / Building
โ PlayerController
โ UIBridge
โ ViewModel
โ Widget
PlayerState ๊ฐ ๋ณ๊ฒฝ
โ NotifyUIResourceStateChanged
โ PlayerController
โ RefreshResources
โ TopBarWidget
์ ํ ์ํ ๋ณ๊ฒฝ
โ PlayerController
โ UIBridge::RefreshSelection
โ SelectionViewModel ์์ฑ
โ SelectionPanelWidget ๋ฐ์
None
Single(Unit)
Single(Building)
Multi
์ ๋ / ๊ฑด๋ฌผ / ๋ค์ค ์ ํ
์ ๊ฐ์ ์ ํ ํจ๋์ ์ฐ์ง๋ง
ํ์ํ ์ ๋ณด๋ ์๋ก ๋ฌ๋๋ค.
TopBar
SelectionPanel
์ด ์๋ก ๋ค๋ฅธ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋๋ฐ๋
๊ฒ์ผ๋ก๋ ํ HUD์ฒ๋ผ ๋ถ์ด ์์๊ธฐ ๋๋ฌธ์
๊ตฌ์กฐ๋ฅผ ๋ช
ํํ ๋๋๋ ์์
์ด ํ์ํ๋ค.
NetID, Fragment, PlayerState ๋ด๋ถ๊ฐ์
๊ฒ์ ์ชฝ ๋ฐ์ดํฐ์ด๊ณ ,
UI๋ ๊ทธ๊ฒ์ ๋ฐ๋ก ์ธ ์ ์์๋ค.
์ฆ ์ค๊ฐ ํด์ ๋ ์ด์ด๊ฐ ํ์์๋ค.
์ซ์๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฌธ์ ์ฒ๋ผ ๋ณด์์ง๋ง ์ค์ ๋ก๋
ํํ ๊ท์น์ ์ผ๊ด์ฑ
๋ฌธ์ ์๋ค.
๋ฐ์ดํฐ๊ฐ ์๋ค๊ณ ๋ฐ๋ก UI์ ์ฐ๊ฒฐํ๋ฉด ์ ๋๊ณ ,
์ด ํจ๋์ ๋ฌด์์ ์ฑ
์์ง๋๊ฐ
๋ถํฐ ์ ํด์ผ ํ๋ค.
TopBar โ SelectionPanel
๋ ๋ค HUD์ด์ง๋ง ์๋ณธ์ ๋ค๋ฅผ ์ ์๊ณ ,
๊ทธ๋์ ์ฐ๊ฒฐ ๊ณ์ธต๋ ๋ถ๋ฆฌ๋์ด์ผ ํ๋ค.
UI๋
ํ์๊ฐ
์ํ
๊ฐ์์ฑ
๋ง ์๋ฉด ๋๊ณ ,
์ค์ ๊ฒ์ ๋ฐ์ดํฐ ํด์์ ์ค๊ฐ ๋ ์ด์ด๊ฐ ๋งก์์ผ ํ๋ค.
์ด๋ค ๊ฐ์ ๋ฃ๊ณ ์ด๋ค ๊ฐ์ ๋ฃ์ง ์์์ง ์ ๋ฆฌํ๋ ์๊ฐ,
UI ๊ตฌ์กฐ๋ ๊ฐ์ด ์ ๋ฆฌ๋๋ค.
์์ ๋ฐ๋ณต์ฒ๋ผ ๋ณด์ฌ๋
์คํฏ UI์ฒ๋ผ ์ค์ด ๋์ด๋๋ ๊ตฌ์กฐ์์๋ ๊ธ๋ฐฉ ์ ์ง๋ณด์ ๋น์ฉ์ด ์ปค์ง๋ค.
์ค๋ ์์ ๋ ๊ฒ์ผ๋ก๋
TopBar ๊ฐ ํ์
SelectionPanel ๊ฐ ํ์
์์ง๋ง ์ค์ ๋ก๋
๋ฐ์ดํฐ ์ถ์ฒ
๊ฐฑ์ ํ์ด๋ฐ
ํํ ๋ชจ๋ ๋ถ๋ฆฌ
๋ฅผ ์ ๋ฆฌํ๋ ์์ ์ ๋ ๊ฐ๊น์ ๋ค.
์ค๋ ์์ ์ ๋จ์ํ UI์ ์ซ์๋ฅผ ๋์ฐ๋ ์์ ์ด ์๋๋ผ
PlayerState, Selection, ViewModel, Widget ์ฌ์ด์ ์ญํ ์ ์ ๋ฆฌํ๋ ๊ณผ์ ์ด์๋ค.