[System.Serializable]
public abstract class InventoryHolder : MonoBehaviour // ์ถ์ํด๋์ค
{
ย ย [SerializeField] private int inventorySize; // ์ธ๋ฒคํ ๋ฆฌ ํฌ๊ธฐ
ย ย [SerializeField] protected InventorySystem primaryInventorySystem;
ย ย [SerializeField] protected int offset = 10; // ํต์ฌ๋กฏ์ ์ํ ์คํ์ (๋งค์ฐ์ค์)
ย ย [SerializeField] protected int _gold;
ย ย public int Offset => offset;
ย ย public InventorySystem PrimaryInventorySystem => primaryInventorySystem;
ย ย // ๋์ ์ธ๋ฒคํ ๋ฆฌ(์ฐฝ๊ณ ) ํ๋ฉด์ ์ถ๋ ฅํด์ผ ํ๋ ๊ฒฝ์ฐ
ย ย public static UnityAction<InventorySystem, int> OnDynamicInventoryDisplayRequested;
ย ย protected virtual void Awake()
ย ย {
ย ย ย ย SaveLoad.OnLoadGame += LoadInventory; // ๊ฒ์๋ก๋ ์ด๋ฒคํธ์ ๊ตฌ๋
ย ย ย ย primaryInventorySystem = new InventorySystem(inventorySize);
ย ย }
ย ย private void OnDisable()
ย ย {
ย ย ย ย SaveLoad.OnLoadGame -= LoadInventory;
ย ย }
ย ย protected abstract void LoadInventory(SaveData saveData); // ๊ตฌ๋ ํ ํจ์๋ ์ฐฝ๊ณ /ํ๋ ์ด์ด ๊ฐ์๋ฐ๋ก ๊ตฌํ
}
์ธ๋ฒคํ ๋ฆฌ ์ฌ์ด์ฆ 40์ ๋ง๋ค๊ณ ์ด๋๋ก ์ธ๋ฒคํ ๋ฆฌ ์ฌ๋กฏ์ 40์นธ๋งํผ ๋ง๋ค์ด์ ๋ณด๋ฉด ์ธ๋ฒคํ ๋ฆฌ ์ฌ๋กฏ 40์ด๋ผ ์ ํ๊ฑฐ ๋ณด์ผ๊ฑฐ์ ์์.
๊ทผ๋ฐ ๋ฐ์ผ๋ก ๋ด๋ ค๋ณด๋ฉด ๋ ๋ค๋ฅธ ๊ณณ์์ ๋ ๋ค๋ฆ๊ฒ ์ถ๋ ฅ๋๋๋ฐ๋ ์ธ๋ฒคํ ๋ฆฌ ์ฌ๋กฏ์ด 0์ด๋ผ ๋ธ. ์ผ๋จ ๋ฐฅ๋จน๋์ค์ด๋ผ ์ด๋ฐ๊ฐ ๋ค์ํด๋ด...
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StaticInventoryDisplay : InventoryDisplay
{
ย ย [SerializeField] private InventoryHolder inventoryHolder;
ย ย [SerializeField] private InventorySlot_UI[] slots;
ย ย private void OnEnable()
ย ย {
ย ย ย ย PlayerInventoryHolder.OnPlayerInventoryChanged += RefreshStaticDisplay;
ย ย }
ย ย private void OnDisable()
ย ย {
ย ย ย ย PlayerInventoryHolder.OnPlayerInventoryChanged -= RefreshStaticDisplay;
ย ย }
ย ย private void RefreshStaticDisplay()
ย ย {
ย ย ย ย if (inventoryHolder != null)
ย ย ย ย {
ย ย ย ย ย ย inventorySystem = inventoryHolder.PrimaryInventorySystem;
ย ย ย ย ย ย // ์์๋ฐ์ ์ถ์ํด๋์ค ๋ด์์ ๊ตฌํ๋จ
ย ย ย ย ย ย inventorySystem.OnInventorySlotChanged += UpdateSlot; // InventoryDisplay ์ถ์ํด๋์ค์ ๊ตฌํ๋ ํจ์
ย ย ย ย }
ย ย ย ย else Debug.Log("์ธ๋ฒคํ ๋ฆฌ ํ ๋น๋์ง ์์ " + this.gameObject);
ย ย ย ย Debug.Log(inventorySystem.InventorySize); // 40 ๋ฉ์ฉกํ๊ฒ ๋์ด
ย ย ย ย AssignSlot(inventorySystem, 0);
ย ย }
ย ย protected override void Start()
ย ย {
ย ย ย ย base.Start();
ย ย }
ย ย // ์ธ๋ฒคํ ๋ฆฌ ์์คํ ์ ์ธ๋ฒคํ ๋ฆฌ ์ฌ๋กฏ ๋ฆฌ์คํธ๋ฅผ ์ฌ๋กฏUI์ ์ฎ๊ธฐ๋ ์์
ย ย public override void AssignSlot(InventorySystem invToDisplay, int offset)
ย ย {
ย ย ย ย slotDictionary = new Dictionary<InventorySlot_UI, InventorySlot>();
ย ย ย ย // ์ด๊ฒ ์ 0์ด ๋์ฌ๊น
ย ย ย ย Debug.Log("inventorySystem.InventorySlots : "+inventorySystem.InventorySlots.Count);
ย ย ย ย // 0๋ฒ๋ถํฐ ์คํ์ (ํต์ฌ๋กฏ ํฌ๊ธฐ)๊น์ง ์ธ๋ฒคํ ๋ฆฌ ์ด๊ธฐํ
ย ย ย ย for (int i = 0; i < 10; ++i)
ย ย ย ย {
ย ย ย ย ย ย // ์ฌ๋กฏUI์ ์ธ๋ฒคํ ๋ฆฌ ์์คํ ์ ์ฌ๋กฏ๋ฆฌ์คํธ๋ฅผ ๊ทธ๋๋ก ์ฎ๊ธฐ๊ธฐ
ย ย ย ย ย ย slotDictionary.Add(slots[i], inventorySystem.InventorySlots[i]);
ย ย ย ย ย ย slots[i].Init(inventorySystem.InventorySlots[i]);
ย ย ย ย }
ย ย }
}
inventorySystem.InventorySize๋ inventorySystem.InventorySlots.Count ๊ฐ์ ๊ฐ์ ธ์ค๋ ํ๋กํผํฐ์ผ?
ํ๋ฆ์ ์ค๋ช ํ ๊ฒ์. 1. ์ธ๋ฒคํ ๋ฆฌ ํ๋์์ size๋ฅผ ์ธ์คํํฐ์์์ ์์ ํจ. ๊ทธ๊ฒ ์๊น ์ ๊ธ์์ ๋ณธ 40 ๊ทธ๊ฑฐ์์. 2. ์ธ๋ฒคํ ๋ฆฌ ํ๋์์ ๊ทธ size์ ๋ง์ถ์ด ์ธ๋ฒคํ ๋ฆฌ ์์คํ ํด๋์ค์ ์์ฑ์ ํธ์ถํจ. 40์ ๋๊ฒจ์ฃผ๋ฉด์ ์ธ๋ฒคํ ๋ฆฌ ์์คํ ์์ฑ์๊ฐ ํธ์ถ๋จ 3. ์ธ๋ฒคํ ๋ฆฌ ์์คํ ์์ ์์ฑ์๊ฐ ํธ์ถ๋๋ฉด ๊ทธ ์ฌ์ด์ฆ๋งํผ ์ธ๋ฒคํ ๋ฆฌ ์ฌ๋กฏ์ด ๋ค์ด๊ฐ๋ InventorySlots ๋ฆฌ์คํธ๊ฐ ํ ๋น๋จ. ์ ์ฌ์ง์์ ๋๋ฒ์งธ ๋ก๊ทธ๊ฐ ์ด ๋ฆฌ์คํธ์ ํฌ๊ธฐ๋ฅผ ์ฐ์๊ฑฐ์. inventorySystem.InventorySize๋ ์ธ๋ฒคํ ๋ฆฌ ์ฌ๋กฏ์ ์นด์ดํธ๊ฐ ๋ค์ด๊ฐ. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ๋ง๋๋ก ์ฌ์ด์ฆ๋ ์ฌ๋กฏ์ ์นด์ดํธ๋ฅผ ๊ฐ์ ธ์ค๋ ํ๋กํผํฐ ๋ง์. ๊ทผ๋ฐ ๋ค์ํด๋ณด๋๊น ๊ทธ๋ฅ ์ธ๋ฒคํ ๋ฆฌ ํ๋์ ์ธ๋ฒคํ ๋ฆฌ ์์คํ ์ ๊ฐ์ ธ์ค๋๊ฒ ์ ์๊ฐ์ ธ์์ง๋๋ด. ๊ทธ๋ฅ ์ ์ด์ ์ ์ฝ๋ ๊ทธ๋๋ก
์ฝ๋ ๊ทธ๋๋ก ํ๋ฆฌํน์ด ์๋๋ผ ์ฌ์ ์ง์ ๋ฐฐ์นํด์ ์ธ์คํด์ค๋ฅผ ์ฐ๊ฒฐํ๋ฉด ๊ทธ๋ฅ ์ด์ํ๊ฑฐ ์์ด ์๋๋๊ฑฐ๋ณด๋ฉด ํ๋ฆฌํน์ ์๋๊ฑธ ๊ฐ์ ธ๋ค ์ฐ๊ณ ๊ฒ์์ด ์์๋๋ฉด์ ๋ญ๊ฐ ์ ๋ฌ์ด ์์๋๋๊ฑด๊ฐ๋ด.
๊ฒฐ๊ตญ ๋ก๊ทธ๋๋ก ๋ฐ์ ธ๋ณด๋ฉด ์ธ๋ฒคํ ๋ฆฌ ์์คํ ๋ด์์ ์ธ๋ฒคํ ๋ฆฌ ์ฌ๋กฏ ๋ฆฌ์คํธ๊น์ง ์ ๋ง๋ค์ด์ง๋จ๋ง์ด์ฃ . ์นด์ดํธ 40 ๊ทธ๋๋ก ๋์ค๋๊ฑฐ๋ณด๋ฉด ์ธ๋ฒคํ ๋ฆฌ ์ฌ์ด์ฆ๋ ์๋ค์ด๊ฐ๊ณ ์ฌ๋กฏ๋ฆฌ์คํธ๋ ์๋๋๋ฐ ๊ทธ ๋ฆฌ์คํธ๊ฐ ๊ฐ์๊ธฐ ์ธ๋ฒคํ ๋ฆฌ๋ฅผ ๋ง๋๋ StaticInventoryDisplay ํด๋์ค๋ก ๋์ด์ค๋ ์๊ฐ ์์ด์ง.
์ ๊ฐ ์ด๋ณด๋ผ์ ์ง๊ธ์ ํด๊ฒฐ๋ถ๊ฐ๋ฅ ํ์ ๋ด๋ฆฌ๊ณ ๊ฒ์๋งค๋์ ์์ ํด์ ์บ๋ฆญํฐ๋ฅผ ํ๋ฆฌํน์ ์์ฑํ๋๊ฒ ์๋๋ผ ๊ฑ ์ฌ์ ๋ฐฐ์นํด๋๊ณ ๊ทธ์ํ์์ ์ด๊ธฐํํ๋๊ฑฐ๋ก ๋ฐ๊ฟ ใ ใ ๋๋ฆ ๊ทธ๋๋ 5์๊ฐ ์ณ๋ฐ์๋๋ฐ ์ธ๋ฒคํ ๋ฆฌ ๊ตฌ์กฐ ๋๋ถ์ ์ ์ ํ ๋ค๋ค์ ธ๋ณด๋ฉด์ ์ดํดํ๋ค๊ณ ์๊ฐํด์ผํ ๋ฏ.. ๋์์ฃผ๋ ค๊ณ ํด์ ๊ฐ์ฌํด์ ๊ทธ๋๋
๋ด๊ฐ ํ์คํ ํ์ ํ๋ ๋ชจ๋ฅด๊ฒ ๋๋ฐ, inventorySystem.InventorySize๋ ํ๋ฆฌํน์ด๋ ์ด๋ฏธ ์กด์ฌํ๋ ์ค๋ธ์ ํธ ํ๋กํผํฐ๋ก ์จ๋์ ์ธ์์ด ๋๋๋ฐ, ๋ฐฐ์ด ์ด๊ธฐํ๋ฅผ ์ ํ ์ํ๋ผ์ Count๋ 0์ผ๋ก ๋จ๋๊ฑฐ ์๋? ์ inventorySystem์ด๋๊ฒ ์ด๋์ ์กด์ฌํ๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์์ํ ์์ ํด๋์ค์ ์ ์ํด๋์ ๋ณ์์ผ์๋ ์๊ฒ ๋ค๋ง ์ ๊ฑฐ ์์ฒด๊ฐ ์ด๊ธฐํ๊ฐ ์ ๋ ์ํ๋ผ๊ฑฐ๋. ์๋๋ฉด ์ ๊ฒ ๋ฆฌ์คํธ ๊ฐ์ ๊ฐ๋ณํ ๋ฐฐ์ด์ด๊ณ ์์ ๋ ๊ฒ ์์ด์ 0์ผ๋ก ๋ฌ๋ค๊ฑฐ๋.
๋ต๋ณ ๋๋ฌด ๊ฐ์ฌํฉ๋๋ค. ์ด๋ณด๋ผ์ ์ ๊ฐ ์ ๊ฑฐ ํด๊ฒฐํ๊ฒ ๋ต์๊ณ ์จ๊ฐ๊ฒ์ ๋ช์๊ฐ๋์ ํ๋๋ ๋๋ฌด ์ง์ณ์ ์ฒด๋ ฅ๋ค๋นจ๋ ค๊ฐ์ง๊ณ ๊ทธ๋ฅ ๋ํผํ์ด์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์จ์ ํ๋ฆฌํน ์์ฑ์ด ์๋๋ผ ๊ฑ ์ฌ์ ์บ๋ฆญํฐ ์ฒ์๋ถํฐ ๋ฐฐ์น์์ผ๋๋ ๋ฐฉ๋ฒ์จ์ ๋ํผํ๋๋ฐ ์ฑ๊ณตํจ...
๋ญ ์ด๋ป๊ฒ๋ ๋ชจ๋ฉดํ์ผ๋ ๋คํ์ ๋คํ์ ๋๋ค.