๐ TIL - ์ปค์/๋๋๊ทธ UI ์ขํ๊ณยท์ ๋ ฅยท๋ ๋๋ง ๋๋ฒ๊น
์ด์ ๊น์ง๋
UI ๊ตฌ์กฐ / ๋ฐ์ดํฐ ํ๋ฆ / Command ์ฒ๋ฆฌ
๋ฅผ ์ ๋ฆฌํ๋ฉด์
๋์ํ๋ UI โ ์ฐ๊ฒฐ๋ UI
๊น์ง ๋ง์ถ ์ํ์๋ค.
์ค๋์ ๊ทธ ์์
์ปค์ UI / ๋๋๊ทธ ์ ํ / ์
๋ ฅ ์ํ ํ์
๋ฅผ ์ถ๊ฐํ๋ฉด์,
ํ๋ ์ด์ด ์
๋ ฅ์ ์ง์ ์๊ฐ์ ์ผ๋ก ํผ๋๋ฐฑํ๋ ๋ ์ด์ด๋ฅผ ๋ถ์ด๋ ์์
์ ์งํํ๋ค.
๊ตฌํ ๋ชฉํ๋ ๋ค์๊ณผ ๊ฐ์๋ค.
์ปค์ โ ํ์ฌ ์
๋ ฅ ์ํ ํํ
๋๋๊ทธ โ ์ ํ ์์ญ ํ์
Command โ ์
๋ ฅ ์ํ (Move / Attack) ์๊ฐํ
ํ์ง๋ง ๊ตฌํ ๊ณผ์ ์์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๊ณตํต์ ์
์
๋ ฅ์ ์ ์์ธ๋ฐ
โ ํ๋ฉด ํํ์ด ์ด๊ธ๋ ์ํ
์ฆ
์ ๋ ฅ / ์ขํ / UI ๋ ๋๋ง ๊ธฐ์ค์ด ์๋ก ๋ค๋ฅด๊ฒ ๋์ํ๊ณ ์์๋ค
ํ์ฌ ์์คํ ์๋ ๋ ๊ฐ์ง ์ขํ๊ฐ ์กด์ฌํ๋ค.
Raw Mouse Position (Viewport ๊ธฐ์ค)
Scaled Mouse Position (DPI ๋ณด์ ๋ UMG ๊ธฐ์ค)
๋ฌธ์ :
๊ฒฐ๊ณผ:
์ปค์ ์์น โ ๋๋๊ทธ ์์/๋ ์์น
โ ๋๋๊ทธ ๋ฐ์ค๊ฐ ์ด๊ธ๋จ
์ ์ฒดํ๋ฉด์์๋ง ๋ฐ์ํ ๋ฌธ์ :
MousePosition (Scaled)
vs
ViewportSize (Raw)
๋น๊ต ๊ธฐ์ค์ด ๋ฌ๋ผ์
์ฆ์:
์์ธ:
์ปค์ ์์ ฏ์ด ์ข์๋จ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์น๋จ
์ฆ
๋ง์ฐ์ค ์์น = ์์ ฏ์ ์ข์๋จ
โ ์ฐ์ธก/ํ๋จ์์ ํ๋ฉด ๋ฐ์ผ๋ก ๋ฐ๋ฆผ
์ฃ์ง ์ํ ์ง์ ํ ๋ณต๊ท ์ ๋๋ ์ด์ :
์ง์
์กฐ๊ฑด == ํด์ ์กฐ๊ฑด
โ ๊ฒฝ๊ณ๊ฐ ๊ทผ์ฒ์์ ์ํ๊ฐ ๊ณ ์ฐฉ๋จ
์ฒ์ ๋ฐฉ์:
์ด๋ฏธ์ง ๊ธฐ๋ฐ Border (9-slice)
๋ฌธ์ :
์ฆ
UI ํ๋ ์ ์ด๋ฏธ์ง โ ๋๋๊ทธ ๋ฐ์ค ์ฉ๋
์ปค๋งจ๋ ํจ๋ ์์์:
์์ธ:
Button / Widget์ด Cursor๋ฅผ ์์ฒญ
โ ์ํํธ์จ์ด ์ปค์์ ์ถฉ๋
์ปค์ / ๋๋๊ทธ โ Scaled (DPI ์ขํ)
์ฃ์ง ์คํฌ๋กค โ Raw (Viewport ์ขํ)
GetMousePositionScaledByDPI() โ UI์ฉ
GetMousePosition() โ ์
๋ ฅ ํ์ ์ฉ
MousePosition (Raw)
vs
ViewportSize (Raw)
์ขํ๊ณ๋ฅผ ์์ ํ ๋์ผํ๊ฒ ๋ง์ถค
Position = MousePos - (CursorSize * 0.5f)
Clamp(0 ~ ViewportSize - CursorSize)
โ ํ๋ฉด ๋ฐ์ผ๋ก ๋๊ฐ์ง ์๊ฒ ์์
EnterMargin โ ExitMargin
์ง์
: 10px
๋ณต๊ท: 20px
โ ์ํ ๊ณ ์ฐฉ ๋ฐฉ์ง
์ด๋ฏธ์ง ๊ธฐ๋ฐ Border โ ํ๊ธฐ
์ ๊ตฌ์กฐ:
Canvas
โ Top Line
โ Bottom Line
โ Left Line
โ Right Line
Border 4๊ฐ๋ก ์ง์ ๋ฐ์ค ๊ตฌ์ฑ
โ stretch / ๋ฐ๋ณต ๋ฌธ์ ์์ ์ ๊ฑฐ
SlotButton Cursor = None
Not Hit-Testable
โ ๊ธฐ๋ณธ ์ปค์ ์ฌ๋ฑ์ฅ ์ ๊ฑฐ
DragStart = Scaled
Current = Scaled
โ ์ปค์์ ๋์ผ ๊ธฐ์ค ์ฌ์ฉ
Mouse Input
โ PlayerController
โ (Raw ์ขํ)
์ฃ์ง ์คํฌ๋กค
โ (Scaled ์ขํ)
CursorOverlay
DragOverlay
CursorOverlay
โ ํ์ฌ ์
๋ ฅ ์ํ ํ์
DragSelectionOverlay
โ ์ ํ ์์ญ ํ์
CommandPanel
โ ์คํ ๊ฐ๋ฅํ ๋ช
๋ น
PlayerController
โ ์
๋ ฅ ์ฒ๋ฆฌ / ์ขํ ๋ถ๋ฆฌ
PlayerUIBridge
โ UI ์ํ ์ ๋ฌ
CursorOverlay
โ ์ปค์ ํ์
DragOverlay
โ ๋๋๊ทธ ํ์
๊ฐ์ฅ ํฐ ์์ธ
Raw vs Scaled ํผ์ฉ
์
๋ ฅ ํ์
โ
UI ํํ
์ก์ ํ๋ ์ โ ๋๋๊ทธ ๋ฐ์ค
โ stretch ๊ตฌ์กฐ์ ์ถฉ๋
Widget Cursor ๊ธฐ๋ณธ๊ฐ ์กด์ฌ
Enter == Exit
Raw = ์
๋ ฅ ํ์
Scaled = UI ํํ
์ด๋ฏธ์ง๋ก ํด๊ฒฐ โ ์คํจ
๊ตฌ์กฐ๋ก ํด๊ฒฐ โ ์์
๋ณต์กํ ํ๋ ์๋ณด๋ค
๋ผ์ธ 4๊ฐ ๊ตฌ์กฐ
๊ฐ ๊ฐ์ฅ ์์ ์ ์ด๋ค.
๊ฒฝ๊ณ ๊ธฐ๋ฐ ์์คํ ์ ํญ์
์ง์
/ ๋ณต๊ท ๋ถ๋ฆฌ
๊ฐ ํ์ํ๋ค.
Cursor
HitTest
Visibility
์ด ์ธ ๊ฐ์ง๊ฐ ์๋์น ์์ ๋์์ ๋ง๋ ๋ค.
Cursor
Drag
HUD
World UI
๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํด์ผ ํ๋ค.
์ค๋ ๋ฌธ์ ๋ ๋จ์ํ UI ๊ตฌํ ๋ฌธ์ ๊ฐ ์๋๋ผ
์ ๋ ฅ ์ขํ๊ณ, UI ๋ ๋๋ง, UMG ๊ธฐ๋ณธ ๋์์ด ์๋ก ๋ค๋ฅธ ๊ธฐ์ค์ผ๋ก ๋์ํ๋ฉด์ ๋ฐ์ํ ๋ฌธ์ ์๋ค.
์ด๋ฅผ ํด๊ฒฐํ๋ฉด์ โ์ ๋ ฅ์ Raw, UI๋ Scaledโ๋ผ๋ ๊ธฐ์ค๊ณผ
โ์ด๋ฏธ์ง๊ฐ ์๋ ๊ตฌ์กฐ๋ก UI๋ฅผ ๋ง๋ ๋คโ๋ ์์น์ ์ ๋ฆฌํ ์ ์์๋ค.