ExecuteTaskが、同じノードにアタッチされた別のコンポーネントの遷移条件を満たすとエラーになる

Forum rules
Please confirm before reporting
  • Please confirm in advance that it is a problem with LogicToolkit and not with Unity itself, other assets, or the user's project.
  • Please confirm that the problem occurs in a project with the smallest possible configuration and clarify how to reproduce it.
  • Please check if it is described in Known Issues.

Information required to report a bug
  • Logic Toolkit version
  • Unity version
  • How to reproduce

=======

報告する前の確認のお願い
  • Unity本体や他のアセット、ユーザーのプロジェクト側による問題ではなくLogicToolkitの問題であることを事前に確認してください。
  • 可能な限り最小構成のプロジェクトで問題の発生を確認し、再現方法を明確にしてください。
  • 既知の問題に記述されているかを確認してください。

バグを報告するために必要な情報
  • Logic Toolkit バージョン
  • Unity バージョン
  • 再現方法

=======

We accept posts in languages ​​other than English and Japanese, but replies will be sent via machine translation.
Thank you for your understanding.

Post a reply

Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :| :mrgreen: :geek: :ugeek:

BBCode is ON
[img] is ON
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: ExecuteTaskが、同じノードにアタッチされた別のコンポーネントの遷移条件を満たすとエラーになる

Re: ExecuteTaskが、同じノードにアタッチされた別のコンポーネントの遷移条件を満たすとエラーになる

by duckmealGame » 2025/10/11 06:40

ご回答ありがとうございます。
今とっている回避策が本当に正しいのか不安に思っておりましたが、作者様のご見解をいただけて安心いたしました。
ご多忙の中ご対応いただき、誠にありがとうございました。

Re: ExecuteTaskが、同じノードにアタッチされた別のコンポーネントの遷移条件を満たすとエラーになる

by caitsithware » 2025/10/10 13:02

ご報告ありがとうございます。

ExecuteTaskの子の実行処理内で親のフローを遷移する処理が行われると発生する例外のようです。
Actionノードで呼び出すと起きるのは、親のフローが遷移された後にActionノードの実行が終了しExecuteTaskに処理が戻ってきたためかと思われます。
Stateノードでは起きない件については、StateノードではActionComponentの実行終了後にもStateの実行状態がそのまま維持されるためExecuteTaskに処理が戻らないことによって問題が起きなくなっているかと思われます。
回避策としてはその方法でも問題ないかと思いますので、修正されるまでそのように対処していただくようにお願いいたします。

想定していなかった動作ですので、不具合として検証し今後の更新で修正いたします。

ExecuteTaskが、同じノードにアタッチされた別のコンポーネントの遷移条件を満たすとエラーになる

by duckmealGame » 2025/10/10 12:36

お世話になっております。

ノードを遷移するときにNullReferenceExceptionが発生する事象を確認しましたのでご報告いたします。
現状では回避策を講じておりますので、修正をお急ぎいただく必要はございません。

■概要
ExecuteTaskと、条件Aを満たしたときに遷移するOutputSignalPortを持ったServiceコンポーネントを同じStateノードにアタッチしている状態で、ExcecuteTaskが実行しているノードが条件Aを満たした場合に、NullReferenceExceptionが発生します。
発生した例外のスタックトレースは本投稿の末尾をご参照ください。

■環境
Unity:6000.0.59f2
LogicToolkit:1.10.12

■再現方法
以下の「再現用のコード」を使って添付画像のグラフを作成して、LogicPlayerで再生すると、CallGoToServiceコンポーネントが実行されてGoToServiceの接続先に遷移したときにエラーとなります。
実際のコードではObservableなどを介して遷移が実行されますが、再現コードは簡略化のため、遷移処理のメソッドを直接実行する形で再現しています。
Main.png
Main.png (121.44 KiB) Viewed 44 times
このエラーはActionノードで条件を満たした場合には発生しますが、Stateノードでは発生しませんでした。そのため今はエラーになる可能性がある箇所をStateノードにして対処しています。

■再現用のコード

Code: Select all

using LogicToolkit;
using LogicToolkit.StateMachines;
using UnityEngine;

/// <summary>
/// GoNext()が実行されたら接続先に遷移する。
/// </summary>
internal sealed class GoToService : ServiceComponent
{
    [SerializeField]
    OutputSignalPort _next = default;

    public void GoNext()
    {
        _next.Send(true);
    }
}

/// <summary>
/// 実行時に同じグラフ内のGoToServiceコンポーネントのGoNext()を実行する。
/// </summary>
internal sealed class CallGoToService : ActionComponent
{
    GoToService _target;
    protected override void OnAction()
    {
        base.OnAction();
        _target = this.Node.NodeGraph.GetNodeComponent<GoToService>();
        _target.GoNext();
    }
}

■エラーのスタックトレース

Code: Select all

