お世話になっております。
ノードを遷移するときにNullReferenceExceptionが発生する事象を確認しましたのでご報告いたします。
現状では回避策を講じておりますので、修正をお急ぎいただく必要はございません。
■概要
ExecuteTaskと、条件Aを満たしたときに遷移するOutputSignalPortを持ったServiceコンポーネントを同じStateノードにアタッチしている状態で、ExcecuteTaskが実行しているノードが条件Aを満たした場合に、NullReferenceExceptionが発生します。
発生した例外のスタックトレースは本投稿の末尾をご参照ください。
■環境
Unity:6000.0.59f2
LogicToolkit:1.10.12
■再現方法
以下の「再現用のコード」を使って添付画像のグラフを作成して、LogicPlayerで再生すると、CallGoToServiceコンポーネントが実行されてGoToServiceの接続先に遷移したときにエラーとなります。
実際のコードではObservableなどを介して遷移が実行されますが、再現コードは簡略化のため、遷移処理のメソッドを直接実行する形で再現しています。

- 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)