์ด์ ๋ ๊ธฐ์กด RTS ํ๋ก์ ํธ์ SceneCapture2D + FogRT ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ์คํ์๋ RPG ๋ฐฉํฅ์ ๋ง๊ฒ ์ฌ์ค๊ณํ๋ฉด์,
์ ์ MapTexture + ๋ฑ๋กํ ์์ด์ฝ + ํํ Overlay ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ก ๋ฐฉํฅ์ ์ ๋ฆฌํ๋ค.
์ค๋์ ์ฌ๊ธฐ์ ํ ๋จ๊ณ ๋ ๋์๊ฐ ์ค์ ๋ก ๋์ํ๋ ํํ์ ๋ฏธ๋๋งต ์์คํ
์ ๊ตฌํํ๊ณ ,
HUD ์์ ฏยทMaterial UVยท์นด๋ฉ๋ผ ํ์ ยท1km x 1km ์๋ ๋์๊น์ง ํฌํจํด์ ๊ตฌ์กฐ๋ฅผ ์ค์ ํ๋ก์ ํธ ๊ธฐ์ค์ผ๋ก ์ ๋ฆฌํ๋ค.
์ฒ์์๋ RTS ๋ ์ฌ์ฉํ๋ ๋ฐฉ์์ฒ๋ผ:
NativePaint
+
MapTexture Draw
+
Slate ํ์
๊ตฌ์กฐ๋ก ๊ตฌํํ๋ ค๊ณ ํ๋ค.
์ฆ:
๋งต ํ
์ค์ณ ์์ฒด๋ฅผ DrawOffset์ผ๋ก ์ด๋
โ MakeRotatedBox๋ก ํ์
์ํค๋ ๋ฐฉ์์ด์๋ค.
ํ์ง๋ง ์ค์ ๋ก ํ ์คํธํด๋ณด๋ ๋ฌธ์ ๊ฐ ๊ฝค ๋ง์๋ค.
ํ๋ ์ด์ด ์ด๋ ์ Border ๋ฐ์ผ๋ก ํ์ด๋๊ฐ
ํ์ Pivot ์ด๊ธ๋จ
์นด๋ฉ๋ผ ํ์ ์ ๋งต ์์น ๋๊ธฐํ ๊นจ์ง
์๋ ํฌ๊ธฐ ๋ณ๊ฒฝ ์ Zoom ๋ณด์ ํ์
์์ด์ฝ ์์น์ ํ
์ค์ณ ์์น ๋ถ์ผ์น
ํนํ PlayerUp ๋ชจ๋์์:
์นด๋ฉ๋ผ ํ์ ๊ธฐ์ค์ผ๋ก ์์ด์ฝ์ ์ ์ ํ์
ํ์ง๋ง ๋งต ํ
์ค์ณ๋ ๋ค๋ฅธ ๊ธฐ์ค์ผ๋ก ํ์
ํ๋ ํ์์ด ๋ฐ์ํ๋ค.
์ ๋ฆฌํ๋ค ๋ณด๋ ๋ฌธ์ ์ ํต์ฌ์:
Slate์์ ํฐ ํ
์ค์ณ ์์ฒด๋ฅผ ํ์ ์ํค๋ ๊ตฌ์กฐ
์ ์์๋ค.
๊ทธ๋์ ๋ฐฉํฅ์ ๋ค์ ๋ฐ๊ฟจ๋ค.
์ต์ข ์ ์ผ๋ก๋:
๋งต ํ
์ค์ณ๋ฅผ ์ง์ ์ด๋/ํ์ ํ์ง ์๋๋ค.
UI Material ๋ด๋ถ UV๋ง ์ด๋/ํ์ ํ๋ค.
๊ตฌ์กฐ๋ก ๋ณ๊ฒฝํ๋ค.
์ฆ:
MapTexture
โ Material UV ์ด๋
โ Material UV ํ์
โ Widget์ ๊ณ ์
๊ตฌ์กฐ๋ค.
์ด ๋ฐฉ์์ผ๋ก ๋ฐ๊พธ๋๊น:
Pivot ๋ฌธ์
Border ์ดํ ๋ฌธ์
ํ์ ๋๊ธฐํ ๋ฌธ์
๊ฐ ๊ฑฐ์ ์ ๋ฆฌ๋๋ค.
์ต์ข ๊ตฌ์กฐ๋ ์๋์ฒ๋ผ ์ ๋ฆฌํ๋ค.
RTMapSubsystem
โโ ์๋ ์ขํ โ UV ๋ณํ
โโ ๋ฑ๋กํ ์์ด์ฝ ๊ด๋ฆฌ
โโ ์๋ ํฌ๊ธฐ ๊ด๋ฆฌ
RTMapIconComponent
โโ BeginPlay / EndPlay ๋ฑ๋ก
RTMiniMapWidget
โโ Material UV ๊ฐฑ์
โโ ์์ด์ฝ Draw
โโ ํ๋ ์ด์ด ๋ง์ปค Draw
โโ ํ์ ๋ชจ๋ ๊ด๋ฆฌ
M_UI_Minimap
โโ CenterUV
โโ Zoom
โโ Rotation
์ค์ํ๋ ๊ฑด:
๋งต ๋ฐฐ๊ฒฝ์ Material
์์ด์ฝ์ NativePaint
๋ก ์ญํ ์ ๋ถ๋ฆฌํ ์ ์ด์๋ค.
์ด๋ฒ ๊ตฌํ์์ ๊ฐ์ฅ ํฌ๊ฒ ๋ฐ๋ ๋ถ๋ถ์
๋ฏธ๋๋งต ๋ฐฐ๊ฒฝ์ Slate Draw๊ฐ ์๋๋ผ Material UV ๊ธฐ๋ฐ์ผ๋ก ๋ฐ๊พผ ์ ์ด์๋ค.
๋จธํฐ๋ฆฌ์ผ ๋ด๋ถ์์๋:
TexCoord
โ ์ค์ฌ ๊ธฐ์ค ์ด๋
โ ํ์
โ Zoom
โ CenterUV ์ด๋
โ Texture Sample
ํ๋ฆ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
์ฆ ์ค์ ๋ก ์์ง์ด๋ ๊ฑด:
Texture ์์ฒด๊ฐ ์๋๋ผ
UV ์ขํ
์๋ค.
์ด ๊ตฌ์กฐ๋ก ๋ฐ๊พธ๋๊น:
์์ ฏ ์์ฒด๋ ๊ณ ์
ํ๋ ์ด์ด ์์น ๊ธฐ์ค์ผ๋ก UV ์ด๋
์นด๋ฉ๋ผ ํ์ ๊ธฐ์ค์ผ๋ก UV ํ์
๊ตฌ์กฐ๊ฐ ์์ ์ ์ผ๋ก ๋ง์ ๋จ์ด์ก๋ค.
์ฒ์์๋:
GetActorRotation().Yaw
๊ธฐ์ค์ผ๋ก ํ์ ์ํค๊ณ ์์๋ค.
ํ์ง๋ง ์คํ์๋ RPG์์๋:
ํ๋ ์ด์ด ๋ชธ ๋ฐฉํฅ๋ณด๋ค
์นด๋ฉ๋ผ ๋ฐฉํฅ์ด ๋ ์ค์
ํ๋ค๊ณ ํ๋จํ๋ค.
๊ทธ๋์ ์ต์ข ์ ์ผ๋ก๋:
PlayerCameraManager->GetCameraRotation().Yaw
๊ธฐ์ค์ผ๋ก ํ์ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ค.
์ต์ข ๋์์:
NorthUp
โ ๋งต ๊ณ ์
โ ํ๋ ์ด์ด ๋ง์ปค ํ์
PlayerUp
โ ๋งต ํ์
โ ์์ด์ฝ ์์น ํ์
โ ํ๋ ์ด์ด ๋ง์ปค๋ ์๋จ ๊ณ ์
๊ตฌ์กฐ๋ก ์ ๋ฆฌํ๋ค.
์ด๋ฒ์๋ ์์ด์ฝ ๊ตฌ์กฐ๋ ์ค์ ํ๋ก์ ํธ ๊ธฐ์ค์ผ๋ก ๋ค์ ์ ๋ฆฌํ๋ค.
๊ธฐ์กด์๋ ๋จ์ํ:
Texture + Color
์ ๋๋ง ์๊ฐํ์๋๋ฐ,
์ต์ข
์ ์ผ๋ก๋:
ERTMapIconType
๊ธฐ๋ฐ์ผ๋ก ์ ๋ฆฌํ๋ค.
์๋ฅผ ๋ค๋ฉด:
Player
POI
Boss
Village
Quest
Campfire
๋ฑ์ด๋ค.
๊ทธ๋ฆฌ๊ณ :
bShowOnMiniMap
bShowOnWorldMap
๋ฅผ ๋ถ๋ฆฌํด์:
HUD ๋ฏธ๋๋งต ์ ์ฉ
์๋๋งต ์ ์ฉ
ํ์๋ ๊ตฌ๋ถํ ์ ์๊ฒ ๋ง๋ค์๋ค.
์ด๋ฒ ํ ์คํธ ์๋ ๊ธฐ์ค์:
1km x 1km
โ 100000uu x 100000uu
๊ท๋ชจ๋ค.
๊ทธ๋์:
MapOrigin
MapSize
ViewWorldRadius
๋ฅผ ๋ชจ๋ 1km ์๋ ๊ธฐ์ค์ผ๋ก ๋ค์ ์ ๋ฆฌํ๋ค.
์๋๊ฐ ์์ ์ค์ฌ์ด๋ผ๋ฉด:
MapOrigin = FVector2D(-50000.0f, -50000.0f);
MapSize = FVector2D(100000.0f, 100000.0f);
์๋๊ฐ (0, 0)๋ถํฐ ์์ํ๋ค๋ฉด:
MapOrigin = FVector2D(0.0f, 0.0f);
MapSize = FVector2D(100000.0f, 100000.0f);
๋ฏธ๋๋งต์์ ํ๋ ์ด์ด ์ฃผ๋ณ์ ๋ณด์ฌ์ฃผ๋ ๋ฐ๊ฒฝ์:
ViewWorldRadius = 10000.0f;
์ ๋๋ก ์ก์๋ค.
์ฆ:
๋ฐ๊ฒฝ 100m
์ง๋ฆ 200m
์ ๋์ ์์ญ์ ๋ฏธ๋๋งต ์์ ํ๋ํด์ ๋ณด์ฌ์ฃผ๋ ๊ตฌ์กฐ๋ค.
Zoom ๊ณ์ฐ ๊ณต์์:
Zoom = MapSize.X / (ViewWorldRadius * 2)
์ด๋ค.
1km ์๋ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐํ๋ฉด:
100000 / (10000 * 2) = 5
์ฆ Zoom = 5๊ฐ ๋๋ค.
์ด ๊ตฌ์กฐ๋ก ์ ๋ฆฌํ๋๊น:
์๋ ํฌ๊ธฐ๊ฐ ๋ฐ๋์ด๋
ViewWorldRadius๋ง ์กฐ์ ํ๋ฉด
๋ฏธ๋๋งต ํ๋ ๋ฒ์๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์
์ ํ์ธํ ์ ์์๋ค.
๋ฏธ๋๋งต ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌํ๋ฉด์
SceneCapture ๋ฐฉํฅ๋ ๊ฐ์ด ์ ๋ฆฌํ๋ค.
์ต์ข ์ ์ผ๋ก๋:
์ค์๊ฐ SceneCapture ์ฌ์ฉ X
๋ฐฉํฅ์ผ๋ก ๊ฐ๋ค.
๋์ :
Orthographic SceneCapture
โ RenderTarget ์์ฑ
โ Static Texture Bake
โ MapTexture ์ฌ์ฉ
๊ตฌ์กฐ๋ค.
์ฆ SceneCapture๋:
์ค์๊ฐ ๋ ๋๋ง ์์คํ
์ด ์๋๋ผ
๋งต ๋ฒ ์ดํฌ ์์ฑ ๋๊ตฌ
๊ฐ ๋์๋ค.
1km x 1km ์๋ ๊ธฐ์ค SceneCapture ์ค์ ์:
Projection Type = Orthographic
Ortho Width = 100000
Rotation = Pitch -90
๋ก ๋ง์ถ๋ฉด ๋๋ค.
์๋๊ฐ ์์ ์ค์ฌ์ด๋ฉด:
Location = (0, 0, ์ถฉ๋ถํ ๋์ Z)
์๋๊ฐ (0, 0)๋ถํฐ ์์ํ๋ฉด:
Location = (50000, 50000, ์ถฉ๋ถํ ๋์ Z)
๋ก ๋ฐฐ์นํ๋ฉด ๋๋ค.
์ค๋ ์ ๋ฆฌํ๋ฉด์ ์๋๋งต ๊ตฌ์กฐ ๋ฐฉํฅ๋ ๋ ๋ช ํํด์ก๋ค.
์ค์ํ๋ ๊ฑด:
๋ฏธ๋๋งต๊ณผ ์๋๋งต์ ์ญํ ์ด ๋ค๋ฅด๋ค.
๋ ์ ์ด์๋ค.
๋ฏธ๋๋งต์:
ํ์ฌ ์์น ํ์
๊ทผ์ฒ ์ ๋ณด ํ์ธ
์ด๊ณ ,
์๋๋งต์:
์ ์ฒด ์ง์ญ ๊ตฌ์กฐ
์งํ ์ํ
POI ๊ด๋ฆฌ
์ง์ญ ํํ
์ ๊ฐ๊น์ ๋ค.
๊ทธ๋์:
RTMapSubsystem
RTMapIconComponent
๋ ๊ณต์ ํ๋,
WBP_Minimap
WBP_WorldMap
์ ๋ถ๋ฆฌํ๋ ๋ฐฉํฅ์ผ๋ก ์ ๋ฆฌํ๋ค.
์ด๋ฒ ๊ตฌํ์์ ๊ฐ์ฅ ์ค์ํ๊ฒ ๋๋ ๊ฑด
โ๊ธฐ๋ฅ ์ถ๊ฐ๋ณด๋ค ๊ตฌ์กฐ ๋จ์ํ๊ฐ ๋จผ์ โ๋ผ๋ ์ ์ด์๋ค.
์ฒ์์๋:
GridManager
FogSubsystem
MarkerManager
MapRenderer
๊ฐ์ด ์ฌ๋ฌ ํด๋์ค๋ก ๋๋๋ ค๊ณ ํ์ง๋ง,
์ ๋ฆฌํ๋ค ๋ณด๋ MVP ๊ธฐ์ค์์๋ ๊ณผํ ๊ฐ๋ฅ์ฑ์ด ๋์ ๋ณด์๋ค.
๊ทธ๋์ ์ต์ข ์ ์ผ๋ก๋:
RTMapSubsystem
RTMapIconComponent
RTMiniMapWidget
M_UI_Minimap
์ ๋๋ก ์ต์ํํ๋ค.
ํนํ:
๋๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋์ง
๋๊ฐ ๊ทธ๋ฆฌ๋์ง
๋๊ฐ ๋ฑ๋กํ๋์ง
๋ฅผ ๋ฐ๋ก ์ดํดํ ์ ์๊ฒ ๋ง๋๋ ๊ฑธ ๊ฐ์ฅ ์ค์ํ๊ฒ ์๊ฐํ๋ค.
์ด๋ฒ ๊ตฌํ์ ์งํํ๋ฉด์ ๊ฐ์ฅ ํฌ๊ฒ ๋๋ ๊ฑด,
์คํ์๋ RPG ๋ฏธ๋๋งต์ โ๋ ๋๋ง ์์คํ
โ๋ณด๋ค โUI ์ ๋ณด ์์คํ
โ์ ๋ ๊ฐ๊น๋ค๋ ์ ์ด์๋ค.
์ฒ์์๋ RTS์ฒ๋ผ:
์ค์๊ฐ ์๋ ๋ ๋๋ง
์ค์ฌ์ผ๋ก ์๊ฐํ์ง๋ง,
์ ๋ฆฌํ๋ค ๋ณด๋ ์ค์ ๋ก ์ค์ํ ๊ฑด:
ํ์ฌ ์์น
ํํ ์ํ
POI ์ ๋ณด
๋ฐฉํฅ ์ธ์ง
์๋ค.
๊ทธ๋์:
์ ์ MapTexture
+
Material UV
+
๋ฑ๋กํ ์์ด์ฝ
๊ธฐ๋ฐ ๊ตฌ์กฐ๊ฐ ํจ์ฌ ๋จ์ํ๊ณ ์์ ์ ์ผ๋ก ๋๊ปด์ก๋ค.
ํนํ ์ด๋ฒ์๋:
ํ์ฅ์ฑ๋ณด๋ค ๋จผ์
๊ตฌ์กฐ๋ฅผ ๋จ์ํ๊ฒ ์ ์งํ๋ ๊ฒ
์ด MVP ๋จ๊ณ์์ ํจ์ฌ ์ค์ํ๋ค๊ณ ๋๊ผ๋ค.
- Slate์์ ํ ์ค์ณ ์์ฒด๋ฅผ ํ์ ์ํค๋ ๊ตฌ์กฐ ๋์ Material UV ๊ธฐ๋ฐ ํ์ ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝํ๋ฉด์ ํ์ /Pivot/Border ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- ๋ฏธ๋๋งต ๋ฐฐ๊ฒฝ์ Material, ์์ด์ฝ๊ณผ ํ๋ ์ด์ด ๋ง์ปค๋ NativePaint๋ก ๋ถ๋ฆฌํ๋ฉด์ ์ญํ ์ ๋จ์ํํ๋ค.
- ์คํ์๋ RPG์์๋ ํ๋ ์ด์ด ๋ชธ ๋ฐฉํฅ๋ณด๋ค ์นด๋ฉ๋ผ ๋ฐฉํฅ ๊ธฐ์ค ํ์ ์ด ๋ ์์ฐ์ค๋ฝ๋ค๊ณ ํ๋จํด PlayerCameraManager ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝํ๋ค.
- 1km x 1km ์๋๋ฅผ ๊ธฐ์ค์ผ๋ก
MapSize / ViewWorldRadius๊ธฐ๋ฐ Zoom ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌํ๋ฉด์ ํ๋ ์ด์ด ์ฃผ๋ณ ์์ญ๋ง ํ๋ ํ์๋๋๋ก ๊ตฌํํ๋ค.- ์ค์๊ฐ SceneCapture ๊ตฌ์กฐ ๋์ Orthographic Capture โ Static Texture Bake ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ก ๋ฐฉํฅ์ ์ ๋ฆฌํ๋ฉด์ ์ฑ๋ฅ๊ณผ ์ ์ง๋ณด์ ์ธก๋ฉด์์ ํจ์ฌ ๋จ์ํ ๊ตฌ์กฐ๊ฐ ๋์๋ค.