Repository navigation
NetworkAnimator: Conditional triggered transitions to Exit node log false errors #3912
Description
Activity
- addedtype:bugBug ReportBug Reportstat:awaiting-triageStatus - Awaiting triage from the Netcode team.Status - Awaiting triage from the Netcode team.stat:reply-neededAwaiting reply from Unity accountAwaiting reply from Unity account
on Mar 20, 2026 Hi @AlbertoFdzM,
Could you upgrade your version of NGO to v2.11.0 and see if this error continues? I am pretty sure this specific issue was fixed between v2.9 & v2.11.
- addedstat:awaiting-responseAwaiting response from author. This label should be added manually.Awaiting response from author. This label should be added manually.and removedstat:reply-neededAwaiting reply from Unity accountAwaiting reply from Unity account
on Mar 23, 2026 - addedstat:InvestigatingIssue is currently being investigatedIssue is currently being investigated
on Mar 23, 2026 This issue has been automatically marked as stale because it has been awaiting response for over 30 days without any activity.
Please update the issue with any new information or it may be closed in 30 days.- addedStaleAdded after 30 days since stat:awaiting response was added (if it's still present)Added after 30 days since stat:awaiting response was added (if it's still present)
on Apr 24, 2026 This issue has been automatically closed because it has been stale for 2 weeks without any activity. Feel free to reopen if you have new information to add.
I'm on 2.12.0 and this error is still happenning
- removedStaleAdded after 30 days since stat:awaiting response was added (if it's still present)Added after 30 days since stat:awaiting response was added (if it's still present)
on Jun 23, 2026 This issue has been automatically marked as stale because it has been awaiting response for over 2 weeks without any activity.
Please update the issue with any new information or it may be closed in 2 weeks.- addedStaleAdded after 30 days since stat:awaiting response was added (if it's still present)Added after 30 days since stat:awaiting response was added (if it's still present)
on Jul 8, 2026 - removedstat:awaiting-responseAwaiting response from author. This label should be added manually.Awaiting response from author. This label should be added manually.StaleAdded after 30 days since stat:awaiting response was added (if it's still present)Added after 30 days since stat:awaiting response was added (if it's still present)
on Jul 8, 2026 Hi! I was able to reproduce this, and it looks like it also affects late-joining clients, not just editor validation.
On
develop-3.x.x, if a client joins while the Animator is going through:State A (Sub SM) -> Exit -> State BI get:
[DestinationState To Transition Info] Layer (0) sub-table does not contain destination state (0)I tried resolving Exit transitions by walking up through the parent state-machine hierarchy with
GetStateMachineTransitions().
For example:else if (transition.isExit) { AddExitTransitionStateInfo( layerIndex, animatorState, stateMachine, transition, parameter, z, parentStateMachines, parentStateMachines != null ? parentStateMachines.Count - 1 : -1); }
The resolver follows the hierarchy through nested Exit transitions and also handles transitions targeting another state machine.
With that change, the validation error is gone, and a late-joining client correctly ends up inState B.
I also added editor tests for direct and nested Exit transitions.Does this look like the right direction? If so, I’d be happy to open a PR.
- addedstat:reply-neededAwaiting reply from Unity accountAwaiting reply from Unity account
on Sep 26, 2026 Hi! Thank you for the reproduction here.
A PR would be super appreciated if you already have a fix and some tests. If you have the time, we'd love to see what you have.
- addedstat:awaiting-responseAwaiting response from author. This label should be added manually.Awaiting response from author. This label should be added manually.and removedstat:reply-neededAwaiting reply from Unity accountAwaiting reply from Unity account
on Sep 28, 2026
Description
NetworkAnimator.ParseStateMachineStates()logsDebug.LogErrorfor conditional transitions that target the Exit node of a sub-state machine. These transitions are valid Mecanim configurations — the actual destination is resolved by the parent state machine'sStateMachineTransitions— butNetworkAnimatoronly checkstransition.destinationStateandtransition.destinationStateMachine, both of which arenullfor Exit transitions.The error message is:
This is a false positive. The transitions work correctly in Mecanim; the issue is that
ParseStateMachineStatesdoes not account fortransition.isExit == truewhen conditions are present.Additionally, because these transitions are skipped (not added to
TransitionStateInfoList), they are also missing from them_DestinationStateToTransitioninfolookup table used at runtime for synchronizing late-joining clients. This could mean trigger-based transitions routed through a sub-state machine Exit node may not synchronize properly in multiplayer.Reproduce Steps
MyTrigger)MyTriggeras conditionStateMachineTransitionson the sub-state machine node to route to a parent state (e.g.MyTrigger→ "State B")NetworkAnimatorcomponent referencing this Animator ControllerDebug.LogErrorin the Console on everyOnValidate(domain reload, component selection, scene save, etc.)Actual Outcome
Debug.LogErroris logged for each trigger condition on each conditional Exit transition:These transitions are also not added to
TransitionStateInfoList, so they are missing from the runtime synchronization lookup table.Expected Outcome
ParseStateMachineStatesshould checktransition.isExitbefore logging an error. Exit transitions with conditions are valid — the destination is resolved by the parent state machine'sStateMachineTransitions.StateMachineTransitions) so that trigger-based synchronization works correctly through sub-state machine Exit nodes.LogErrorshould be emitted for valid Animator configurations.Screenshots
N/A — the issue is in code logic, not visual.
Environment
Additional Context
The relevant code is in
NetworkAnimator.cs, inside the#if UNITY_EDITORblock:Suggested fix: Add an
isExitcheck before the error branch, analogous to howdestinationStateMachineis handled — resolving the actual destination via the parent state machine'sStateMachineTransitions:The unconditional Exit transitions (with
HasExitTimeand no conditions) are already handled correctly at line ~250 with acontinue. The gap is specifically for Exit transitions that have trigger conditions (used for interrupting sub-state machine flows like attack combos).