-
[๊ตฌํ] ์ ๋ํฐ๋ก ์ฝ๊ฒ ์ธ๋ฒคํ ๋ฆฌ ๊ตฌํํ๊ธฐ 1UNITY/PROJECT 2021. 12. 8. 16:42
์ธ๋ฒคํ ๋ฆฌ์ ๋ฃ์ด์ผ ํ๋ ์์ดํ ๊ฐ์๊ฐ ์์ฃผ ๋ง์ง๋ ์์ ๊ฒฝ์ฐ ์ข์ ๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ๋ค.
1. ์์ดํ ์ ๋ณด json์ ์ฅ
์์ดํ์ ๊ฒจ๋ฅํ์ฌ ์ด๋ ๊ฒ ์ผ๋๋ฐ ๊ผญ ์ด๋ ๊ฒ ์ํด๋ ๋๋ค
[
{
"Item": [
{(์ฒซ๋ฒ์งธ ์์ดํ ์ ์ ๋ณด)
"ID": (๊ณ ์ ๋ฒํธ),
"Name": [
{ "KOR": (ํ๊ธ์ด๋ฆ) },
{ "ENG": (์์ด์ด๋ฆ) }
],
"Detail": [
{ "KOR": (ํ๊ธ ์ค๋ช ) },
{ "ENG": (์์ด ์ค๋ช ) }
],
"Price" : (๊ฐ๊ฒฉ)
},{(๋๋ฒ์งธ ์์ดํ ์ ์ ๋ณด)},
...
]
},
{
"Hair": [
{(์ฒซ๋ฒ์งธ ๋จธ๋ฆฌ์ ์ ๋ณด)},{(๋๋ฒ์งธ ๋จธ๋ฆฌ์ ์ ๋ณด)},
...
]
}
{
"Outfit": [
{(์ฒซ๋ฒ์งธ ์์์ ์ ๋ณด)},
{(๋๋ฒ์งธ ์์์ ์ ๋ณด)},
...
]
}
๊ผด์ด๋ค.
2. ์์ดํ / ๋จธ๋ฆฌ/ ์์ ๊ฐ์ & ๋ณด์ ์ฌ๋ถ ์ ์ฅ
์ด๊ฑด ํ์ผ์ ๊ฐ์ ธ์ค๋ ๊ฒ ๋ฟ ์๋๋ผ ์ ์ฅ๋ ๊ฐ๋ฅํด์ผ ํ๋ฏ๋ก ์ ์ฅํ ํด๋์ค๋ฅผ ๋ง๋ค์๋ค.
์์ดํ ์ ๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ์์ด ๋จธ๋ฆฌ,์์๊ณผ ๋ค๋ฅธ๋ฐ ๋จธ๋ฆฌ, ์์์ ๊ฑฐ์ ํก์ฌํ๋ฏ๋ก
(์ด์ดํ ์ ์๋ ๊ฑฐ ๋ ์ด ์ ์๋๋ฐ ๋จธ๋ฆฌ, ์์์ ์๋จ)
์์ดํ ๋ฐ๋ก, ๋จธ๋ฆฌ ์์์ ๋ฐฐ์ด๋ก ๊ตฌํํ๋ค.(๊ฐ์ ์ฝ๋ ๋๋ฒ ์ฐ๊ธฐ ์ซ์ด์)
ํํ๋
{
"itemCounts": [ (์ฒซ ๋ฒ์งธ ์์ดํ ๋ณด์ ๊ฐ์), (๋ ๋ฒ์งธ ์์ดํ ๋ณด์ ๊ฐ์), ... ],
"have": [
{ "haveList": [ (์ฒซ ๋ฒ์งธ ๋จธ๋ฆฌ ๋ณด์ ์ฌ๋ถ), (๋ ๋ฒ์งธ ๋จธ๋ฆฌ ๋ณด์ ์ฌ๋ถ), ... ] },
{ "haveList": [ (์ฒซ ๋ฒ์งธ ์์ ๋ณด์ ์ฌ๋ถ), (๋ ๋ฒ์งธ ์์ ๋ณด์ ์ฌ๋ถ), ... ] }
]
}์ด๋ ๊ฒ ์ ์ฅํ๋ค.
๊ทผ๋ฐ, ๋ค์ค๋ฐฐ์ด์ ์ฌ์ฉํ๋ฉด jsonํ์ผ ๋ง๋ค ๋ ์ค๋ฅ๊ฐ ๋๋ค.
๊ทธ๋ ์ด๋ป๊ฒ ํ๋์ง ๋์ ํ ๊ธฐ์ต์ด ์๋์ ๋์ถฉ ์ด๋ด๊ฒ์ด๋ค~ ์ถ์ธกํด๋ณด๋ฉด
(๋๊ฐ์ด ๊ตฌํํด๋ณผ๋ ค๊ณ ํด๋ดค๋๋ฐ ์ ์๋๋ค...)
{ "itemCounts": [ 0, 0, 0, 0, 0, 0 ], "have": [ {[ false, false, false, false, false ]}, {[ false, false, false, false, false, false, false, false, false, false, false ]} ] }
์ด๋ฐ ์์ผ๋ก ์ ์ฅ์ด ๋์๋ ๊ฒ ๊ฐ๋ค.!!!ํ์คํ์ง ์์!!!
์ด์จ๋ ์ ์ฅ ์์ฒด๊ฐ ์ฝ์ด ์ฌ ์ ์๋, ์ค๋ฅ๋๋ ๋ฐฉ์์ผ๋ก ์ ์ฅ์ด ๋์ด์
์ด๋ป๊ฒ ๋๋ ์ค์ํ๊ฑด, ํด๋์ค๋ฅผ ์ฌ์ฉํด์ ํด๋์ค์ ๋ฐฐ์ด๋ก ๋ง๋ค์๋ค.
[System.Serializable] public class ItemCount { public int[] itemCounts; public Have[] have; public ItemCount(int itemNum, int hairNum, int outfitNum) { int[] itemCounts = new int[itemNum]; bool[] hairHave = new bool[hairNum]; bool[] outfitHave = new bool[outfitNum]; for (int i = 0; i < itemNum; i++) itemCounts[i] = 0; for (int i = 0; i < hairNum; i++) hairHave[i] = false; for (int i = 0; i < outfitNum; i++) outfitHave[i] = false; this.itemCounts = itemCounts; have = new Have[2]; have[0] = new Have(hairHave); have[1] = new Have(outfitHave); } public void SetItemCount(ItemCount itemCount) { itemCounts = itemCount.itemCounts; have = itemCount.have; } } [System.Serializable] public class Have { public bool[] haveList; public Have(bool[] _haveList) { haveList = _haveList; } }
๋ค์ค๋ฐฐ์ด๋ก ๋ง๋ค์ง ์๊ณ , ํด๋์ค์ ๋ฐฐ์ด๋ก ๋ง๋ค์ด ์ ์ฅํ ๋ฐฐ์ด์ ํด๋์ค ์์ผ๋ก ๋ฃ์ด๋ฒ๋ ธ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ฐฐ์ด ์์ ๋ฐฐ์ด๋ก ํค ๋ถ์ด์ ์์๊ฒ ์ ์ฅ์ด ๋๋ค.
๋ค๋ง ์์๊ณผ ํค์ด๊ฐ ๊ฐ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด ์ด๋ฆ์ ๋ฐ๊ฟ ์ ์๊ฒ ๋๊ธด ํ๋ค...
[System.Serializable]๋ ์ ์ฅํ ํด๋์ค๋ ๋ถ์ฌ์ฃผ์ด์ผ ํ๋ค๊ณ ํ๋ค.
{ "itemCounts": [ 0, 0, 0, 0, 0, 0 ], "have": [ { "haveList": [ false, false, false, false, false ] }, { "haveList": [ false, false, false, false, false, false, false, false, false, false, false ] } ] }
3. ์๋ค Json์ผ๋ก ๋ถ๋ฌ์ค๊ธฐ
public class ItemSaveLoad : MonoBehaviour { private JsonData itemInfoList; private ItemCount itemCountInfoMain; public void Awake() { itemInfoList = ItemInfoLoad(); int itemCountNum = itemInfoList[0][0].Count; int hairCountNum = itemInfoList[1][0].Count; int outfitCountNum = itemInfoList[2][0].Count; itemCountInfoMain = new ItemCount(itemCountNum, hairCountNum, outfitCountNum); } ... //์์ดํ ์ ๋ณด ๋ก๋ public JsonData ItemInfoLoad() { TextAsset tempGoodsJsonString = Resources.Load<TextAsset>("ItemList"); itemInfoList = JsonMapper.ToObject(tempGoodsJsonString.ToString()); return itemInfoList; } public JsonData GetJsonData() { return itemInfoList; } //์์ดํ ๊ฐ์ ๋ก๋ public void ItemCountInfoLoad() { if (File.Exists(FilePath.savePath +"/ItemCount.json")) { string tempCountJsonString = File.ReadAllText(FilePath.savePath +"/ItemCount.json"); ItemCount tempCountData = JsonUtility.FromJson<ItemCount>(tempCountJsonString); itemCountInfoMain.SetItemCount(tempCountData); } else return; } public void CountSave() { string tempCountJsonString = JsonUtility.ToJson(itemCountInfoMain); File.WriteAllText(FilePath.savePath + "/ItemCount.json", tempCountJsonString); } public ItemCount GetItemCount() { return itemCountInfoMain; } public void UpdateItemCount(ItemCount count) { itemCountInfoMain.SetItemCount(count); } public void SaveUpdate(ItemCount count) { UpdateItemCount(count); CountSave(); ItemCountInfoLoad(); GetComponent<LoadItems>().Refresh(); } }
๋ถ๋ฌ์ค๊ณ ์ ์ฅํ๊ณ ๋ค ํ๋ ํด๋์ค์ด๋ค.
LitJson์ ์ฌ์ฉํ์ผ๋ฉฐ(using LitJson ๊ผญ ์จ์ค์ผ ํ๋ค!)
๋ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ฌ๊ธฐ์ ์๋ itemCountMain๊ณผ itemInfoList์ ์์ดํ ์ ๋ณด ๋ถ๋ฌ์จ๊ฑฐ ์ ์ฅ ํด ๋๊ณ ,
๋ค๋ฅธ ์คํฌ๋ฆฝํธ์์๋ ์ด ๋ณ์๋ค์ ๊ฐ์ ๊ฐ์ ธ๋ค๊ฐ ์ผ๋ค.
4. ์ธ๋ฒคํ ๋ฆฌ ์ธํ ํ๊ธฐ
์์ดํ ์ ์ฌ๋ฌ์ข ๋ฅ๋๊น! ์ธ๋ฑ์ค ๋ฒํผ๊ณผ
์ฌ๋กฏ์ด ๋ค์ด๊ฐ ๋ฐ์ค๋ฅผ ๋ง๋ ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ์ค ์์ ์์ดํ ์ฌ๋กฏ๋ค์ด ๋ค์ด๊ฐ ์๋ฆฌ์ธ Scroll View๋ฅผ ๋ง๋ ๋ค.
์คํฌ๋กค ๋ทฐ ์ฌ์ด์ฆ ์กฐ์ ํ๋ ๊ฒ ๋จธ๋ฆฌ ์ํ๋ฐ
๊ตฌ๊ธ๋ง ํ์ ์ ์ ๋ง์ถฐ๋ณด์ธ์
content๊น์ง๋ ๊ธฐ๋ณธ์ ์ผ๋ก Scroll View๋ฅผ ๋ง๋ค๋ฉด ์์ฑ๋๋ ๊ฒ์ธ๋ฐ
์ content ๋ฐ slot์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ ์์ดํ ์ฌ๋กฏ๋ค์ด ๋ค์ด๊ฐ ์์ ์ด๋ค.
slot์ grid layout์ผ๋ก ๋์ด์์ด ๋ค์ด๊ฐ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
์ฐ๋ฆฌ๋ ์ธ๋ฒคํ ๋ฆฌ๋ฅผ
๋ฏธ๋ฆฌ ๋ง๋ค์ด๋์ ์์ดํ ์ฌ๋กฏ๋ค ์ค
์ธ๋ฒคํ ๋ฆฌ ํ๋ฉด์ ๋ค์ด์์ผ ํ๋ ๊ฒ๋ง
SetParent๋ฅผ ์ด์ฉํด slot ๋ฐ์ผ๋ก ๋ค์ด๊ฐ๊ฒ ๋๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค.
๊ทธ๋ผ ์์ดํ ์ฌ๋กฏ๋ค์ ๋ง๋ค์ด ๋ณด์!
5. ์์ดํ Object ์ค์
๋ชจ๋ ์์ดํ ์ ์ค๋ธ์ ํธ๋ก ๋ง๋ค์ด๋๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ณด๊ธฐ ์ข๊ฒ ์นดํ ๊ณ ๋ฆฌ ๋ณ๋ก ๋ฌถ๋๋ค.
ํ ์์ดํ ์ค๋ธ์ ํธ ์์๋
- Item id๊ฐ ์๋ ItemInfo ์คํฌ๋ฆฝํธ,
- ์์ดํ ์ ์์ด์ฝ(image๋ก ๋์ฒด ๊ฐ๋ฅ),
- ๋ณด์ ํ ์์ดํ ๊ฐ์๋ฅผ ๋ํ๋ผ ๋๊ทธ๋ผ๋ฏธ
๊ฐ ๋ค์ด์๋ค.
์ฌ๊ธฐ ๋ฒํผ ๋๋ฅด๋ฉด ์คํ๋๋ ํจ์๋ ๋๋ฅด๋ฉด ์์ดํ ์ ์ฌ์ฉํ ์ ์๋๋ก ์ฑ๊ฒจ๋ค์ด๊ฐ ์ ์๋ ํจ์์ด๋ค. (์ด ํฌ์คํ ์ ๋งฅ๋ฝ๊ณผ ๋ค๋ฅธ ๋ด์ฉ์ด๋ ๋ฌด์ ๊ฐ๋ฅ)
์์น๋ ํ -1000์ ๋๋ก ๋ฉ๋ฆฌ ๋ฉ๋ฆฌ ๋ณด๋ด์ ์ฐ๋ฆฌ ์คํฌ๋ฆฐ์๋ง ์ ๋ณด์ด๊ฒ ํ๋๋ก ํ๋ค.
์ฌ๊ธฐ๊น์ง ์ฌ์ ์ค๋น ๋! ๋ค์ ํฌ์คํธ์์๋ ์ธ๋ฒคํ ๋ฆฌ ์ฝ๋๋ฅผ ๊ตฌํํ๋๋ก ํ๊ฒ ๋ค.
'UNITY > PROJECT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๊ตฌํ] ์ ๋ํฐ๋ก ์ฝ๊ฒ ์์ ๊ตฌํํ๊ธฐ (0) 2021.12.08 [๊ตฌํ] ์ ๋ํฐ๋ก ์ฝ๊ฒ ์ธ๋ฒคํ ๋ฆฌ ๊ตฌํํ๊ธฐ 2 (0) 2021.12.08 [๊ตฌํ] ์ ๋ํฐ ํ ์คํธ ํ์ดํ ํจ๊ณผ (0) 2021.12.07 [๊ตฌํ] json ์ด์ฉ ์ ๋ํฐ ๋ด ๋ํ ๊ฐ๋จํ๊ฒ ๊ตฌํํ๊ธฐ 3 (0) 2021.12.07 [๊ตฌํ] json ์ด์ฉ ์ ๋ํฐ ๋ด ๋ํ ๊ฐ๋จํ๊ฒ ๊ตฌํํ๊ธฐ 2 (0) 2021.12.07