public interface IGimmik
{
public void Activate();
}
using UnityEngine;
public class Interactive_Object : MonoBehaviour, IGimmik
{
[SerializeField] protected ItemData needItem;
public void Activate()
{
if (needItem == null)
{
GimmikActivate();
return;
}
bool itemFound = false;
foreach (var item in InventoryManager.Instance.inventory.inventoryList)
{
if (item.data == needItem)
{
GimmikActivate();
itemFound = true;
break;
}
}
if (!itemFound)
{
GimmikDeactivate();
}
}
protected virtual void GimmikActivate()
{
}
protected virtual void GimmikDeactivate()
{
}
}
잠긴 문 등에 필요한 ItemData needItem이 있다. ( 필요없다면 세팅X )
정말 간단히 상속받아 문 같은 것들을 구현할 수 있다.
using UnityEngine;
public class Door : Interactive_Object
{
protected override void GimmikActivate()
{
base.GimmikActivate();
//문이 열린다.
}
protected override void GimmikDeactivate()
{
base.GimmikDeactivate();
//사운드가 재생되며 문이 살짝 흔들린다.
}
}
같이 확장이 쉽게 가능하다.
public class Test : MonoBehaviour
{
public ItemData itemData;
public IGimmik gimmik;
void Update()
{
if (Input.GetKeyDown(KeyCode.Alpha1))
InventoryManager.Instance.AddItem(itemData);
if (Input.GetKeyDown(KeyCode.Alpha2))
{
gimmik = GetComponent<IGimmik>();
gimmik.Activate();
}
}
}
2번을 클릭 시 IGimmik을 탐색하여 가져오고 Activate를 실행한다.
(아이템이 있다면 활성화, 없다면 비활성화 로그가 뜨는 것 까지 확인하였다.)