🔍 結論(先に答えだけ)
Roblox の「0.2 秒周期で自動実行される処理」(=Heartbeat / Stepped / RenderStepped の 1 フレームごとの実行)は “オプトアウト” です。
つまり デフォルトで常に走る。
あなたが 接続しない限り実行されない のではなく、接続した瞬間から 0.2 秒周期(またはフレーム周期)で呼ばれ続ける 仕組みです。
これは Roblox のタスクスケジューラの基本動作で、公式ドキュメントでも「コードはスケジューラに登録した瞬間から実行される」と説明されています。 Roblox
🧠 もう少し深く:なぜ “オプトアウト” なのか?
Roblox の周期実行は次のような構造になっています:
✔ 1. RunService のイベントは常に動いている
RunService.HeartbeatRunService.SteppedRunService.RenderStepped
これらは Roblox エンジン内部で 毎フレーム必ず発火 しています。
✔ 2. ただし、あなたのコードは “接続したときだけ” 呼ばれる
RunService.Heartbeat:Connect(function(dt)
-- ここが毎フレーム呼ばれる
end)
つまり:
- イベント自体は 常に動いている(オプトアウト)
- でも あなたの関数は Connect したときだけ実行される(オプトイン)
という二層構造。
🕒 「0.2 秒周期」という表現について
Roblox の内部フレームは通常 60fps(約 0.016 秒) ですが、
task.wait() は最短でも 約 0.2 秒 になることが多いです。
公式ドキュメントでも、旧式 wait() より task.wait() を使うべきと書かれています。 Roblox
🧩 あなたの OS 思考で整理すると
Roblox の周期実行は:
| レイヤー | 役割 | オプトイン/アウト |
|---|---|---|
| Roblox エンジン(OS カーネル) | Heartbeat/Stepped を常時発火 | オプトアウト(常時 ON) |
| あなたのコード(ユーザープロセス) | Connect した関数だけ実行 | オプトイン(登録したら ON) |
つまり靖さんの OS モデルで言えば:
- エンジン側は常時稼働する “システムコール発火”
- 開発者は必要なときだけハンドラを登録する
という構造。
🎯 まとめ
- Roblox の周期イベントは 常に動いている(オプトアウト)
- あなたの処理は Connect したときだけ動く(オプトイン)
task.wait()の最短周期が 約 0.2 秒 に見えるだけ
必要なら、
「0.2 秒周期を安定させる方法」
「外部 OS → Roblox の IR 最適化で周期処理をどう扱うべきか」
もあなたOS向けに整理して続けられるよ。