Why would an Actor not tick, but a new copy of it does?

I have an AActor-derived class defined in pure C++. I have an instance of it in my level that is not having its Tick function called. It used to work, and at some point it broke, and I don’t know why. Here’s the confusing part for me: if I add another instance of the AActor to my level, the new one ticks fine! (The original still does not.)

My constructor defines the usual things (and more, out of desperation):

PrimaryActorTick.bCanEverTick = true;
PrimaryActorTick.bStartWithTickEnabled = true;
PrimaryActorTick.bAllowTickOnDedicatedServer = true;

If I set a breakpoint in the BeginPlay function, I can plainly see that PrimaryActorTick.bCanEverTick is now equal to False for the broken instance, even though I watch it get set to true in the constructor. For the instance that ticks, PrimaryActorTick.bCanEverTick is equal to true in BeginPlay. So something is plainly different about my two Actors, even though they are coming from the same C++ class.

Does anyone know why this might be happening? I can just replace the broken actor in the editor, but I’d like to understand what the problem is. I think there is something important about object lifecycles regarding the editor that I am missing, and it’s driving me crazy.

Thank you!

I have had problems like this before with instances of actors that are already placed in the level. The expected behaviour is that your instances are affected by any change you make in the archetype except for values that are specifically changed from the default on your instance.

In reality however, especially when changing around defaults in a C++ base class frequently, I found values to be all over the place in my pre-placed instances on the map. I could never see any pattern in this, and the only solution seems to be to replace the instance with a new one. I would also like to know what causes this. Your case is especially weird because bCanEverTick is not even exposed to Blueprint.