NullReferenceException: Object reference not set to an instance of an object
LogicToolkit.ActionNode.OnActivated () (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Nodes/ActionNode.cs:45)
LogicToolkit.ActivatableNode.LogicToolkit.IActivatable.set_IsActive (System.Boolean value) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Nodes/ActivatableNode.cs:58)
LogicToolkit.ActivatableNode.set_IsActive (System.Boolean value) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Nodes/ActivatableNode.cs:34)
LogicToolkit.ExecuteNode.LogicToolkit.IExecuteNode.BeginExecute (LogicToolkit.FlowController controller) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Nodes/ExecuteNode.cs:48)
LogicToolkit.FlowController.TransitionImmediate (LogicToolkit.IExecuteNode node) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/FlowController.cs:148)
LogicToolkit.FlowController.Transition (LogicToolkit.IExecuteNode dest) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/FlowController.cs:235)
LogicToolkit.ExecuteNode.Transition (LogicToolkit.ITransitionPort transitionPort, System.Boolean exitOnFailure) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Nodes/ExecuteNode.cs:122)
LogicToolkit.StateMachines.OutputSignalPort.SetSignal (LogicToolkit.SignalState signalState) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/StateMachines/Ports/SignalPorts/OutputSignalPort.cs:114)
LogicToolkit.StateMachines.OutputSignalPort.Send (System.Boolean signal, LogicToolkit.StateMachines.SignalExpiration expiration) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/StateMachines/Ports/SignalPorts/OutputSignalPort.cs:212)
LogicToolkit.StateMachines.OutputSignalPort.Send (System.Boolean signal) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/StateMachines/Ports/SignalPorts/OutputSignalPort.cs:230)
LogicToolkit.StateMachines.StateExtendedTaskComponent.OnUpdate () (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/StateMachines/NodeComponents/Extends/StateExtendedTaskComponent.cs:126)
LogicToolkit.ReceiverExtensions.CallOnUpdate (LogicToolkit.IUpdateReceiver receiver) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Receivers/ReceiverExtensions.cs:16)
UnityEngine.Debug:LogException(Exception)
LogicToolkit.DebugSettings:Exception(Exception, Node) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Objects/LogicPlayerBase.cs:40)
LogicToolkit.Node:Exception(Exception) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Nodes/Node.cs:92)
LogicToolkit.ReceiverExtensions:Exception(IUpdateReceiver, Exception) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Receivers/ReceiverExtensions.cs:172)
LogicToolkit.ReceiverExtensions:CallOnUpdate(IUpdateReceiver) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Receivers/ReceiverExtensions.cs:20)
LogicToolkit.StateMachines.StateNode:OnUpdate() (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/StateMachines/Nodes/StateNode.cs:411)
LogicToolkit.ReceiverExtensions:CallOnUpdate(IUpdateReceiver) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Receivers/ReceiverExtensions.cs:16)
LogicToolkit.FlowController:Update() (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/FlowController.cs:303)
LogicToolkit.OutputExecutePort:Update() (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Ports/ExecutablePorts/OutputExecutePort.cs:208)
LogicToolkit.Builtin.ExecuteTask:OnExecute() (at ./Packages/com.caitsithware.logictoolkit/Builtin/Runtime/Tasks/ExecuteTask.cs:76)
LogicToolkit.TaskComponent:LogicToolkit.IExecuteReceiver.OnExecute() (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/NodeComponents/Tasks/TaskComponent.cs:87)
LogicToolkit.ReceiverExtensions:CallOnExecute(IExecuteReceiver) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Receivers/ReceiverExtensions.cs:91)
LogicToolkit.StateMachines.StateExtendedTaskComponent:OnUpdate() (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/StateMachines/NodeComponents/Extends/StateExtendedTaskComponent.cs:91)
LogicToolkit.ReceiverExtensions:CallOnUpdate(IUpdateReceiver) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Receivers/ReceiverExtensions.cs:16)
LogicToolkit.StateMachines.StateNode:OnUpdate() (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/StateMachines/Nodes/StateNode.cs:411)
LogicToolkit.ReceiverExtensions:CallOnUpdate(IUpdateReceiver) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Receivers/ReceiverExtensions.cs:16)
LogicToolkit.FlowController:Update() (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/FlowController.cs:303)
LogicToolkit.OutputExecutePort:Update() (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Ports/ExecutablePorts/OutputExecutePort.cs:208)
LogicToolkit.EventNodeBase:OnUpdate() (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Nodes/Events/EventNodeBase.cs:60)
LogicToolkit.EventNodeBase:LogicToolkit.IUpdateReceiver.OnUpdate() (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Nodes/Events/EventNodeBase.cs:19)
LogicToolkit.ReceiverExtensions:CallOnUpdate(IUpdateReceiver) (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Receivers/ReceiverExtensions.cs:16)
LogicToolkit.LogicGraph:OnUpdate() (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/NodeGraphs/LogicGraph.cs:130)
LogicToolkit.NodeGraph:Update() (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/NodeGraphs/NodeGraph.cs:482)
LogicToolkit.LogicPlayerBase:Update() (at ./Packages/com.caitsithware.logictoolkit/Runtime/Graph/Objects/LogicPlayerBase.cs:161)

Top