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; } }