[๐ฃ์ง๋ฌธ]
๋ด๋น ์ ๋ํฐ6 interface ๊ด๋ จ ์ง๋ฌธ์ด ์์ต๋๋ค.
์ง๊ฐ๋ค(slwhswk)
2024-12-12 04:14
์ถ์ฒ 0
public class UI_ItemSlot : MonoBehaviour, IPointerDownHandler
{
[SerializeField] private Image itemImage;
[SerializeField] private TextMeshProUGUI itemText;
public InventoryItem item;
public void CleanUpSlot()
{
...
}
public void UpdateSlot(InventoryItem _newItem)
{
...
}
public virtual void OnPointerDown(PointerEventData eventData)
{
if (item.data?.itemType == ItemType.Equipment)
{
Debug.Log(item?.data);
Inventory.instance.Equipment(item.data);
}
}
}
public class UI_EquipmentSlot : UI_ItemSlot
{
public EquipmentType slotType;
private void OnValidate()
{
gameObject.name = "Equipment slot - " + slotType.ToString();
}
public override void OnPointerDown(PointerEventData eventData)
{ย ย ย ย
ย ย ย ย ย ย ย Debug.Log("Pointer Equipment");
Inventory.instance.Unequipment(item.data as ItemData_Equipment);
CleanUpSlot();
}
}
์์ ๊ฐ์ ์ฝ๋์์ OnPointerDown ์ด๋ฒคํธ๋ฅผ ๋ฐ์์์ผ์ผ ํ๋๋ฐ์.
UI_EquipmentSlot ์์๋ OnPointerDown ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.. OnValidate ๋ ์ ์๋ํ๊ตฌ์.
base.OnPointerDown() ๋ ํด๋ณด์์ง๋ง ๋ฐ๋ํ์ง ์์์ต๋๋ค.
UI_EquipmentSlot ์ ์ฌ๋กฏ์ ํด๋ฆญํ๋ฉด UI_ItemSlot ์ OnPointerDown ์ ์คํ์ด ๋ฉ๋๋ค.
๋ค๋ง item ์ ์ง์ด๋ฃ์ ์ํ์์๋ item.data <- ๋ฅผ ์ธ์ํ์ง ๋ชปํฉ๋๋ค. ๋ค๋ฅธ ์นธ์์๋ ์ธ์์ด ์ ๋๋ ์ํ์
๋๋ค.
๋ญ๊ฐ ๋ฌธ์ ์ธ์ง ๊ฑฐ๊พธ๋ก ์ฌ๋ผ๊ฐ๋ฉด์ ๋๋ฒ๊ทธ๋ฅผ ์๋ํด๋ณด์์ง๋ง ์์๊ฐ ์งธ ํด๊ฒฐ์ด ์๋์ ์ฌ์ญค๋ด
๋๋ค..ย
์ฐธ๊ณ ์์ ๋จ๊ฒจ๋๋ฆฝ๋๋ค.
๊ฒ์ ๊ฐ๋ฐํ๋ ์ง์ธ์ด ์๋ค๋ณด๋ ์ฌ๊ธฐ์ ์ง๋ฌธ๊ธ ๋จ๊ธฐ๊ฒ ๋์์ต๋๋ค. ใ
๋์์ค์..
๋๊ฐ UI_ItemSlot์ ์์๋ฐ์ ์ ์์ ์ค๋ฒ๋ผ์ด๋๋ฅผ ํ๋๋ฐ UI_ItemSlot์ ์๋๊ฒ ํธ์ถ๋ ์๊ฐ ์์ง. ์ ๊ฑธ ์คํํด์ฃผ๊ณ ์ถ์๊ฑฐ๋ฉด ์๋์ UI_ItemSlot ์์๋ฐ์์ ๋ง๋ ํด๋์ค์ ์ค๋ฒ๋ผ์ด๋ ํจ์์ ์คํํด์ฃผ๊ณ ์ถ์ ๋จ์ base.OnPointerDown(์ธ์๊ฐ)
์ด๋ฐ๊ฑด c# ๊ธฐ์ด ๋ถ๋ถ์ ํด๋นํ๋๊ฑฐ๋ผ c# ์์ ๊ฒ์ํด์ ์ฐพ์ผ๋ฉด ๋์ฌ๊ฑฐ์ ์๋ง๋?
์๋๋ฉด c# virtual ํจ์๋ผ๋๊ฐ
๋ฌธ์ ๊ฐ ํด๊ฒฐ์ด ๋์์ต๋๋ค. UI_EquipmentSlot ์์ UI_Slot ์ OnPointerDown ์ด๋ฒคํธ๋ฅผ ์์๋ฐ์์ ์ฌ์ฉํด์ผ ํ๋๋ฐ. ๋๋น์ฒด UI_EquipmentSlot์ OnPointerDown ์์ฒด๊ฐ ํธ์ถ์ด ์๋๋ค ๋ณด๋ ์ด๋ป๊ฒ ๋๋ ์ถ์๋๋ฐ Text ์ชฝ์ UI_Slot ์ ๋ฃ์๋ ๊ฒ์ด ํด๋ฆญ์ด ๋๋ค ๋ณด๋ UI_EquipmentSlot ๊ฐ ๋ฌด์๊ฐ ๋๋ ๋ฌธ์ ์์ต๋๋ค. ๊ด์ฌ ์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค.
UI_EquipmentSlot ์์๋ OnPointerDown ์ด ๋ฐ์ํ์ง ์์ต๋๋ค UI_EquipmentSlot ์ ์ฌ๋กฏ์ ํด๋ฆญํ๋ฉด UI_ItemSlot ์ OnPointerDown ์ ์คํ์ด ๋ฉ๋๋ค. > ๋จธ์ ๋ง์ด๊ณ , override๋ฅผ ๋นผ๊ณ ํ๋๊น UI_ItemSlot ์ OnPointerDown ๊ฐ ํธ์ถ๋๋ค์ธ๊ฐ? ๋ค๋ฅธ๋ฐฉ๋ฒ์ด ์๊ฐ๋๊ธดํ๋๋ฐ, UI_ItemSlot.OnPointerDown์ overrideํ์ง ๋ง๊ณ , UI_ItemSlot์ virtual๋ก ๋ฉ์๋ ๋ง๋ค์ด์(ex. OnPointerDownEx) UI_EquipmentSlot์์ OnPointerDownEx()๋ฅผ overrideํ๊ณ , UI_ItemSlot.OnPointerDown()์์ UI_ItemSlot.OnPointerDownEx() ํธ์ถ
Unity Interface ์์ฒด์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค ๋ณด๋ ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฐ๊ธฐ ์ด๋ ค์ธ ๊ฑฐ๋ผ ์๊ฐ์ ํ๊ณ ๋๋ถ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์๊ฐ์ ๋ฐ๊ฟ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.