何を停止できるのか
| 時間依存処理 | GuaClockで制御できるか |
|---|---|
| GuaClockへScheduleしたcallback | できる |
| GuaClockのTickで更新するゲームロジック | できる |
GodotのTimer / SceneTreeTimer | GuaClockへ移行しない限りできない |
UnityのTime.deltaTime / WaitForSeconds / Coroutine | GuaClockへ移行しない限りできない |
| 物理、Animation、Audio、OS時刻、Network | できない |
導入は二段階です。まずproduction codeで対象ロジックの時刻源としてGuaClockを注入し、次にtest codeからその共有ClockをInstallして操作します。ここでの「Install」は仮想Clockを有効化する操作であり、任意のgame objectへClockを自動注入する操作ではありません。
ゲームへ組み込んでからテストで操作する
// このgame subsystemが使っていた標準Timerを置き換える。
var clock = GuaUnityRuntime.Clock;
clock.Schedule(TimeSpan.FromSeconds(2), ShowMessage);
// 毎frameの時間更新が必要な処理はTickへ接続する。
clock.Tick += UpdateCountdown;# このgame subsystemが使っていたTimerを置き換える。
gua.clock_schedule(2000.0, _show_message)
# 毎frameの時間更新が必要な処理はclock_tickへ接続する。
gua.clock_tick.connect(_update_countdown)GuaClockControls.InstallClock(host.Context);
GuaClockControls.PauseClock(host.Context);
GuaClockControls.RunClockFor(host.Context, TimeSpan.FromSeconds(2));
GuaAssertions.WaitForText(host.Context, "ready", "Ready").ToBeVisible();| 操作 | 効果 |
|---|---|
Install | 時刻0・running状態でmonotonicなGuaClockを開始。 |
Pause | bridgeとSemantic UI収集を動かしたままGuaClockだけ停止。 |
RunFor | 期限callbackとTickを刻み幅ごとに実行し、指定時刻へ正確に到達して再停止。 |
Resume | adapterが渡すunscaled deltaによる通常進行へ復帰。 |
GodotとUnity
Godotでは対象ロジックをGuaAutoAdapter.clock_scheduleまたはclock_tick signalへ移行します。UnityではGuaUnityRuntime.Clockを注入または取得し、ScheduleかTickを使います。どちらのadapter pumpもGuaClockのPause中にbridge commandを処理し続けます。
外部からの操作
WebSocket、MCP、Inspectorでget_clock、clock_install、clock_pause、clock_run_for、clock_resumeを共通利用できます。.NETテストには同期・非同期のGuaClockControlsがあります。