TimelineとC#の連携(シグナル)を使用している際に、ハードウェア負荷(処理落ち)によってイベントが二重コールされてしまう厄介な挙動を、受信コード側の制御で解決する手順です。
具体的な解決方法
C# 受信側コード(Signal Receiver)でのデバウンス実装
Timelineからのイベントを直接受け取るメソッド内に、以下のように微小時間の多重発火を自動無視するチェックゲートを記述します。
private float lastFiredTime = -1f;
private const float DebounceThreshold = 0.1f; // 100ms以内は重複とみなす
public void OnReceiveSignal()
{
if (Time.time - lastFiredTime < DebounceThreshold)
{
return; // ダブルファイアを検知して破棄
}
lastFiredTime = Time.time;
// ...実際のイベント処理...
}
※この簡単な防衛コードを挟むだけで、実機環境でどれだけカクつき(FPSドロップ)が発生しようとも、ゲーム内イベントが二重実行される致命的な挙動を完全に防止できます。
図1:処理落ち(フレームスキップ)に伴うシグナル重複処理とデバウンスによる解決の流れ