์ด์ c#, ์ ๋ํฐ ๊ฑธ์๋ง๋ ์ตํ๊ณ ์ด๋ณด์์ ๊ธธ๋ก ๋ค์ด์จ ๋ด๋น์ ๋๋ค..
๊ฒ์ ๋ด ์์ดํ ๋ค์ ๊ธฐ๋ณธ ์์น๋คย - json์ด๋ ๊ตฌ๊ธ ์คํ๋ ๋ ์ํธ, SO ๋ฑ ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ์ธ๋ถ ํ์ผ๋ก ๋นผ์ ํ ์คํธ ํ์์ผ๋ก ๊ด๋ฆฌ
ํ๋ ์ด์ด๊ฐ ์์ ํ ์์ดํ (์ธ๋ฒคํ ๋ฆฌ)- ํ๋ ์ด์ด ๊ฐ์ธ์ ๋ฐ์ดํฐ ์ ์ฅ๊ณ ๋ฅผ ๋ง๋ค๊ณ ,ย ์์ ํ ์์ดํ ๋ค์ ์ ์ฅ์ด๋ผ๊ณ ์๊ฐ์ํ๋๋ฐ,
์ฅ๋น๊ฐํ๋ ์ฌ์ฉ์ผ๋ก ์ธํ ๋ด๊ตฌ๋ ๊ฐ์๋ฑ ๊ฐ๊ฐ ์์ดํ (์นด๋)์ ๋ํ ๋ฐ์ดํฐ๋ ์ด๋ป๊ฒ ๊ตฌํ์ ํด์ผ ์ข์๊น์
์ง๊ธ๊น์ง ๊ตฌํํ ๊ฒ์ย ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์นด๋ ๊ฒ์์ ๋ชฉํ๋ก ํ๋๋ฐ
Card.cs๋ผ๋ ์นด๋ ๊ฐ๊ฐ์ ๊ณ ์ ํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์์ต๋๋ค
CardData(scriptable object)๋ฅผ ๋ง๋ค์ด ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ(์นด๋ ์ด๋ฆ, ์นด๋ ์ ํ, ์นด๋ id๋ฑ)๋ฅผ ๋ด๋ SO๋ฅผย ๋ง๋ค์์ต๋๋ค
์นด๋ ์ด๋ฏธ์ง(ํ๋ ์)์ ์ฌ๋ฌ text๋ค์ ๊ฐ์งย Object์ Item.cs๋ฅผ ์ปดํฌ๋ํธ๋ก ๋ฃ๊ณ , ์ธ์คํํฐ ์ฐฝ์์ Item.cs์ย SerializeField๋ฅผ ํตํด so๋ฅผ ๋ฃ์์ต๋๋ค.ย
CardSetUp.cs๋ฅผ ์ด์ฉํด ์ด๋ฆ, ๋น์ฉ, ํจ๊ณผ๋ฑ์ text์ ์ฐ๊ฒฐํด์ฃผ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์์ต๋๋ค.
๊ทธ ํ ์ด object๋ฅผ prefab์ผ๋ก ์ ์ฅํ์ต๋๋ค.
ํ๋ ์ด์ด ๋ฑ์ ์์๋ก List<Card>๋ก ๋ง๋ค์์ต๋๋ค.ย
์ด๋ฌ๋ฉด ๋ฑ์์ ์นด๋๋ฅผ ๋ฝ์ scene์ ์์ฑํ ๋๋ Deck์์ prefab์ instantiate๋ฅผ ํ์ฌ ์์ฑ์ ํ๋๋ฐ, ์ด๋ฌ๋ฉด ์์ดํ '์ฌ๋ณธ'์ ์์ฑํ๋ ๊ฒ์ด๋ผ ๊ณ ์ ์ ๋ฐ์ดํฐ ๋ฐ์์ด ๋๋๊ฒ๊ฐ์ง๋ ์์๋ฐ, ์ด๋ป๊ฒ ๊ตฌํ์ ํด์ผํ๋์งย ํผ๋์ด์ต๋๋ค
๋์์ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋คย
๋จธ๋ฆฟ์์์ ํผ๋์ด ์จ ๊ฒ์ ๊ธ๋ก ์ ๋๋ผ ๊ธ์ด ์ดํด๊ฐ ์๋์ค์๋ ์๋๋ฐ, ๋๊ธ ๋จ๊ฒจ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค ใ ใ
์์ฑํ๋ ค๋ ์นด๋๊ฐ ๋ฐ์ดํฐ ์์ (SO)๊ณผ ๋ค๋ฅธ ์ ์ ๊ฐ์ง๊ณ ์ถ์๋ฐ, ์ด๋ป๊ฒ ํ๋ฉด ์ข๊ฒ ๋๋๊ฑฐ์? ์ถ๊ฐ๋ก SO๊ฐ ์๋ ํญ๋ชฉ(int, string ๋ฑ)์ ๋ง๋ค์ด ๋ฃ์ด์ผ์ง
SO๋ ๋ณ๊ฒฝํ ์ ์๋ ์์ ๊ทธ์์ฒด๋ผ์ ์ ์ด์ ์นด๋๋ณ๋ก ๋ค๋ฅด๊ฒ ํ๊ณ ์ถ์ ํญ๋ชฉ (์. ํ์ฌ์ฒด๋ ฅ)์ ๋ฐ๋ก ํด์ผํจ.
https://rito15.github.io/posts/unity-study-rpg-inventory/
์ด๊ฑฐ ๋ณด๊ณ ํ๊ฑฐ์๋? ์ด๊ฒ๋ ์์ดํ ์๋ ๊ฐ์๊ฑด ๋ฐ๋ก ๋ฃ์๋๋ฐ
์ค ์๋ฆ๋๊ฒ๋ ๋ง์ต๋๋ค
์ ๊ฑฐ ๋ณด๊ณ ํ์ผ๋ฉด ๊ทธ๋๋ก ๋ฐ๋ผํด์ผ์ง;
๊ทธ๋ฌ๋ฉด ํ์ฌ๊น์ง ๊ตฌํํ๊ฒ์ ๋ง๊ณ , deck์์ ๋ฝ๋๋ค = ๊ณ ์ ์ Data์ SO๋ฐ์ดํฐ์ ํฉ์ ๊ป๋ฐ๊ธฐ ์ด๋ฏธ์ง์ text๋ค์ ์ฐ๊ฒฐํด์ค๋ค. ์ด๋ฐ์์ผ๋ก ์๊ฐํ๋ฉด ๋ ๊น์
์ ๊ทผ๋ฐ UI๊น์ง๋ ์๋๊ณ ๋จ์ํ Deck๊ณผ ์นด๋๋ค์ด๋ผ ์ฐธ๊ณ ๋ง ํ์ต๋๋ค
์์ง ์ธ๋ฒคํ ๋ฆฌ๋ฅผ ๋ง๋ค ์ค๋ ฅ์ ์๋๋ผ,, ์์ดํ -์์ดํ ๋ฐ์ดํฐ ๊ด๊ณ๋ง ์ฐธ๊ณ ํ์ต๋๋ค ใ
์์ธํ ์์ฝ๊ธดํ๋๋ฐ ๊ณ ์ ๋ ์์น์ ๋ณํ๋ ์์น๋ฅผ ๋ค๋ฃจ๋ ํด๋์ค๋ฅผ ๋ณ๊ฐ๋ก ๋๊ณ ์ฐ์ ์ด๊ธฐ๊ฐ๋ง ๊ณ ์ ๋ ๋ ์์์ ๊ฐ์ ธ์จ๋ค๋์ง ์๋๋ฉด reference๋ก ๋ค๊ณ ์์ ์ฝ๊ธฐ๋ง ํ๋์ง ํ์ฉ์ ์ ๋ง๋ฐ๋ผ์ ใ ใ
์.. ์ฝ๊ฐ ์นด๋ ์ด๋ฏธ์ง๋ฅผ ๊ณ ์ ๋ ์์น๋ฅผ ์ ๊ณตํด์ฃผ๋ ํด๋์ค๋ผ๊ณ ์๊ฐํด๋ณด๋ฉด ์ฌ์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค
๋ด์ผ ์ผ์ด๋์๋ง์ ํ๋ฒ ํด๋ณด๊ฒ ์ต๋๋ค ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค
DB๋ฅผ ๋ฐฐ์๋ณด๋๊ฒ ์ด๋?
๋ด์ผ๋ถํฐ ํ๋ฒ ๊ณต๋ถํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ ํ๋ธ๋ก ํํ ๋ฆฌ์ผ๊ฒฉ ๊ฐ์๋ถํฐ ๋ณด๋ ค๊ณ ์. ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค
๋๊ฐ์ ๊ฒฝ์ฐ๋ Slot.cs (์์ดํ ์ด ๋ค์ด๊ฐ ์ฌ๋กฏ ํ๋ฆฌํน) Inventory.cs (์ฌ๋กฏ์ ๊ด๋ฆฌํ๊ณ , ์์ดํ ์ ์ฌ๋กฏ์ ๋ฃ์ด์ฃผ๊ณ , ์ด๋ค ์์ดํ ์ ์ต๋ํ๋์ง, ๊ทธ ์์ดํ ์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ค๋ ์ญํ ) ItemTable.cs (์์ดํ ์ ๋ณด๋ค์ ๊ด๋ฆฌ) ์ด๋ฐ์์ผ๋ก ํ ๋ค์์
์ธ๋ฒคํ ๋ฆฌ์์ AcquireItem(int itemId) ๋ผ๋ ํจ์๋ก ์์ดํ ์ต๋ํ ๋ ์์ดํ ๋ฒํธ๋ฅผ ๋ฐ์. ๊ทธ ๋ค์์ ์ด ํจ์ ์์์ ItemTable ์คํฌ๋ฆฝํธ์ ์ ๋ณด๋ฅผ ํธ์ถํด์ ItemTable์์ ๊ตฌํํด๋์ ์์ดํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ด.
๋ต๋ณ๊ฐ์ฌํฉ๋๋ค! ํน์ ์ด๋ฐ ๊ธฐ๋ฅ๋ค์ ์ด์ง์ธ์ด๋ธ3 ์์ ์ผ๋ก ๊ตฌํํ๋๊ฒ ๋ง๋์?
๊ตฌํํ๋๊ฒ -> ๊ตฌํํ ์๋ ์๋๊ฒ
์ด์ง์ธ์ด๋ธ3 ์์ ์ ์์จ๋ดค๋๋ฐ ๊ทธ ์์ ์ด ํ๋ ์ญํ ์ ์ค๋ช ํด์ฃผ๋ฉด ใณ
๋ ์์ดํ ํ ์ด๋ธ(์์ดํ ์ ์ฌ๋ฌ๊ฐ์ง ์ ๋ณด๋ค์ด ๋ด๊ธด ํ ์ด๋ธ. ์์ดํ ID, ์ด๋ฆ, ํจ๊ณผ, ๊ตฌ๋งค ๋น์ฉ ๋ฑ)์ csv ๋ก ๋ง๋ค์ด๋์. ItemTable.cs ๋ ๊ทธ csv ํ์ผ์ ๋ถ๋ฌ์์, ๊ฐ ์์ดํ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก List ์ ๋ด์. List๋ List ํํ๋ก ๋ด์์ ์์ดํ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ ์ ์๊ฒ๋
๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ ์ฅ, ๋ก๋ํ ์์๊ฒ ๋์์ฃผ๋ ์์ ์ด๋ผ๊ณ ํ๋ค์. ์ํธํ ๊ธฐ๋ฅ๋ ์๋ค๊ณ ํฉ๋๋ค
๊ทธ๋ฌ๋ฉด ๊ฐ๋ฅํ์ง ์์๊น? ๋๋ ์์ดํ ํ ์ด๋ธ์ csv ๋ก ๊ตฌํํ ๋ค์์ ItemTable.cs ์์ ๊ทธ๊ฑธ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํด์์ List ์ ๋ฃ์๋ฟ์ด๋๊น
ํน์ ๊ทธ๋ฌ๋ฉด ์์ดํ ๋ค์ ๊ฐ๋ณ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ(์์ดํ ๊ฐํ๋ก ์ธํด ๊ธฐ์กด ๋ฐ์ดํฐ์๋ ๋ฌ๋ผ์ง ์ํฉ ๋ฑ)์๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ์๋์ง ์ฌ์ญค๋ด๋ ๋ ๊น์?
Slot.cs : ์์ดํ ๊ฐ์ฒด๊ฐ ๋ค์ด์์ ๋, ๊ทธ ๊ฐ์ฒด์ ์ ๋ณด๋ค์ ํ์ํด์ฃผ๋ ์ญํ Inventory.cs : ์์ดํ ์ต๋ํ์ ๋ -> (์ต๋ํ id๋ฅผ ๊ฐ์ง๊ณ ItemTable.cs ๋ฅผ ํธ์ถํด์ ์์ดํ ์ ๊ฐ์ฒด ์ ๋ณด๋ฅผ ๋ฐ์์ด, ๋ฐ์์จ ์์ดํ ๊ฐ์ฒด ์ ๋ณด๋ฅผ Slot ์ ๋ฃ์ด์ค) ItemTable.cs : csv๋ก ๋ง๋ค์ด์ง ์์ดํ ํ ์ด๋ธ์ ๋ก๋. List ์ผ๋ก ๋ง๋ค์ด๋ .
๋ด๊ฐ ํ๋ ๋ฐฉ๋ฒ์ด ๋ง๋๊ฑด์ง or ์ต์ ์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ๋๋ฐ, ๊ฐํํ์ ๋์ ์ฌ๋ผ๊ฐ ์์น๋ฅผ ์์ดํ ํ ์ด๋ธ ์์์ ํ๋์ ์ด(column)๋ก ๋ง๋ค์ด๋๊ณ ์) RefineIndex ๋ผ๋ ์ด ์์ฑ. ๊ทธ ๋ค์์ ์์ดํ ๊ฐ์ฒด ์ ๋ณด ์์ int itemId; string itemName; ์ด๋ฐ ์์ดํ ์ ๋ณด๋ค์ด ์๋ค๊ณ ํ์ ๋ int refineNumber; ์ด๋ผ๋ ์ ๋ณด๋ฅผ ์ถ๊ฐํด๋๊ณ , ๊ฐํ์์น ๋ํ๋๊ฑด + (refineNumber * RefineIndex) ํ๋ฉด ๋์ง ์์๊น?
๋ญ์ผ 110.15 ์์ฑ์๋ ์์ดํผ๊ฐ ๋๊ฐ๋ ใทใทใทใทใท
๊ฐํ๋ฅผ ํ์๋ ๊ทธ ๊ฐํ์์น์ ๋ฐฉํฅ์ฑ์ด ์ ํด์ ธ์๋ค๋ฉด ์ข์ ๋ฐฉ๋ฒ์ธ๊ฒ ๊ฐ์ต๋๋ค. ์น์ ํ ๋ต๋ณ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค..ใ ใ
๋ํ ๋ฆฌ๋์ด๋ ์ ํ๊ณ ์์ดํผ๊ฐ ๊ฐ๋ค๋ ๊ฑด๊ฐ์?
ใดใด ์๊น ์์ ๋๊ฐ ๋ต๋ณ๋จ๊ฑฐ ์์๋๋ฐ ๊ทธ ๋ต๋ณ์๋ 110.15 ์์ดํผ์ฌ์ ๊ทธ๋ฌ์. ๊ทผ๋ฐ ๊ทธ ๋๊ธ์ ์ญ์ ํ๋ค;
์ํ ์๋ฌดํผ ๋ต๋ณ๊ฐ์ฌํฉ๋๋ค. ์ด๋์ ๋ ๊ฐํผ๊ฐ ์กํ๊ฒ๊ฐ์์ ๊ธฐ๋ถ์ข๊ฒ ์ ๋ค ์ ์์๊ฒ ๊ฐ์ต๋๋ค. ์์ฑ์๋๋ ํธ์ํ ๋ฐค ๋์๊ธธ ๋ฐ๋๋๋ค ๊ฐ์ฌํฉ๋๋ค
์ ๊ทผ๋ฐ ๋ด๊ฐ ์ง๋ฌธ์ ์๋ชป์ดํดํ๋๋ฐ, ๋ด๊ตฌ๋์ฒ๋ผ ๊ณ์ ๋ณ๊ฒฝ๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ถ๋ค๋๊ฑฐ๊ตฌ๋. ๊ทธ ๋ณด๊ณ ์๋ github ๊ธ์ฒ๋ผ Item ํด๋์ค๋ ItemData ํด๋์ค๋ฅผ ๋๋ ์ ๊ด๋ฆฌํ๋ฉด ๋์ง ์์?
์ฌ๋์ค์ฒ๋ผ ๊ฐํ์ ์์น, ๋ฐฉํฅ์ฑ์ด ์ ํด์ ธ์๋ค๊ณ ๊ฐ์ ์ ํ๋ฉด์, ๋ฐ์ดํฐ ํ ์ด๋ธ์์ int level๋ฑ์ ์ถ๊ฐํด ๋ฐ์ดํฐ๋ค์ ์ ์ฅ์ํ๊ณ , github๊ธ์ฒ๋ผ ๋ถ๋ณ์ ๊ฐ๋ค๊ณผ ๋ณํ ์ ์๋ ๊ฐ๋ค์ ๋๋ ์ ๊ด๋ฆฌ๋ฅผ ํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ง ์ ๊ฐ ํผ๋์ด ์จ ๋ถ๋ถ์ ๋ฐ์ดํฐ๋ ๋ฐ๋ก ๊ด๋ฆฌํ๋ ค๊ณ ํ๋๋ฐ, ์ด๋ฅผ save, loadํ๋ ๊ฒ์ด ์๋ ๋จ์ prefab์ผ๋ก ํด๊ฒฐ์ ํ๋ ค๋ค ๋ณด๋ ์ข ๊ผฌ์ธ๊ฒ๊ฐ์ต๋๋ค
๊ทธ๋ฐ ๋ค์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ฉด ๊ทธ ์์ดํ ์ ๋ณด๋ฅผ Slot์ ๋ฃ์ด์ค. ์ธ๋ฒคํ ๋ฆฌ์ AcquireItem ํจ์ ์์์ ์ฌ๋กฏ์ AddItem(Item item)๋ฅผ ์คํ (์ด๋ ๋น ์ฌ๋กฏ์ด ์๋์ง, ๋์ผํ ์์ดํ ์ด ์๋์ง ๊ฒ์ฌ) ์์ดํ ํด๋์ค ๊ฐ์ฒด๋ฅผ ๋ฃ์ด์ค. ๊ทธ๋ฌ๋ฉด ์ฌ๋กฏ์์ ์์ดํ ๊ฐ์ฒด ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ดํ ์ด๋ฏธ์ง, ํ ์คํธ ๋ฑ ํ์
๋น๊ณ : ์นด์ดํธ๋ฅผ ๋๋ ค์ฃผ๋๊ฑด ๋๋ ์์ดํ ์์ด๋๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ณํ์๋, ์ด๋ฏธ ๋์ผํ ์์ด๋๋ฅผ ๊ฐ์ง ์์ดํ ์ด ์ฌ๋กฏ์ ์์ผ๋ฉด, ์นด์ดํธ๋ฅผ ๋๋ ค์ค. ๋์ผํ ์์ด๋๋ฅผ ๊ฐ์ง ์์ดํ ์ด ์๊ณ , ์ฌ๋กฏ์ด ๋จ์์์ผ๋ฉด ๊ทธ ์์ดํ ์ ์ฌ๋กฏ์ ์ถ๊ฐํด์ค