Condition is true but progression does not advance
Check Complete Automatically, Objective Link, and whether the linked row is currently Active.
Components
Combine named action branches with All or Minimum completion rules, optional automation, timers, and reset-safe signals.
MultiActionObjective tracks a list of named branches and evaluates them as one condition. Use it when several independent systems must all report readiness, or when any configured minimum is sufficient. Typical branches are POWER, NAVIGATION, and COMMS, each activated from its own UnityEvent or project callback.
Do not use branches to represent ordered tasks that deserve their own start and completion actions. A branch has active/inactive state, not the full lifecycle of an Ordered Objective.
| Field | Meaning | Constraint |
|---|---|---|
| Completion Mode | AllBranchesActive or MinimumBranchesActive | All requires every non-null branch; Minimum uses a clamped count |
| Required Branch Count | Minimum active branches | Runtime clamps from 1 to total count |
| Complete Automatically | Requests Ordered Objective completion when satisfied | Disable for signal-only use |
| Identifier | Stable branch key for string API | Must be unique and non-empty for reliable lookup |
| Display Name / Description | Authoring context | Not used for lookup |
| Deactivate Automatically / Delay | Schedules branch deactivation after activation | Uses scaled WaitForSeconds |
| On Activated / On Deactivated | Runs only when state actually changes | Repeated activation does not replay On Activated |
With Complete Automatically enabled, satisfying the branch rule calls TryComplete(). The internal condition is marked met and On Condition Met fires only if the active Chapter accepts that request. An early condition therefore remains eligible to be evaluated again after the link becomes active.
With automation disabled, the first satisfied evaluation marks IsConditionMet and invokes On Condition Met without completing progression. Connect that event to project behavior or call completion explicitly. Once marked, further branch changes do not invoke it again until Reset.
Index and string overloads exist for ActivateBranch, DeactivateBranch, ToggleBranch, ScheduleBranchDeactivation, and ResetBranch. ActivateBranchTemporarily accepts a custom delay. The TryActivateBranch and TryDeactivateBranch variants report a real state change. FindBranchIndex returns -1 for an empty or missing ID; invalid indices and IDs are safe no-ops or false results.
CountActiveBranches, ActiveBranchCount, TotalBranchCount, and IsCompletionConditionMet() support diagnostics. Prefer stable string IDs in integrations; indices change when an author reorders the list.
Activating a branch cancels its previous deactivation coroutine, applies active state, invokes On Activated only on change, optionally schedules automatic deactivation, then evaluates completion. Accepted state changes and completion are idempotent: repeating the same signal does not replay its event or complete twice. Reset stops every pending timer, clears every branch, clears the condition flag, and resets the base completion flag. Resetting one active branch invokes its deactivation event; resetting the whole Objective clears branches without replaying those events.
ActivateBranch(string) with its exact ID.Check Complete Automatically, Objective Link, and whether the linked row is currently Active.
Time scale may be zero because branch timers use scaled time. Also confirm another call did not replace the timer.
Use the branch Identifier, not Display Name, and match case exactly.
Runtime clamps the requested count to 1..TotalBranchCount; an empty list can never satisfy the condition.