diff --git a/Docs/VS_Scratch_Mapping.md b/Docs/VS_Scratch_Mapping.md index d0cd6ce..fbbfe5c 100644 --- a/Docs/VS_Scratch_Mapping.md +++ b/Docs/VS_Scratch_Mapping.md @@ -84,7 +84,7 @@ Scratch ブロックと FUnity 独自 Visual Scripting Unit の対応関係で | Scratch ブロック (日本語) | FUnity Unit クラス | UnitTitle | UnitCategory | 備考 | | --- | --- | --- | --- | --- | | 緑の旗が押されたとき | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.WhenGreenFlagClickedUnit | 緑の旗が押されたとき | Events/FUnity/Scratch/イベント | Runner 対象の緑の旗イベント。`StartScratchCoroutine` を経由してフローを発火し、開始直後に Scratch スレッドへ登録する。定義: Runtime/.../GreenFlagUnits.cs | -| ○キーが押されたとき | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.OnKeyPressedUnit | ○キーが押されたとき | Events/FUnity/Scratch/イベント | 押下エッジで発火する Scratch スクリプトの入口。`StartScratchCoroutine` を経由して開始し、Scratch スレッド登録と停止ブロック連携を保証する。イベントデータは EventUnit 標準の Data 型に揃え、GraphPointerException を防止する。定義: Runtime/.../InputEventUnits.cs | +| ○キーが押されたとき | FUnity.Runtime.Integrations.VisualScripting.Units.ScratchUnits.OnKeyPressedUnit | ○キーが押されたとき | Events/FUnity/Scratch/イベント | Update フックを自前登録し、各フレームで押下エッジを検出してから `StartScratchCoroutine` へ渡す。Scratch スレッド登録と停止ブロック連携を保証し、イベントデータは EventUnit 標準の Data 型に揃えて GraphPointerException を防止する。定義: 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 スクリプトの入口。`StartScratchCoroutine` を経由して開始し、Scratch スレッド登録と停止ブロック連携を保証する。定義: Runtime/.../MessagingUnits.cs | diff --git a/Runtime/Integrations/VisualScripting/Units/ScratchUnits/InputEventUnits.cs b/Runtime/Integrations/VisualScripting/Units/ScratchUnits/InputEventUnits.cs index 0839900..74dc5d2 100644 --- a/Runtime/Integrations/VisualScripting/Units/ScratchUnits/InputEventUnits.cs +++ b/Runtime/Integrations/VisualScripting/Units/ScratchUnits/InputEventUnits.cs @@ -26,8 +26,10 @@ public sealed class OnKeyPressedUnit : EventUnit /// private bool m_WasDown; - /// EventUnit の自動登録機構を利用するための設定値です。 - protected override bool register => true; + /// + /// EventUnit の自動登録機構は使わず、StartListening/StopListening で明示的に登録します。 + /// + protected override bool register => false; /// /// Update フックを利用してキー状態をポーリングします。 @@ -39,6 +41,35 @@ public override EventHook GetHook(GraphReference reference) return EventHooks.Update; } + /// + /// グラフ開始時に Update イベントへの購読を開始します。 + /// FUnity の Scratch スレッド管理と連携するため、TriggerWithThreadRegistration を登録します。 + /// + /// 現在のグラフスタック。 + public override void StartListening(GraphStack stack) + { + base.StartListening(stack); + + var reference = stack.ToReference(); + var hook = GetHook(reference); + + EventBus.Register(hook, TriggerWithThreadRegistration); + } + + /// + /// グラフ終了時に Update イベントからの購読を解除します。 + /// + /// 現在のグラフスタック。 + public override void StopListening(GraphStack stack) + { + var reference = stack.ToReference(); + var hook = GetHook(reference); + + EventBus.Unregister(hook, TriggerWithThreadRegistration); + + base.StopListening(stack); + } + /// /// ポート定義を行い、キー入力を条件とするイベントを登録します。 ///