๐ TIL - ๋ชจ๋ฅ๋ถ ์ํธ์์ฉ ๊ด๋ จ UI ๋๋ฒ๊น , ๋ฆฌํฉํ ๋ง
์ค๋์ ์ด์ ๊ตฌํํ ๋ชจ๋ฅ๋ถ ์ ์ยท์ ์ฅ ์์คํ ์ UI๊ฐ ์ค์ ๋ก ์๋๋๋ก ๋์ํ๋์ง ํ์ธํ๋ฉด์ ์์ํ๋ค.
๊ธฐ๋ฅ์ด "์ฝ๋์ ์ฐ๊ฒฐ"์ ๋์ด ์์ง๋ง "์ค์ ๋ก ๋๋ฆฌ์ง ์๋" ์ํ์๋ค. ์ ์ ํญ์์ ๋ ์ํผ๋ฅผ ํด๋ฆญํด๋ ์๋ฌด ๋ฐ์์ด ์์๊ณ , ์๋๋งต์ ํด์๋์ ๋ฐ๋ผ ๋ ๋๋ง ์์ญ์ด ๋ฌ๋๋ค. ์๋ํ์ง ์๋ ์์ธ์ ์ฐพ๋ ๊ฒ, ์คํ์ผ์ ํต์ผํ๋ ๊ฒ, ํ๋์ฝ๋ฉ์ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ค๋์ ํ๋ฆ์ด์๋ค.
์ ์ ํญ์์ ๋ ์ํผ ์ํธ๋ฆฌ๋ฅผ ํด๋ฆญํด๋ ์๊ฐ์ ๋ฐ์์ด ์๊ณ , ์ ํ ์ํ๋ ๊ธฐ๋ก๋์ง ์๋ ๋ฌธ์ ๋ฅผ ์ถ์ ํ๋ค.
์์ธ์ ๋ ๊ฐ์ง์๋ค. ํ๋๋ Arrow ์์ ฏ์ ์์น์๋ค. left: -20 ์คํ์
์ผ๋ก ์์ ฏ ๊ฒฝ๊ณ ๋ฐ์ ๋ฐฐ์น๋์ด ์์ด ScrollBox๊ฐ ํด๋ฆฌํํด๋ฒ๋ ธ๋ค. ์ ํ ํ์ ์์ฒด๊ฐ ๋ ๋๋ง๋์ง ์์ผ๋ ๋ฐ์์ด ์๋ ๊ฒ์ฒ๋ผ ๋ณด์๋ค.
๋ ํ๋๋ Arrow์ visibility ์ค์ ์ด์๋ค. Visible๋ก ์ค์ ๋์ด ์์ด ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ํก์ํ๊ณ ์์๋ค.
Arrow ์์น: left -20 โ left 4 (๊ฒฝ๊ณ ์์ผ๋ก)
Arrow visibility: Visible โ HitTestInvisible (ํด๋ฆญ ํก์ ์ ๊ฑฐ)
๋ ๋ฒ์งธ ๋ฌธ์ ๋ SetSelectedRecipe์ ์ธ๋ฑ์ค ๋น๊ต ์ค๋ฅ์๋ค. ScrollBox ์์ ์๋ฒ(Array Index)์ผ๋ก ๋น๊ตํ๊ณ ์์๋๋ฐ, ํํฐ๊ฐ ์ ์ฉ๋ ๊ฒฝ์ฐ DataTable ํ ๋ฒํธ์ ์์ ์๋ฒ์ด ๋ฌ๋ผ ์๋ฑํ ์ํธ๋ฆฌ๊ฐ ์ ํ๋๋ค. WBP_RecipeEntry์ GetRecipeIndex() ์์ ํจ์๋ฅผ ์ถ๊ฐํ๊ณ , ๋น๊ต ๊ธฐ์ค์ ์ํธ๋ฆฌ๊ฐ ์ง์ ๋ค๊ณ ์๋ RecipeIndex๋ก ๊ต์ฒดํด ํํฐ ์ฌ๋ถ์ ๋ฌด๊ดํ๊ฒ ์ ํํ ๋์ํ๋๋ก ์์ ํ๋ค.
์ ํํ ๋ ์ํผ๊ฐ CurrentRecipeId์ ์ ๋๋ก ๊ธฐ๋ก๋์ง ์๋ ๋ฌธ์ ๋ ์ฐ๊ณํด ์์ ํ๋ค. SetSelectedRecipe๊ฐ ์ผ์นํ๋ ์ํธ๋ฆฌ๋ฅผ ์ฐพ์ผ๋ฉด ๊ทธ ์ํธ๋ฆฌ์ RecipeId๋ฅผ ์ฝ์ด BonfireMenu.CurrentRecipeId์ ์ฆ์ ๋๊ธฐํํ๋๋ก ํ๋ค.
๋ ์ํผ ๋ชฉ๋ก์ ์ธํ์ ์ ์ฅ ์ฌ๋กฏ ์ํธ๋ฆฌ(WBP_SaveSlotEntry)์ ๋์ผํ๊ฒ ํต์ผํ๋ค.
WBP_SaveSlotEntry์ ๊ตฌ์กฐ๋ ๋ฒํผ ์์ FRA_Frame_1(FantasyWarrior ํ๋ ์ ์์ ฏ) ๋ฐฐ๊ฒฝ๋ง ๋๊ณ , ํ
์คํธ ์ฝํ
์ธ ๋ ๋ฒํผ ๋ฐ๊นฅ์ ์ค๋ฒ๋ ์ด๋ก ๋ถ๋ฆฌํ๋ ํจํด์ด์๋ค. ๊ธฐ์กด WBP_RecipeEntry๋ ํ
์คํธ๊ฐ ๋ฒํผ ๋ด๋ถ์ ์์๋ค.
์ฌ๊ตฌ์ฑ ํ ๋ฃจํธ ์์ ฏ๋ CanvasPanel์์ SizeBox๋ก ๊ต์ฒด๋๋๋ฐ, ์ฌ๊ธฐ์ ์๋ก์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. SizeBox๋ ๋ด๋ถ ์ฝํ
์ธ ์ Desired Size๊ฐ ์์ผ๋ฉด ScrollBox์์ ๋์ด๊ฐ 0์ผ๋ก ๊ณ์ฐ๋๋ค. ์คํธ๋ ์น ์ต์ปค๋ก ์ฑ์ด CanvasPanel ๋ด๋ถ์์๋ ์ด๋ค ์์๋ ๊ณ ์ ๋ Desired Height๋ฅผ ์ ๊ณตํ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.
CanvasPanel (์คํธ๋ ์น ์ต์ปค ์์๋ค)
โ Desired Height = 0
โ SizeBox๋ 0
โ ScrollBox์์ ๋ชจ๋ ์ํธ๋ฆฌ๊ฐ height=0์ผ๋ก ๊ฒน์นจ
โ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ๋ง ๋ณด์ด๋ ๊ฒ์ฒ๋ผ ๋ณด์
MinDesiredHeight: 120์ ํ์ฑํํด ํด๊ฒฐํ๋ค. SaveSlotEntry๋ ๋์ผํ ๊ฐ์ ์ฐ๊ณ ์์๋ค.
๋ ํ๋์ ๊ตํ์ด ์์๋ค. ๋น CanvasPanel์ Slate๊ฐ ๋ด๋ถ ํ์ธํ
์ ๊ฑด๋๋ฐ๊ธฐ ๋๋ฌธ์ GetCachedGeometry()๊ฐ (0, 0)์ ๋ฐํํ ์ ์๋ค. ํด๊ฒฐ์ฑ
์ผ๋ก ํฌ๋ช
ํ Image ์์ ฏ์ ์์์ผ๋ก ์ถ๊ฐํด Slate๊ฐ ๋ฐ๋์ ํ์ธํ
ํ๋๋ก ๊ฐ์ ํ๋ค.
์๋๋งต ํ ์ค์ฒ ๋ ๋๋ง ์์ญ์ด ํด์๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ค.
๊ทผ๋ณธ ์์ธ์ GetMapViewRect์ fallback ๊ณ์ฐ์ด ์์ ฏ ์ ์ฒด(AllottedGeometry) ๊ธฐ์ค ๊ณ ์ ํจ๋ฉ์ ์ฐ๊ณ ์์๋ ๊ฒ์ด๋ค. MapViewport(๋น CanvasPanel)์ GetCachedGeometry()๊ฐ (0, 0)์ ๋ฐํํ๋ฉด fallback์ด ๋์ํ๊ณ , ์ ์ฒด ํ๋ฉด ๊ธฐ์ค ํจ๋ฉ์ ํด์๋๊ฐ ๋ฌ๋ผ์ง๋ฉด ํ๋ ธ๋ค.
์์ ๋ฐฉํฅ์ ๋ ๋จ๊ณ์๋ค. ๋จผ์ MapViewport ์ฌ๋กฏ์ ํฌ์ธํธ ์ต์ปค + ํ๋์ฝ๋ฉ๋ ํฝ์
ํฌ๊ธฐ์์ ์คํธ๋ ์น ์ต์ปค + ์คํ์
๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํด ์ด๋ ํด์๋์์๋ ์ฌ๋ฐ๋ฅธ ํฌ๊ธฐ๋ฅผ ๊ฐ๋๋ก ํ๋ค. ๊ทธ ๋ค์ fallback์ ์ํ ๊ณ์ฐ์ผ๋ก ๊ต์ฒดํ๋ค. Border_Window์ ํผ์ผํธ ์ต์ปค(0.02~0.98, 0.04~0.96)์ MapViewportPadding ๊ฐ์ ๊ณฑํด ํด์๋์ ๋ฌด๊ดํ๊ฒ ํญ์ ์ฌ๋ฐ๋ฅธ ์์ญ์ ๊ณ์ฐํ๋ค.
์ด์ : MapViewport ์ง์ค๋ฉํธ๋ฆฌ ์คํจ โ ๊ณ ์ ํฝ์
fallback (ํด์๋ ์ข
์)
์ดํ: MapViewport ์ง์ค๋ฉํธ๋ฆฌ ์คํจ โ Border_Window ๋น์จ ร MapViewportPadding (ํด์๋ ๋
๋ฆฝ)
MapWindowAnchorMin, MapWindowAnchorMax ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํด WBP ๋ ์ด์์์ด ๋ฐ๋๋๋ผ๋ ์๋ํฐ์์ ์์น๋ฅผ ์ง์ ์กฐ์ ํ ์ ์๋๋ก ๋ถ๋ฆฌํ๋ค.
์ธ ๊ฐ์ง๋ฅผ ์ ๋ฆฌํ๋ค.
์ฌ๋ฃ ํญ ๋ฒํผ(Button_TabMaterial)์ ๋ฐํ์์ C++๋ก ์์ฑํ๋ EnsureMaterialTabButton()์ ์ ๊ฑฐํ๊ณ , WBP ๋์์ด๋์์ ์ง์ ๋ฐฐ์นํ๋ ๋ฐฉ์์ผ๋ก ์ ํํ๋ค. ๋ฌด๊ธฐยท์๋ชจํ ํญ์ WBP์์ ์ค์ ํ๋ฉด์ ์ฌ๋ฃ ํญ๋ง ์ฝ๋๋ก ์์ฑํ๋ ๋ถ์ผ์น๊ฐ ์ฌ๋ผ์ก๋ค.
RefreshInventoryGridLayout()์ด Tick๋ง๋ค ๋ชจ๋ ์์ ์์ ฏ์ Alignment๋ฅผ ๋ฐ๋ณต ์ค์ ํ๊ณ ์์๋ค. ๊ทธ๋ฆฌ๋ ํฌ๊ธฐ๊ฐ ์ค์ ๋ก ๋ฐ๋ ๊ฒฝ์ฐ์๋ง ์คํํ๋๋ก bGridAreaChanged ์กฐ๊ฑด ์์ผ๋ก ์ด๋ํ๋ค.
PopulateWeaponSkillIcons()์์ ํ
์ค์ฒ ๋ก๋ ์ฑ๊ณต ์ SetDesiredSizeOverride๋ฅผ ์ค๋ณต ํธ์ถํ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ค.
- UI ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์์ ํ๋ฉด ํ์์ ์ค์ ๋์์ด ๋ค๋ฅผ ์ ์๋ค๋ ์ ์ ํ์ธํ๊ณ , ์ง์ค๋ฉํธ๋ฆฌ ๊ฐฑ์ ๊ณผ ๋ ์ด์์ ๊ณ์ฐ ํ๋ฆ์ ์ ๊ฒํ๋ฉฐ ์์ธ์ ์ถ์ ํ๋ค.
- Slate์ Desired Size ๊ณ์ฐ ๋ฐฉ์๊ณผ GetCachedGeometry() ๊ฐฑ์ ์์ ์ ์ดํดํ๋ฉด์ UMG ๋ ์ด์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- ์ฌ๋ฃ ํญ ๋ฒํผ, ์ ๋ ฅ ์ฒ๋ฆฌ, ๋ ๋๋ง ์์ญ ๊ณ์ฐ์ ์ ๋ฆฌํ๋ฉฐ ์ฝ๋์ ์๋ํฐ์ ์ฑ ์์ ๋ถ๋ฆฌํ๋ค.
- ์ ์ฒด์ ์ผ๋ก ๋๋ฒ๊น ์ด ์ฌ์ด ๊ตฌ์กฐ๋ก ๋ฆฌํฉํ ๋งํ๋ฉด์ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ฐ์ ํ๋ค.