[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); // ๊ตฌ๋…ํ•  ํ•จ์ˆ˜๋Š” ์ฐฝ๊ณ /ํ”Œ๋ ˆ์ด์–ด ๊ฐ์ž๋”ฐ๋กœ ๊ตฌํ˜„

}




๊ทธ๋ฆฌ๊ณ  ์žฌ๋ฐŒ๋Š”๊ฑธ ๋ฐœ๊ฒฌํ•จ

a16711aa372a76b660b8f68b12d21a1dd584d734c6


์ธ๋ฒคํ† ๋ฆฌ ์‚ฌ์ด์ฆˆ 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]);

ย  ย  ย  ย  }

ย  ย  }


}