コンテンツにスキップ

Dirty Flag

値が変わったときだけ高コストな計算をやり直すように印を付ける遅延更新パターンです。

  • ステータス合算やレイアウト計算が重いとき
  • 毎フレーム再計算する必要がないとき
  • Primary Data: 元データ
  • Dirty Flag: 再計算が必要かどうか
  • Cache: 計算結果

以下のコードは、上で説明した状況を Unity プロジェクトの文脈で単純化した例です。

public sealed class PlayerAttackStat
{
private int baseAttackPower;
private int equipmentBonusPower;
private bool needsRecalculation = true;
private int cachedAttackPower;
public void SetBaseAttackPower(int value)
{
baseAttackPower = value;
needsRecalculation = true;
}
public void SetEquipmentBonusPower(int value)
{
equipmentBonusPower = value;
needsRecalculation = true;
}
public int GetFinalAttackPower()
{
if (!needsRecalculation)
{
return cachedAttackPower;
}
cachedAttackPower = baseAttackPower + equipmentBonusPower;
needsRecalculation = false;
return cachedAttackPower;
}
}
  • 値が変わったときだけ計算するため、フレームごとの不要な演算を減らせます。
  • UI、ステータス、Transform のように変更頻度が低い計算に特に効果があります。
  • フラグ更新を忘れると古い値を使い続けるバグが起きます。
  • 依存関係が複雑になると、どの変更でフラグを立てるべきか管理が難しくなります。

値変更時だけ再計算してコストを減らす遅延更新の流れです。

Dirty Flag の流れ