ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๊ตฌํ˜„] ์œ ๋‹ˆํ‹ฐ๋กœ ์‰ฝ๊ฒŒ ์ธ๋ฒคํ† ๋ฆฌ ๊ตฌํ˜„ํ•˜๊ธฐ 1
    UNITY/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์ •๋„๋กœ ๋ฉ€๋ฆฌ ๋ฉ€๋ฆฌ ๋ณด๋‚ด์„œ ์šฐ๋ฆฌ ์Šคํฌ๋ฆฐ์—๋งŒ ์•ˆ ๋ณด์ด๊ฒŒ ํ•˜๋„๋ก ํ•œ๋‹ค.

     

    ์—ฌ๊ธฐ๊นŒ์ง€ ์‚ฌ์ „ ์ค€๋น„ ๋! ๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ธ๋ฒคํ† ๋ฆฌ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

     

     

Designed by Tistory.