Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Docs/VS_Scratch_Mapping.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
/// <summary>フロー開始を受け取る ControlInput です。</summary>
[DoNotSerialize]
Expand All @@ -97,18 +97,18 @@ public sealed class ForeverUnit : ScratchCoroutineUnitBase
public ControlOutput Body => m_Body;

/// <summary>
/// ポート定義を行い、コルーチン入力と body 出力を登録します。
/// ポート定義を行い、Visual Scripting 標準のコルーチン入力と body 出力を登録します。
/// </summary>
protected override void Definition()
{
m_Enter = CreateScratchCoroutineInput("enter", OnEnterCoroutine);
m_Enter = ControlInputCoroutine("enter", OnEnterCoroutine);
m_Body = ControlOutput("body");

Succession(m_Enter, m_Body);
}

/// <summary>
/// 停止条件が提供されるまで body ポートを無限に呼び出します
/// 「ずっと」ブロックの本体で、Flow コルーチンとして body を毎フレーム実行します
/// 各反復の後には 1 フレーム待機して描画更新へ制御を返します。
/// </summary>
/// <param name="flow">現在のフロー情報。</param>
Expand All @@ -117,7 +117,10 @@ private IEnumerator OnEnterCoroutine(Flow flow)
{
while (true)
{
// body に接続されたノード群を実行し、後続ユニットへ制御を渡します。
yield return m_Body;

// 1 フレーム待機してから次のループを開始し、Scratch の「ずっと」相当の周期を再現します。
yield return null;
}
}
Expand Down