ํ์ฌ ํ๋ก์ ํธ๋ ์ธ๋ฒคํ ๋ฆฌ, ์ฅ์ฐฉ, ์์ดํ ํ๋, ์ํธ์์ฉ ์์คํ ์ด ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๊ตฌํ๋์ด ์๋ ์ํ์๋ค.
ํ์ง๋ง RPG์์๋ ํ๋ ์ด์ด๊ฐ ํํ โ ์ ํฌ โ ๋ณด์ ํ๋ โ ์ฑ์ฅ โ ๋ค์ ์ง์ญ ์ง์ ์ด๋ผ๋ ํ๋ฆ์ ๋ฐ๋ณตํ๊ฒ ๋๋๋ฐ, ์ด๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ์ฐ๊ฒฐํด์ฃผ๋ ๊ฑฐ์ ์์คํ ์ด ํ์ํ๋ค.
์ด๋ฒ ์์ ์์๋ ๋ชจ๋ฅ๋ถ์ ๋จ์ ์ฒดํฌํฌ์ธํธ๊ฐ ์๋ ๊ฒ์ ์งํ์ ์ค์ฌ ํ๋ธ๋ก ํ์ฉํ๋ ๋ฐฉํฅ์ผ๋ก ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌํ๋ค.
๋ชจ๋ฅ๋ถ์ ํตํด ๋ค์ ๊ธฐ๋ฅ๋ค์ ํตํฉํ๋ ๊ฒ์ด ๋ชฉํ์๋ค.
์ ์ฅ
์ ์
๋น ๋ฅธ ์ด๋
์งํ ์ํ ๋ณต์
๋ํ ์ถํ ํ์คํธ, ์ ํ ๊ธฐ๋ก, ์๋ฉ ๋ถ๊ธฐ, ์๊ตฌ ์๋ ์ํ ์ ์ฅ๊น์ง ํ์ฅํ ์ ์๋๋ก ์ ์ฅ ๊ตฌ์กฐ ์์ฒด๋ฅผ ํจ๊ป ์ค๊ณํ๋ค.
์ฒ์์๋ ์ธ๋ฒคํ ๋ฆฌ๋ง ์ ์ฅํ๋ ๋จ์ SaveGame ๊ตฌ์กฐ๋ฅผ ์๊ฐํ์ง๋ง, ์ค์ RPG์์๋ ์ ์ฅํด์ผ ํ๋ ๋ฐ์ดํฐ ์ข ๋ฅ๊ฐ ๊ณ์ ๋์ด๋๋ค.
์ธ๋ฒคํ ๋ฆฌ
์ฅ์ฐฉ ๋ฌด๊ธฐ
ํต์ฌ๋กฏ
ํ๋ ์ด์ด ์์น
์งํ๋
์ ํ ๊ธฐ๋ก
์๋ฉ ๋ถ๊ธฐ
์๋ ์ํ
์ด ๋๋ฌธ์ ์ฒ์๋ถํฐ ํ์ฅ ๊ฐ๋ฅํ ํํ๋ก ์ ์ฅ ๊ตฌ์กฐ๋ฅผ ๋ถ๋ฆฌํ๋ค.
ํ์ฌ MVP ๋จ๊ณ์์๋ ๋ค์ ๋ ๋ ์ด์ด๋ฅผ ์ฐ์ ์ ์ฅํ๋๋ก ๊ตฌ์ฑํ๋ค.
LoadSnapshot
โโ ํ๋ ์ด์ด ๋ณต์ ๋ฐ์ดํฐ
InventoryProgress
โโ ์งํ ๋ฐ์ดํฐ
LoadSnapshot์๋ ๋ค์ ์ ๋ณด๊ฐ ์ ์ฅ๋๋ค.
ํ๋ ์ด์ด Transform
ํ์ฌ HP
์ฅ์ฐฉ ๋ฌด๊ธฐ
๋ง์ง๋ง ๋ชจ๋ฅ๋ถ ID
InventoryProgress์๋ ๋ค์ ์ ๋ณด๊ฐ ์ ์ฅ๋๋ค.
์ธ๋ฒคํ ๋ฆฌ
ํต์ฌ๋กฏ
์งํ ํ๊ทธ
์ ํ ๊ธฐ๋ก
์ถํ ์ค๋ธ์ ํธ ๊ณ ์ ID ์ฒด๊ณ๊ฐ ์์ฑ๋๋ฉด PersistentWorldState ๋ ์ด์ด๋ฅผ ์ถ๊ฐํด ์๋ ์ํ๊น์ง ์ ์ฅํ ์ ์๋๋ก ํ์ฅ ์ง์ ์ ๋จ๊ฒจ๋์๋ค.
์ ์ฅ ๋ก์ง์ GameInstanceSubsystem ๊ธฐ๋ฐ์ SaveSubsystem์ผ๋ก ๋ถ๋ฆฌํ๋ค.
๊ธฐ์กด์ฒ๋ผ ์บ๋ฆญํฐ๋ ํ๋ ์ด์ด ์ปจํธ๋กค๋ฌ์์ ์ง์ ์ ์ฅ์ ์ํํ๋ฉด ๊ธฐ๋ฅ์ด ๋์ด๋ ์๋ก ์์กด์ฑ์ด ์ปค์ง ๊ฐ๋ฅ์ฑ์ด ์์๋ค.
๊ทธ๋์ ์ ์ฅ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ๋ชจ๋ SaveSubsystem์ด ๋ด๋นํ๋๋ก ์ ๋ฆฌํ๋ค.
SaveAtBonfire()
LoadGame()
MarkBonfireActivated()
FastTravelToBonfire()
ํนํ ํจ์ ์ ๋ ฅ์ Actor๊ฐ ์๋ PlayerController ๊ธฐ๋ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ค.
SaveAtBonfire(APlayerController*)
LoadGame(APlayerController*)
์ด ๊ตฌ์กฐ ๋๋ถ์ ์ถํ ๋ฉํฐํ๋ ์ด ํ์ฅ ์ ํ๋ ์ด์ด๋ณ Save Slot ๋ถ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ก๋ค.
๋ชจ๋ฅ๋ถ์ ๋จ์ ์ ์ฅ ์ง์ ์ด ์๋๋ผ ๋น ๋ฅธ ์ด๋ ๊ฑฐ์ ์ญํ ๋ ์ํํด์ผ ํ๋ค.
๊ทธ๋์ ๋ชจ๋ฅ๋ถ์ด ํ์ฑํ๋๋ฉด ๋ค์ ์ ๋ณด๊ฐ SaveGame์ ๊ธฐ๋ก๋๋๋ก ๊ตฌ์ฑํ๋ค.
BonfireId
ArrivalTransform
์ด๊ธฐ์๋ ๋จ์ํ ํ์ฑํ ์ฌ๋ถ๋ง ์ ์ฅํ๋ ค๊ณ ํ์ง๋ง, ๋น ๋ฅธ ์ด๋์ ๊ตฌํํ๋ ค๋ฉด ์ค์ ๋์ฐฉ ์์น๊ฐ ํ์ํ๋ค.
๊ทธ๋์ ๊ธฐ์กด ๊ตฌ์กฐ์๋
TArray<FName> ActivatedBonfireIds
๋ฅผ
TMap<FName, FTransform>
์ผ๋ก ๋ณ๊ฒฝํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ฅ๋ถ ID์ ์ค์ ๋์ฐฉ ์์น๋ฅผ ํจ๊ป ๊ด๋ฆฌํ ์ ์๊ณ , ๊ฒ์ ์ฌ์์ ์ดํ์๋ ํ์ฑํ ์ํ๋ฅผ ๊ทธ๋๋ก ๋ณต์ํ ์ ์๋ค.
์ ์ ์์คํ ์ ๋ชจ๋ฅ๋ถ ๋ฉ๋ด ์์์ ๋์ํ๋๋ก ๊ตฌ์ฑํ๋ค.
ํต์ฌ ๋ชฉํ๋ ๋ ์ํผ ์ถ๊ฐ๋ง์ผ๋ก ์ ์ ์์ดํ ์ ํ์ฅํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๊ฒ์ด์๋ค.
์ด๋ฅผ ์ํด DataTable ๊ธฐ๋ฐ ๋ ์ํผ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๋ค.
ํ์ ์ฌ๋ฃ
๊ฒฐ๊ณผ ์์ดํ
์งํ ์กฐ๊ฑด
์ ์ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ ์ํผ ์ ํ
โ
์ฌ๋ฃ ๋ณด์ ๋ ๊ฒ์ฌ
โ
์ฌ๋ฃ ์ฐจ๊ฐ
โ
๊ฒฐ๊ณผ ์์ดํ
์ง๊ธ
โ
์ธ๋ฒคํ ๋ฆฌ ๊ฐฑ์
ํ์ฌ๋ ์๋ชจ ์์ดํ ์ ์๋ง ์ง์ํ์ง๋ง, ๋์ผํ ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ฉด ์ถํ ๋ฌด๊ธฐ ์ ์์ด๋ ๊ฐํ ์์คํ ๋ ํ์ฅ ๊ฐ๋ฅํ๋๋ก ์ค๊ณํ๋ค.
๋น ๋ฅธ ์ด๋์ ์๋๋งต๊ณผ ๋ชจ๋ฅ๋ถ ์์คํ ์ ์ฐ๊ฒฐํ๋ ๋ฐฉํฅ์ผ๋ก ๊ตฌํํ๋ค.
ํ์ฑํ๋ ๋ชจ๋ฅ๋ถ๋ง ์๋๋งต์์ ์ด๋ ๋์์ผ๋ก ์ ํํ ์ ์๋๋ก ๊ตฌ์ฑํ๋ค.
์๋๋งต
โ
๋ชจ๋ฅ๋ถ ์์ด์ฝ ์ ํ
โ
๋น ๋ฅธ ์ด๋ ํ์ธ
โ
๋ก๋ฉ ํ๋ฉด ์ถ๋ ฅ
โ
ํ๋ ์ด์ด ์ด๋
๊ธฐ์กด RPG์์ ์์ฃผ ์ฌ์ฉํ๋ OpenLevel ๋ฐฉ์ ๋์ ํ์ฌ ํ๋ก์ ํธ ๊ตฌ์กฐ์ ๋ง์ถฐ ํ ๋ ํฌํธ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค.
SetActorTransform()
World Partition ํ๊ฒฝ์์๋ ์ด๋ ์งํ ์ ์คํธ๋ฆฌ๋ฐ์ด ์๋ฃ๋์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ๊ณ ์ ๋๊ธฐ ์๊ฐ์ ๋์ด ์คํธ๋ฆฌ๋ฐ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋๋ก ์ฒ๋ฆฌํ๋ค.
๋ชจ๋ฅ๋ถ UI๋ ์ ์ฅ๊ณผ ์ ์ ๊ธฐ๋ฅ์ ํญ ๊ตฌ์กฐ๋ก ๋ถ๋ฆฌํ๋ค.
WBP_BonfireMenu
Save Tab
Craft Tab
๋น ๋ฅธ ์ด๋์ ๋ณ๋์ ๋ค์ด์ผ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ๋๋ก ๊ตฌ์ฑํ๋ค.
WBP_FastTravelDialog
WBP_LoadingCutscene
๋ํ ๋น ๋ฅธ ์ด๋ ๊ณผ์ ์ ๋ธ๋ฆฌ๊ฒ์ดํธ ๊ธฐ๋ฐ์ผ๋ก ์ฐ๊ฒฐํ๋ค.
OnBonfireIconDoubleClicked
OnFastTravelStarted
OnFastTravelCompleted
UI๊ฐ ์ง์ ๊ฒ์ ๋ก์ง์ ํธ์ถํ๋ ๋ฐฉ์์ด ์๋๋ผ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋๋ก ์ ๋ฆฌํ๋ฉด์ ์ดํ ์ฐ์ถ ์ถ๊ฐ๋ UI ๊ต์ฒด๊ฐ ํจ์ฌ ์ฌ์์ก๋ค.
- ์ด๋ฒ ์์ ์ ํตํด ์ ์ฅ, ์ ์, ๋น ๋ฅธ ์ด๋ ๊ธฐ๋ฅ์ ๊ฐ๋ณ ์์คํ ์ด ์๋ ํ๋์ RPG ์งํ ๋ฃจํ๋ก ํตํฉํ๋ค.
- SaveGame ๊ตฌ์กฐ๋ ์ธ๋ฒคํ ๋ฆฌ ์ ์ฅ ์์ค์์ ๋ฒ์ด๋ ์งํ๋์ ์๋ ์ํ ์ ์ฅ๊น์ง ํ์ฅ ๊ฐ๋ฅํ ํํ๋ก ์ฌ์ค๊ณํ๊ณ , ๋ชจ๋ฅ๋ถ์ ๋จ์ ์ฒดํฌํฌ์ธํธ๊ฐ ์๋ ํ๋ ์ด์ด ์ฑ์ฅ๊ณผ ํํ์ ์ฐ๊ฒฐํ๋ ํต์ฌ ๊ฑฐ์ ์ผ๋ก ์ญํ ์ ์ ๋ฆฌํ๋ค.
- ๋ํ SaveSubsystem, ์๋๋งต, ์ ์ ์์คํ , UI๋ฅผ ๋ธ๋ฆฌ๊ฒ์ดํธ ๊ธฐ๋ฐ์ผ๋ก ์ฐ๊ฒฐํ๋ฉด์ ์ดํ ๋ฉํฐํ๋ ์ด ์ ์ฅ, ์๊ตฌ ์๋ ์ํ, ํํฐ ์ด๋ ๊ธฐ๋ฅ๊น์ง ํ์ฅํ ์ ์๋ ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ๋ง๋ จํ๋ค.