diff --git a/Docs/VS_Scratch_Mapping.md b/Docs/VS_Scratch_Mapping.md
index 54170b1..d0cd6ce 100644
--- a/Docs/VS_Scratch_Mapping.md
+++ b/Docs/VS_Scratch_Mapping.md
@@ -59,7 +59,7 @@ Scratch ブロックと FUnity 独自 Visual Scripting Unit の対応関係で
| Scratch ブロック (日本語) | FUnity Unit クラス | UnitTitle | UnitCategory | 備考 |
| --- | --- | --- | --- | --- |
| ○回繰り返す | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.RepeatNUnit | ○回繰り返す | FUnity/Scratch/制御 | 指定回数ループ。定義: Runtime/.../LoopUnits.cs |
-| ずっと | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.ForeverUnit | ずっと | FUnity/Scratch/制御 | 永続ループ。`StartScratchCoroutine` 経由でスレッド登録し、停止ブロックと連動。定義: Runtime/.../LoopUnits.cs |
+| ずっと | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.ForeverUnit | ずっと | FUnity/Scratch/制御 | 永続ループ。Visual Scripting 標準の `ControlInputCoroutine` で Flow コルーチンを回し、`body` を毎フレーム実行してから 1 フレーム待機する。定義: Runtime/.../LoopUnits.cs |
| ○秒待つ | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.WaitSecondsUnit | ○秒待つ | FUnity/Scratch/制御 | 指定時間待機。Visual Scripting 標準のコルーチン経由で待機し、完了後に後続フローへ進む。定義: Runtime/.../WaitSecondsUnit.cs |
| 自分のクローンを作る | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.CreateCloneOfSelfUnit | 自分のクローンを作る | FUnity/Scratch/制御 | 自身を複製。定義: Runtime/.../CloneUnits.cs |
| ○のクローンを作る | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.CreateCloneOfDisplayNameUnit | ○のクローンを作る | FUnity/Scratch/制御 | 指定俳優を複製。定義: Runtime/.../CloneUnits.cs |
diff --git a/Runtime/Integrations/VisualScripting/Units/ScratchUnits/LoopUnits.cs b/Runtime/Integrations/VisualScripting/Units/ScratchUnits/LoopUnits.cs
index 4550c2d..1638cd6 100644
--- a/Runtime/Integrations/VisualScripting/Units/ScratchUnits/LoopUnits.cs
+++ b/Runtime/Integrations/VisualScripting/Units/ScratchUnits/LoopUnits.cs
@@ -80,7 +80,7 @@ private IEnumerator OnEnterCoroutine(Flow flow)
[UnitCategory("FUnity/Scratch/制御")]
[UnitSubtitle("funity scratch 制御 forever loop ずっと")]
[TypeIcon(typeof(FUnityScratchUnitIcon))]
- public sealed class ForeverUnit : ScratchCoroutineUnitBase
+ public sealed class ForeverUnit : Unit
{
/// フロー開始を受け取る ControlInput です。
[DoNotSerialize]
@@ -97,18 +97,18 @@ public sealed class ForeverUnit : ScratchCoroutineUnitBase
public ControlOutput Body => m_Body;
///
- /// ポート定義を行い、コルーチン入力と body 出力を登録します。
+ /// ポート定義を行い、Visual Scripting 標準のコルーチン入力と body 出力を登録します。
///
protected override void Definition()
{
- m_Enter = CreateScratchCoroutineInput("enter", OnEnterCoroutine);
+ m_Enter = ControlInputCoroutine("enter", OnEnterCoroutine);
m_Body = ControlOutput("body");
Succession(m_Enter, m_Body);
}
///
- /// 停止条件が提供されるまで body ポートを無限に呼び出します。
+ /// 「ずっと」ブロックの本体で、Flow コルーチンとして body を毎フレーム実行します。
/// 各反復の後には 1 フレーム待機して描画更新へ制御を返します。
///
/// 現在のフロー情報。
@@ -117,7 +117,10 @@ private IEnumerator OnEnterCoroutine(Flow flow)
{
while (true)
{
+ // body に接続されたノード群を実行し、後続ユニットへ制御を渡します。
yield return m_Body;
+
+ // 1 フレーム待機してから次のループを開始し、Scratch の「ずっと」相当の周期を再現します。
yield return null;
}
}