Quick answer: Unity AR Foundation ARSession refusing to add anchors after a config swap? The session must be reset before changing tracking mode - call ARSession.Reset and await SubsystemRunning.
Switching from world tracking to image tracking returns 'invalid session state' for every subsequent anchor add.
Reset before config change
session.Reset();
await session.subsystem.WaitUntilRunning();The session keeps internal state for the prior config. Reset clears it; awaiting Running ensures the new config is live before anchors are added.
Stop and start, don't toggle
Calling session.enabled = false then true on the same frame doesn't reset internal state. Use Reset.
Re-create tracked subsystems
For switching between image and face tracking, the manager itself needs Destroy and recreate. The Subsystem layer doesn't reconfigure live.
“ARSession is stateful. Mode changes need a clean handoff.”
Test mode switching on actual devices. The simulator's ARSession is more forgiving than ARKit's runtime - bugs hide.