์๋ฌธ: https://benui.ca/unreal/ui-cpp-basics/
Unreal์ ์ํ ๋ง์ UI ํํ ๋ฆฌ์ผ์ Blueprint์ ์ด์ ์ ๋ง์ถ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ๋ ๋์ ๋งค๋ ฅ์ ๊ฐ์ง ์ ์์ง๋ง ์ ๋ฌธ๊ฐ ์์ค์ UI๋ฅผ ๋ง๋ค๋ ค๋ฉด C++์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ ์ฐ๋ฆฌ๋ C++์ ์ฌ์ฉํด์ผ ํ๋๊ฐ?
์ฐ์ , ๋ถ๋ช ํ ์ฐ๋ฆฌ๋ Blueprint๋ก ๋ชจ๋ ๊ฒ์ ํ ์ ์๋๋ฐ, ์ ์ฐ๋ฆฌ๋ C++๋ก UI๋ฅผ ๋ง๋ค์ด์ผ ํ๋์? ๋ผ๋ ์ง๋ฌธ์ ํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ง์์๋ ์์ง๋ง ์๋์๋ ์์ต๋๋ค. Blueprint๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด ๊ฒ์์ UI๋ฅผ ์์ฑํ ์ ์์ง๋ง ๊ทธ ๊ณผ์ ์์ ๋ช ๊ฐ์ง ์ฃผ์ ๋ฌธ์ ์ ๋ถ๋ชํ ๊ฒ์ ๋๋ค.
- Blueprint ๊ธฐ๋ฐ์ ๋ํ UI์์ ์ฑ๋ฅ ๋ฌธ์ ์ ๋ถ๋ชํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์์ 1ํ์ฉ Blueprint๋ ๊ด์ฐฎ์ง๋ง ๋ชจ๋ ํ๋ ์์ผ๋ก ๋ถ๋ฆฌ๋ ํฌ๊ณ ๋ณต์กํ ๋ก์ง์ ๊ฒฝ์ฐ Blueprint ๊ธฐ๋ฐ์ UI๊ฐ ์ค์ ๋ก ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- Blueprint์์ ๋ณต์กํ ๋ ผ๋ฆฌ๋ ์ ๋ชฝ์ ๊ณ์ ์ ์ง์ํต๋๋ค. ํฐ Blueprint ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ฌ๋์ ์คํ๊ฒํฐ ์ฝ๋์ ๋ํ ๋์์๋ ์ธ์์ ์์ธ์ด ๋ ๊ฒ ์ ๋๋ค.
- ์์ง, ์ฒ๋ฆฌ ๋ฐ ๋ฐ์ดํฐ ํ๋ ์ ํ ์ด์ ์ ๋ถ๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค. Blueprint ์ ์ฉ ์์คํ ์ ์ฌ์ฉํ๋ฉด ์๋ก ๋ค๋ฅธ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ๊ณผ ํ์๋ฅผ ์ํด ํฌ๋งทํํ๋ ๊ฒ์ ์ฝ๊ฒ ํผํฉํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋์คํ๋ ์ด ๊ทธ๋ํ ๋ ธ๋๊ฐ ๋ฐ์ดํฐ ์์ง ๋ ธ๋์ ๋งค์ฐ ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์ ํฅํ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ๊ตฌํํด์ผ ํ ๋ ์ค์ง์ ์ธ ์ด๋ ค์์ ์ผ๊ธฐํฉ๋๋ค.
- ๋ง์ ์ฌ๋๋ค์ด ํ ๋ฒ์ UI ์์ ์ ํ๊ธฐ๊ฐ ๋ ์ด๋ ต์ต๋๋ค. Blueprint๋ ์ด์ง ์์ฐ์ผ๋ก ๋ณํฉ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ํ๋ฒ์ ํ ์ฌ๋๋ง ํธ์งํ ์ ์์ต๋๋ค. UI ์ํฐ์คํธ๊ฐ ์์ ฏ์ ๋ชจ์์ ์ ๋ฐ์ดํธํ๊ณ ๊ฐ๋ฐ์๊ฐ Blueprint ๋ก์ง์ ์ ๋ฐ์ดํธํ๋ ค๋ฉด ์ํฐ์คํธ๊ฐ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค. ๋๋ถ๋ถ์ ๋ก์ง์ด C++์ด๋ฉด ๋ ์ฌ๋ ๋ชจ๋ ์๋ก์ ๋ฐ๊ฐ๋ฝ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ต๋๋ค.
C++์ ์ฌ์ฉํ UI๋ฅผ ๋ง๋๋ ์ธ๊ฐ์ง ๋ฐฉ๋ฒ
์ฌ๊ธฐ์ ์ผ์ด ์กฐ๊ธ ๊น๋ค๋ก์์ง๋๋ค. ๋ชจ๋ UI ๋์์ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋์ผํ ์์ ์ ์ํํ๋ 100๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ด ์ธ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ ๋ค์ ํํ ๋ฆฌ์ผ์์ ๊ฐ๋ณ์ ์ผ๋ก ๋ค๋ฃจ๊ฒ ์ง๋ง ๋๋ต ๋ค์๊ณผ ๊ฐ์ต๋๋ค
- UUserWidget ์ Subclassing(๋ค๋ฅธ ํด๋์ค์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ์์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ)
- Subclassing ํน์ ์๋ก์ด UMG ์์ ฏ ์์ฑ
- Subclassing ํน์ ์๋ก์ Slate ์์ ฏ ์์ฑ
์ด๊ฒ๋ค์ ๊ฐ๊ฐ ์ฅ์ ๊ณผ ๋จ์ ์ด ์์ต๋๋ค. ์ด๊ฒ๋ค์ด ์๋งํ๋ ๋ฐ๋ฅผ ์๊ธฐ ์ํด์๋ Slate์ UMG์ ์ฐจ์ด์ ์ ๋ํด ์๊ธฐํด์ผ ํฉ๋๋ค.
Slate์ UMG
์ฒซ ๋ฒ์งธ C++ ๊ธฐ๋ฐ UserWidget์ ๋ง๋ค๋ ค๋ฉด UUserWidget์ ํ์ ํด๋์ค์ธ C++ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
์ด ์์ ์ ์์ํ๊ธฐ ์ ์ ์ด์ ํธ์ง๊ธฐ์์ UI๋ฅผ ๋ง๋ค๊ณ ํ๋ ํธ์ ์๋ ๋๋ถ๋ถ์ ์์ ฏ์ ๋ชฉ์ ๊ณผ ๊ธฐ๋ฅ์ ์ดํดํด์ผ ํฉ๋๋ค. ์ด๋ ์๋ํฐ์ ๋ธ๋ฃจํ๋ฆฐํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ UI๋ฅผ ์์ฑํด๋ด์ผ๋ก์จ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์ดํดํ ์ ์์ต๋๋ค. ๊ทธ ๋ฐฉ๋ฒ์ ์๋ฆฌ์ฆ ์๊ฐ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๋ค์ ๋จ๊ณ๋ C++์์ ์์ ฏ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๋ ๊ฒ์ ๋๋ค.
์ด๋ฒ ์๋ฆฌ์ฆ์ ์๋ก ์์ ์ธ๊ธํ๋ฏ์ด Unreal(4.15 ๊ธฐ์ค)์๋ UMG์ Slate ๋ ๊ฐ์ง UI ์์คํ ์ด ์์ต๋๋ค.
Slate๋ ์ค๋๋ Unreal UI ์์คํ ์ด๊ณ , UMG์ ์๋ํฐ๊ฐ ๊ธฐ๋ฐ์ ๋๊ณ ์์ต๋๋ค. ์์ ฏ ์ค์ ์ ๋จ์ํํ๊ธฐ ์ํด ๊ณ ์ ์ ์ธ ์ธ๊ด์ C++์ ์ฌ์ฉํฉ๋๋ค. "์ค๋๋" ์์คํ ์ด๋ผ๊ณ ํด์ ์ค๋๋ ๊ฒ์ ์๋๋ผ๋ ๊ฒ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. UI์ ๋ ๋ณต์กํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด ์ฌ๋ ์ดํธ๋ฅผ ์ ์ฐจ ๋ฐฐ์์ผ ํ ๊ฒ์ ๋๋ค.
UMG๋ Unreal 4์ ์ผ๋ถ๋ก ์ถ๊ฐ๋ ์๋ก์ด UI ์์คํ ์ ๋๋ค. Blueprint ์นํ์ ์ผ๋ก ์ค๊ณ๋์์ผ๋ฉฐ ๋์์ด๋๊ฐ ํธ์ง๊ธฐ์์ UI๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ฐฐ์นํ ์ ์์ต๋๋ค. ๊ฐ UMG ์์ ฏ์ ์ผ๋ฐ์ ์ผ๋ก ๊ฑฐ์ ๋์ผํ ์ด๋ฆ์ Slate ํด๋์ค๋ฅผ ๋ด๋ถ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. **Slate ํด๋์ค๋ ๋๋ถ๋ถ์ ๋ก์ง์ ์ฒ๊ธฐํ๊ณ ํด๋น UMG ํด๋์ค๋ ๊ทธ๊ฒ์ ๊ฐ์ธ๋ wrapper์ ๋๋ค. ์๋ฅผ ๋ค์ด UImage๋ UMG ํด๋์ค์ด๋ฉฐ ๋ด๋ถ์ SImage ์ธ์คํด์ค๋ฅผ ํฌํจํฉ๋๋ค.
๋จผ์ , ์ญ์ฌ์ ์์ ๋ถ๋ถ์ ๋๋ค. ์ด๊ฒ์ ๋์ด๊ฐ์ง ๋ง์ธ์. ์ฌ๋ฌ๋ถ์ ์ดํด๋ฅผ ์ํด ์ค์ํฉ๋๋ค!
4.0 ๋ฒ์ ์ด์ ์๋ Unreal์ UI๊ฐ Slate๋ผ๋ ์์คํ ์ ์ฌ์ฉํ์ฌ ๋ง๋ค์ด์ก์ต๋๋ค. ๊ฐ๋ฅํ ํ ๊ฐ๋จํ๊ฒ C++์ UI๋ฅผ ๋ง๋ค ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋์ค์ ํํ ๋ฆฌ์ผ ์๋ฆฌ์ฆ์์ ์ฌ๋ฌ๋ถ๋ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์๋์ง ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์ธ๋ฆฌ์ผ ์์ง 4.0 ๋ฒ์ ์ผ๋ก ์ํฝ์ ๊ทธ๋ค์ ์๋ก์ด UI ์์คํ ์ธ UMG๋ฅผ ์ถ์ํ์ต๋๋ค. UMG๋ ํจ๊ณผ์ ์ผ๋ก Slate๋ฅผ ๊ฐ์ธ๋ wrapper ์ด๊ณ , Blueprints์์ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๊ณ UI ๋์์ด๋๊ฐ ์ธ๋ฆฌ์ผ ์๋ํฐ ๋ด์์ ์ฌ์ฉ์ ์ ์ UI๋ฅผ ๋ง๋ค ์ ์๋๋ก ํฉ๋๋ค.
Slate๊ฐ ๋ ผ์ํ ๋ชจ๋ UMG์์คํ ์ ๊ธฐ์ด๊ฐ ๋๋ค๋ ๊ฒ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฌ๋กฏ, ๋ค์ํ ์์ ฏ, ์์ ฏ์ ๋ํ ์ต์ ๋ฑ์ Slate์ ๋ชจ๋ ๋์ผํฉ๋๋ค. UMG๋ Slate๋ฅผ ์ํ ์๋ํฐ ๋ฐ Blueprint์ ์ ํฉํ wrapper์ผ ๋ฟ์ ๋๋ค.
์ธ ๊ฐ์ง ์ ๊ทผ๋ฐฉ๋ฒ
์ด ๋ฐฉ๋ฒ์์ ๋ฒ์ด๋ UI์ C++ ๊ธฐ๋ฐ ์์ ฏ์ ์ถ๊ฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ์ธ ๊ฐ์ง์ ๋๋ค. ์๋์ ๋์ด๋ ๊ฒ์ ์ ์ง์ ์ผ๋ก ๋ฎ์ ์์ค์ '๋ ๋ง์ ์์ '์ด๋ฉฐ, ๊ทธ ์ค ์ด๋ ๊ฒ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ์ ์ผํ '์ต์์ ๋ฐฉ๋ฒ'์ ์๋๋ฉฐ, ๊ฐ๊ฐ์ ์ ๊ทผ ๋ฐฉ์์๋ ๊ฐ๊ฐ์ ์ฅ์ ๊ณผ ๋จ์ ์ด ์์ต๋๋ค.
๋งฅ๋ฝ์, ์ฌ๋ฌ ํด ๋์ Unreal UI ํ๋ก๊ทธ๋๋จธ๋ก ์ผํ ๊ฒฝํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ปค์คํ UUserWidget - 95%์ ๊ฒฝ์ฐ ์ด๊ฒ์ผ๋ก ์ถฉ๋ถํจ
- ์ปค์คํ UMG/Slate subclass - 5%์ ๊ฒฝ์ฐ (๋งค์ฐ ํน์ ํ ๊ฒ์ ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ์ UMG/Slate ์๋ธ ํด๋์ค๋ฅผ ๋ง๋ฌ)
๋ชจ๋ ๊ฒ์ด ๊ทธ๋ ๋ฏ์ด, ๊ฐ ์ ๊ทผ ๋ฐฉ์์๋ ์ฅ๋จ์ ์ด ์์ต๋๋ค. ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๊ณ์ธต ๊ตฌ์กฐ์์ Slate๋ก ๊ฐ์๋ก, ๋ ๋ง์ ์ฌ์ฉ์ ์ ์๋ฅผ ์ํํ ์ ์์ง๋ง, Blueprints๋ก ์ธํฐํ์ด์ค๋ฅผ ์ค์ ํ๋ ์์ ์ด ๋ ๋ง์์ง ์ ์์ต๋๋ค.
๊ฐ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ๊ฐ์ ํํ ๋ฆฌ์ผ๋ก ๋ถ๋ฆฌํ์ต๋๋ค.