Forums › 💬 NodeCanvas › ⚙️ Support › [BUG] FSM error when using DestroyGameObject ActionTask. › Reply To: [BUG] FSM error when using DestroyGameObject ActionTask.
Hello,
Yeah, this is an edge case because the FSM is destroyed from within it’s own update. Here is quick fix though. Please open up FSM.cs and completely change the method named ‘OnGraphUpdate’ with the following code:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
protected override void OnGraphUpdate() { if ( currentState != null ) { //Update defer updatables (basically AnyStates and ConcurentStates) for ( var i = 0; i < updatableNodes.Count; i++ ) { updatableNodes[i].Update(); } //this can only happen if FSM stoped just now (from the above update) if ( currentState == null ) { Stop(false); return; } //Update current state currentState.Update(); if ( onStateUpdate != null && currentState.status == Status.Running ) { onStateUpdate(currentState); } //this can only happen if FSM stoped just now (from the above update) if ( currentState == null ) { Stop(false); return; } //state has nowhere to go.. if ( currentState.status != Status.Running && currentState.outConnections.Count == 0 ) { //...but we have a stacked state -> pop return to it if ( stateStack.Count > 0 ) { var popState = stateStack.Pop(); EnterState(popState, TransitionCallMode.Normal); return; } //...and no updatables -> stop if ( !updatableNodes.Any(n => n.status == Status.Running) ) { Stop(true); return; } } } //if null state, stop. if ( currentState == null ) { Stop(false); return; } } |
Let me know if that quickfix works for you.
Thanks 🙂
