ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๊ตฌํ˜„] ์œ ๋‹ˆํ‹ฐ๋กœ ์‰ฝ๊ฒŒ ์ธ๋ฒคํ† ๋ฆฌ ๊ตฌํ˜„ํ•˜๊ธฐ 2
    UNITY/PROJECT 2021. 12. 8. 17:08

    1. ์ธ๋ฒคํ† ๋ฆฌ ์ƒ๋‹จ ์นดํ…Œ๊ณ ๋ฆฌ ์Šค์œ„์น˜

    ๊ฐ ๋ฒ„ํŠผ์—๋Š” SetIndex๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด ์ค€๋‹ค.

    ๋ˆ„๋ฅธ ๋ฒ„ํŠผ์ด ๋ช‡ ๋ฒˆ์ธ์ง€๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„ ํ•ด๋‹น ์ˆ˜์— ๋งž๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

    public class SelectIndex : MonoBehaviour
    {
        public InventoryIndex index = InventoryIndex.Item;
        public GameObject indexes;
    
        private LoadItems loadItems;
        private GameObject[] indexObj;
        private Color deselect = new Color(0.8f, 0.8f, 0.8f);
    
        private void Start()
        {
            loadItems = GetComponent<LoadItems>();
            indexObj = new GameObject[3]{ indexes.transform.GetChild(0).gameObject, indexes.transform.GetChild(1).gameObject, indexes.transform.GetChild(2).gameObject };
            MarkIndex();
        }
    
        public void SetIndex(int selectedIndex)
        {
            int beforeIndex = (int)index;
            switch (selectedIndex)
            {
                case 1:
                    index = InventoryIndex.Item;
                    break;
                case 2:
                    index = InventoryIndex.Hair;
                    break;
                case 3:
                    index = InventoryIndex.Outfit;
                    break;
            }
            MarkIndex();
    
            loadItems.ResetGoods(beforeIndex);
            loadItems.Refresh();
        }
    
        public void MarkIndex()
        {
            indexObj[((int)index)].GetComponent<Image>().color = Color.white;
            indexObj[(((int)index) + 1) % 3].GetComponent<Image>().color = deselect;
            indexObj[(((int)index) + 2) % 3].GetComponent<Image>().color = deselect;
            GetComponent<TurnIcon>().CheckIndexItems();
        }
    }

    loadItems๋Š” ์ธ๋ฒคํ† ๋ฆฌ์˜ ์•„์ดํ…œ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ ์žˆ๋Š” ์ฝ”๋“œ์ด๋‹ค.

     

    index๋Š” ํ˜„์žฌ ๋ณด์—ฌ์ง€๊ณ  ์žˆ๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ๋ช‡ ๋ฒˆ ์ธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ณ€์ˆ˜์ด๋‹ค.

    ๋ชจ๋‘ ์ด ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ๋‹ค๊ฐ€ ํ˜„์žฌ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ํ™•์ธํ•  ๊ฒƒ์ด๋‹ค.

     

    ๋ˆŒ๋ฆฐ ๋ฒ„ํŠผ์ด ๋ช‡ ๋ฒˆ์ด์—ˆ๋Š”์ง€์— ๋”ฐ๋ผ  index๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.

    MarkIndex๋Š” ๋ˆŒ๋ฆฐ ๋ฒ„ํŠผ ์™ธ ๋‹ค๋ฅธ ๋ฒ„ํŠผ๋“ค์˜ ์ƒ‰์ƒ์„ ํฐ์ƒ‰์—์„œ ํšŒ์ƒ‰์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

     

    2. Item ์ธ๋ฒคํ† ๋ฆฌ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

    ์šฐ๋ฆฌ๋Š” ์ƒ์ ๋„ ํ•  ๊ณ„ํš์ด๊ธฐ ๋•Œ๋ฌธ์—

    ์ƒ์ ๊ณผ ์ธ๋ฒคํ† ๋ฆฌ์˜ ๊ณตํ†ต์ ์ธ

    ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋ฐ”๊ฟ€ ๋•Œ ์šฐ๋ฆฌ  ๋ฌผ๊ฑด ์œ„์น˜๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์™€,

    ๊ฐœ์ˆ˜๊ฐ€ ํ•œ ๋ฉด์— ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฐœ์ˆ˜๋ฅผ ๋„˜๊ฒผ์„ ๋•Œ ์ธ๋ฒคํ† ๋ฆฌ์˜ scrollview๋ฅผ ํ™•์žฅํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋งŒ ์ž‘์„ฑํ•˜์—ฌ

    LoadItem์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์ƒ์†๋ฐ›์•„

    ๊ฐ์ž์— ํŠนํ™”๋œ LoadInventory, LoadStore ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค ๊ฒƒ ์ด๋‹ค.

    ์ฝ์–ด ๋ณด๋ฉด ์ดํ•ด๊ฐ€ ๊ฐ€๋Š” ์ฝ”๋“œ์ผ ๊ฒƒ์ด๋‹ค.

    ์ ์ ˆํ•œ ๊ณณ์— Refreshํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉฐ ์‚ฌ์šฉํ–ˆ๋‹ค.

    public class LoadItems : MonoBehaviour
    {
        ...
    
        public virtual void Refresh() { }
    
        //๋ฌผ๊ฑด ์œ„์น˜ ์ดˆ๊ธฐํ™”
        public void ResetGoods(int indexNumToReset)
        {
            goods = GameObject.FindGameObjectsWithTag(ItemIndex.itemsIndexString[indexNumToReset]);
            for (int i = 0; i < goods.Length; i++)
            {
                goods[i].transform.SetParent(itemInitPosition.transform.GetChild(ItemIndex.itemsIndexInt[indexNumToReset]));
                goods[i].transform.position = new Vector3(-1000, 0, 0);
            }
        }
    
        //์•„์ดํ…œ ๊ฐœ์ˆ˜์— ๋งž์ถฐ ์ธ๋ฒคํ† ๋ฆฌ ํ™•์žฅ ๋ฉ”์†Œ๋“œ
        public void ExpandInventory()
        {
            if (inventorySlotBox.transform.childCount > goodsMaxWatch)
            {
                {
                    int goodsNeedExpand = goods.Length - goodsMaxWatch;
                    for (; goodsNeedExpand > 0; goodsNeedExpand -= goodsOneLine)
                    {
                        inventorySlotBox.transform.parent.GetComponent<RectTransform>().sizeDelta = new Vector2(inventoryWidth, inventoryHeight += 130);
                    }
                }
            }
            else
            {
                inventorySlotBox.transform.parent.GetComponent<RectTransform>().sizeDelta = new Vector2(inventoryWidth, inventoryHeightOri);
                inventoryHeight = 400;
            }
        }
    }

    ๋‹ค์Œ์€ Load Inventory๋‹ค.

    public class LoadInventory : LoadItems
    {
        private GameObject[] goods;
        private SelectIndex selectIndex;
        private ItemCount itemCount;
    
        private void Start()
        {
            selectIndex = GetComponent<SelectIndex>();   
        }
    
        //์ธ๋ฒคํ† ๋ฆฌ ์•„์ดํ…œ ๋กœ๋“œ
        public override void Refresh()
        {
            goods = GameObject.FindGameObjectsWithTag(selectIndex.index.ToString());
            itemCount = GetComponent<ItemSaveLoad>().GetItemCount();
    
            int selectIndexNum = (int)selectIndex.index;
    
            if (selectIndexNum == ((int)InventoryIndex.Item))
                RefreshItem();
            else
                RefreshGoods(selectIndexNum);
    
            ExpandInventory();
        }
    
        private void RefreshItem()
        {
            for (int i = 0; i < goods.Length; i++)
            {
                int id = goods[i].GetComponent<ItemInfo>().id - 1;
                int count;
                if ((count = itemCount.itemCounts[id]) > 0)
                {
                    if (GetComponent<PackingItems>().GetPackedItems().Contains(goods[i]))//์ด ์•„์ดํ…œ์ด ๊ฐ€๋ฐฉ์— ์žˆ๋Š” ์•„์ดํ…œ์ด๋ฉด
                        count--;
                    goods[i].transform.GetChild(1).GetChild(0).gameObject.GetComponent<UnityEngine.UI.Text>().text = count.ToString();
    
                    if (count > 0)
                        goods[i].transform.SetParent(inventorySlotBox.transform);
                }
    
            }
        }
    
        private void RefreshGoods(int selectIndexNum)
        {
            for (int i = 0; i < goods.Length; i++)
            {
                int id = goods[i].GetComponent<ItemInfo>().id - 1;
    
                if (itemCount.have[selectIndexNum - 1].haveList[id])
                    goods[i].transform.SetParent(inventorySlotBox.transform);
    
            }
        }
    }

    Refresh์—์„œ ํ˜„์žฌ ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์•„์ดํ…œ์ธ ๊ฒฝ์šฐ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

    ์•„์ดํ…œ์ธ ๊ฒฝ์šฐ RefreshItem์„ ์‹คํ–‰์‹œํ‚ค๋Š”๋ฐ,

    ์šฐ๋ฆฌ ๊ฒŒ์ž„์—์„œ๋Š” ์•„์ดํ…œ์„ ๊ฐ€๋ฐฉ์— ๋„ฃ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.

    ๋”ฐ๋ผ์„œ ์•„์ดํ…œ์ด ๊ฐ€๋ฐฉ์— ๋“ค์–ด์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ€๋ฐฉ์— ๋“ค์–ด์žˆ๋Š” ์•„์ดํ…œ ํฌํ•จํ•˜์—ฌ ๊ฐœ์ˆ˜๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.

    ๊ทธ๋ž˜์„œ ๊ฐ€๋ฐฉ์— ๋“ค์–ด์žˆ๋Š” ์•„์ดํ…œ์€ ์ด ์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐœ์ˆ˜๋ฅผ 1 ๋นผ์„œ ์Šคํฌ๋ฆฐ์— ๋ณด์—ฌ์ค€๋‹ค.

    ๊ทผ๋ฐ ๋ญ ์ด ๊ธฐ๋Šฅ์ด ํ•„์š” ์—†๋Š” ๊ฒŒ์ž„์€ ์•Œ์•„์„œ ๋นผ๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

    ์ผ๋‹จ ํฌ๊ฒŒ๋Š” 0๊ฐœ ์ด์ƒ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์•„์ดํ…œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์™€ slot์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

     

    RefreshGoods์—์„œ๋Š” ๊ทธ๋ƒฅ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฒŒ ํ™•์ธ์ด ๋˜๋ฉด slot์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

     

    ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ธ๋ฒคํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐ ๋!

    ์ธ๋ฒคํ† ๋ฆฌ์˜ ์•„์ดํ…œ์„ ๋ˆŒ๋ €์„ ๋•Œ ์ผ์–ด๋‚˜๋Š” ์ผ์€ ๊ฐ์ž์— ๋งž์ถฐ์„œ ๊ตฌํ˜„ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

    ๋‚˜๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋จธ๋ฆฌ, ์˜์ƒ์€ ์ฐฉ์šฉ์ด ๋˜๊ณ  ์•„์ดํ…œ์€ ๊ฐ€๋ฐฉ์— ๋“ค์–ด๊ฐ€๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.

Designed by Tistory.