メインコンテンツまでスキップ

時間流れの世界システム

ゲーム内の時間の流れに応じて、店の開閉や NPC のスケジュールを自動管理します。

概要

08:00 → 店が開く
12:00 → NPC が昼食
22:00 → 店が閉まる
02:00 → 盗賊が登場

コンポーネント

WorldTimeSystem — MonoBehaviour シングルトン。シーンに 1 つだけ配置します。

フィールドデフォルト説明
TimeScalefloat1f時間倍速
CurrentHourfloat0f現在時刻(0〜24、読み取り専用)

API

Register

WorldTimeSystem.Instance.Register(
"Shop",
openHour: 8,
closeHour: 22,
onOpen: () => shopkeeper.Open(),
onClose: () => shopkeeper.Close()
);

IsOpen

if (WorldTimeSystem.Instance.IsOpen("Shop"))
ShowShopUI();

OnHourChanged イベント

WorldTimeSystem.Instance.OnHourChanged += hour =>
Debug.Log($"現在時刻: {Mathf.FloorToInt(hour):D2}:00");

サンプル

using NpcMentality;

public class VillageScheduler : MonoBehaviour
{
public CrowdNPC[] villagers;
public GameObject thiefPrefab;

private void Start()
{
var wt = WorldTimeSystem.Instance;
wt.Register("Day", openHour: 6, closeHour: 22,
onOpen: () => { foreach (var v in villagers) v.enabled = true; },
onClose: () => { foreach (var v in villagers) v.enabled = false; });

wt.Register("Thief", openHour: 2, closeHour: 4,
onOpen: () => Instantiate(thiefPrefab, GetAlleyPosition(), Quaternion.identity),
onClose: () => DespawnThieves());
}
}