diff --git a/Docs/VS_Scratch_Mapping.md b/Docs/VS_Scratch_Mapping.md
index 45dac6c..b4093ee 100644
--- a/Docs/VS_Scratch_Mapping.md
+++ b/Docs/VS_Scratch_Mapping.md
@@ -61,7 +61,7 @@ Scratch ブロックと FUnity 独自 Visual Scripting Unit の対応関係で
| ○秒待つ | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.WaitSecondsUnit | ○秒待つ | FUnity/Scratch/制御 | 指定時間待機。Scratch スレッド登録で停止ブロックと連動。定義: 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 |
-| クローンされたとき | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.WhenIStartAsCloneUnit | クローンされたとき | Events/FUnity/Scratch/制御 | クローン生成時に発火する Scratch スクリプトの入口。イベント内でコルーチン開始直後に `ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine)` を呼び出す。定義: Runtime/.../CloneUnits.cs |
+| クローンされたとき | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.WhenIStartAsCloneUnit | クローンされたとき | Events/FUnity/Scratch/制御 | クローン生成時に発火する Scratch スクリプトの入口。`FUnityScriptThreadManager` 経由でコルーチンを開始し、直後に `ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine)` を呼び出す。定義: Runtime/.../CloneUnits.cs |
| このクローンを削除する | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.DeleteThisCloneUnit | このクローンを削除する | FUnity/Scratch/制御 | クローンを破棄。定義: Runtime/.../CloneUnits.cs |
| すべてを止める | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.StopAllUnit | Scratch/すべてを止める | FUnity/Scratch/制御 | Scratch 用スレッドテーブル経由で全スレッド停止。定義: Runtime/.../StopControlUnits.cs |
| このスクリプトを止める | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.StopThisScriptUnit | Scratch/このスクリプトを止める | FUnity/Scratch/制御 | 現在の Scratch スレッドのみ停止。定義: Runtime/.../StopControlUnits.cs |
@@ -81,11 +81,11 @@ Scratch ブロックと FUnity 独自 Visual Scripting Unit の対応関係で
## イベント
| Scratch ブロック (日本語) | FUnity Unit クラス | UnitTitle | UnitCategory | 備考 |
| --- | --- | --- | --- | --- |
-| 緑の旗が押されたとき | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.WhenGreenFlagClickedUnit | 緑の旗が押されたとき | Events/FUnity/Scratch/イベント | Runner 対象の緑の旗イベント。ScriptMachine.nest.macro を優先し、未設定時は machine.graph を入口としてフローを発火。発火時に `ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine)` を呼び出し、Scratch スレッドを登録する。定義: Runtime/.../GreenFlagUnits.cs |
-| ○キーが押されたとき | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.OnKeyPressedUnit | ○キーが押されたとき | Events/FUnity/Scratch/イベント | 押下エッジで発火する Scratch スクリプトの入口。イベント内でコルーチン開始直後に `ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine)` を呼び出す。定義: Runtime/.../InputEventUnits.cs |
+| 緑の旗が押されたとき | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.WhenGreenFlagClickedUnit | 緑の旗が押されたとき | Events/FUnity/Scratch/イベント | Runner 対象の緑の旗イベント。`FUnityScriptThreadManager` 経由でコルーチンを開始し、`ScriptMachine.nest.macro` を入口としてフローを発火する。発火時に `ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine)` を呼び出し、Scratch スレッドを登録する。定義: Runtime/.../GreenFlagUnits.cs |
+| ○キーが押されたとき | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.OnKeyPressedUnit | ○キーが押されたとき | Events/FUnity/Scratch/イベント | 押下エッジで発火する Scratch スクリプトの入口。`FUnityScriptThreadManager` 経由でコルーチンを開始し、開始直後に `ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine)` を呼び出す。定義: Runtime/.../InputEventUnits.cs |
| メッセージを送る | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.BroadcastMessageUnit | メッセージを送る | FUnity/Scratch/イベント | 即時配信。定義: Runtime/.../MessagingUnits.cs |
| メッセージを送って待つ | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.BroadcastAndWaitUnit | メッセージを送って待つ | FUnity/Scratch/イベント | 同期配信後に継続。定義: Runtime/.../MessagingUnits.cs |
-| メッセージを受け取ったとき | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.WhenIReceiveMessageUnit | メッセージを受け取ったとき | Events/FUnity/Scratch/イベント | フィルタ一致時に発火する Scratch スクリプトの入口。イベント内でコルーチン開始直後に `ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine)` を呼び出す。定義: Runtime/.../MessagingUnits.cs |
+| メッセージを受け取ったとき | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.WhenIReceiveMessageUnit | メッセージを受け取ったとき | Events/FUnity/Scratch/イベント | フィルタ一致時に発火する Scratch スクリプトの入口。`FUnityScriptThreadManager` 経由でコルーチンを開始し、開始直後に `ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine)` を呼び出す。定義: Runtime/.../MessagingUnits.cs |
## 調べる
| Scratch ブロック (日本語) | FUnity Unit クラス | UnitTitle | UnitCategory | 備考 |
diff --git a/Runtime/Integrations/VisualScripting/Units/ScratchUnits/CloneUnits.cs b/Runtime/Integrations/VisualScripting/Units/ScratchUnits/CloneUnits.cs
index e22d01c..e4545a5 100644
--- a/Runtime/Integrations/VisualScripting/Units/ScratchUnits/CloneUnits.cs
+++ b/Runtime/Integrations/VisualScripting/Units/ScratchUnits/CloneUnits.cs
@@ -169,10 +169,13 @@ protected override bool ShouldTrigger(Flow flow, CloneEventArgs args)
/// クローンイベント引数。
private void TriggerWithThreadRegistration(GraphReference reference, CloneEventArgs args)
{
- var flow = Flow.New(reference);
- var coroutine = flow.StartCoroutine(RunEventCoroutine(flow, args));
+ using (var flow = Flow.New(reference))
+ {
+ var routine = RunEventCoroutine(flow, args);
+ var coroutine = FUnityScriptThreadManager.Instance.StartCoroutine(routine);
- ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine);
+ ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine);
+ }
}
///
diff --git a/Runtime/Integrations/VisualScripting/Units/ScratchUnits/GreenFlagUnits.cs b/Runtime/Integrations/VisualScripting/Units/ScratchUnits/GreenFlagUnits.cs
index 7c70bf3..baf644e 100644
--- a/Runtime/Integrations/VisualScripting/Units/ScratchUnits/GreenFlagUnits.cs
+++ b/Runtime/Integrations/VisualScripting/Units/ScratchUnits/GreenFlagUnits.cs
@@ -64,10 +64,13 @@ protected override bool ShouldTrigger(Flow flow, EmptyEventArgs args)
/// 空のイベント引数。
private void TriggerWithThreadRegistration(GraphReference reference, EmptyEventArgs args)
{
- var flow = Flow.New(reference);
- var coroutine = flow.StartCoroutine(RunEventCoroutine(flow, args));
+ using (var flow = Flow.New(reference))
+ {
+ var routine = RunEventCoroutine(flow, args);
+ var coroutine = FUnityScriptThreadManager.Instance.StartCoroutine(routine);
- ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine);
+ ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine);
+ }
}
///
diff --git a/Runtime/Integrations/VisualScripting/Units/ScratchUnits/InputEventUnits.cs b/Runtime/Integrations/VisualScripting/Units/ScratchUnits/InputEventUnits.cs
index cd06e0c..8cb032e 100644
--- a/Runtime/Integrations/VisualScripting/Units/ScratchUnits/InputEventUnits.cs
+++ b/Runtime/Integrations/VisualScripting/Units/ScratchUnits/InputEventUnits.cs
@@ -91,10 +91,13 @@ protected override bool ShouldTrigger(Flow flow, EmptyEventArgs args)
/// 空のイベント引数。
private void TriggerWithThreadRegistration(GraphReference reference, EmptyEventArgs args)
{
- var flow = Flow.New(reference);
- var coroutine = flow.StartCoroutine(RunEventCoroutine(flow, args));
+ using (var flow = Flow.New(reference))
+ {
+ var routine = RunEventCoroutine(flow, args);
+ var coroutine = FUnityScriptThreadManager.Instance.StartCoroutine(routine);
- ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine);
+ ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine);
+ }
}
///
diff --git a/Runtime/Integrations/VisualScripting/Units/ScratchUnits/MessagingUnits.cs b/Runtime/Integrations/VisualScripting/Units/ScratchUnits/MessagingUnits.cs
index c525727..49ff8e3 100644
--- a/Runtime/Integrations/VisualScripting/Units/ScratchUnits/MessagingUnits.cs
+++ b/Runtime/Integrations/VisualScripting/Units/ScratchUnits/MessagingUnits.cs
@@ -202,10 +202,13 @@ protected override bool ShouldTrigger(Flow flow, MessagingCommon.Args args)
/// 受信したメッセージ引数。
private void TriggerWithThreadRegistration(GraphReference reference, MessagingCommon.Args args)
{
- var flow = Flow.New(reference);
- var coroutine = flow.StartCoroutine(RunEventCoroutine(flow, args));
+ using (var flow = Flow.New(reference))
+ {
+ var routine = RunEventCoroutine(flow, args);
+ var coroutine = FUnityScriptThreadManager.Instance.StartCoroutine(routine);
- ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine);
+ ScratchUnitUtil.EnsureScratchThreadRegistered(flow, coroutine);
+ }
}
///
diff --git a/Runtime/Integrations/VisualScripting/Units/ScratchUnits/ScratchUnitUtil.cs b/Runtime/Integrations/VisualScripting/Units/ScratchUnits/ScratchUnitUtil.cs
index bbc6bdd..7ace437 100644
--- a/Runtime/Integrations/VisualScripting/Units/ScratchUnits/ScratchUnitUtil.cs
+++ b/Runtime/Integrations/VisualScripting/Units/ScratchUnits/ScratchUnitUtil.cs
@@ -302,10 +302,6 @@ public static string EnsureScratchThreadRegistered(
if (flow.stack?.machine is ScriptMachine machine)
{
graph = machine.nest?.macro as ScriptGraphAsset;
- if (graph == null)
- {
- graph = machine.graph as ScriptGraphAsset;
- }
}
return EnsureScratchThreadRegistered(flow, adapter, graph, coroutine);