// 1. イベントセンサー
public class EventSensor : MonoBehaviour
{
public EventCommunicator eventCommunicator;
void OnTriggerEnter(Collider other)
{
// プレイヤーがオブジェクトに接触した場合
if (other.CompareTag("Player"))
{
// EventCommunicator に通知
eventCommunicator.Notify(EventType.ShopEvent);
}
}
}
// 2. イベントコミュニケーター(MonoBehaviour継承しない)
public class EventCommunicator
{
private EventManager eventManager;
public EventCommunicator(EventManager manager)
{
eventManager = manager;
}
public void Notify(EventType eventType)
{
// イベントマネージャーに通知
eventManager.NotifyEvent(eventType);
}
}
// 3. イベントマネージャー(MonoBehaviour継承しない)
public class EventManager
{
public ShopEventManager shopEventManager;
public TreasureChestEventManager treasureChestEventManager;
public NPCDialogueEventManager npcDialogueEventManager;
public EarthquakeEventManager earthquakeEventManager;
public void NotifyEvent(EventType eventType)
{
switch (eventType)
{
case EventType.ShopEvent:
shopEventManager.HandleEvent();
break;
case EventType.TreasureChestEvent:
treasureChestEventManager.HandleEvent();
break;
case EventType.NPCDialogueEvent:
npcDialogueEventManager.HandleEvent();
break;
case EventType.EarthquakeEvent:
earthquakeEventManager.HandleEvent();
break;
}
}
}
// 4. 各種イベントマネージャー(MonoBehaviour継承しない)
public class ShopEventManager
{
public void HandleEvent()
{
// ショップのロジックを実装
Debug.Log("Shop event triggered.");
}
}
public class TreasureChestEventManager
{
public void HandleEvent()
{
// 宝箱を開けるロジックを実装
Debug.Log("Treasure chest event triggered.");
}
}
public class NPCDialogueEventManager
{
public void HandleEvent()
{
// NPCとの会話のロジックを実装
Debug.Log("NPC dialogue event triggered.");
}
}
public class EarthquakeEventManager
{
public void HandleEvent()
{
// 地震のロジックを実装
Debug.Log("Earthquake event triggered.");
}
}
// イベントタイプを列挙
public enum EventType
{
ShopEvent,
TreasureChestEvent,
NPCDialogueEvent,
EarthquakeEvent
}