Clean way to manage groups of AActors?

For efficiency, I’d like to have “groups” of AActors. I’m not talking about “grouping” in the UE4 sense, I just mean assigning objects to lists. For example:

  • Actors_that_move
  • Actors_with_hitpoints
  • Actors_with_AI

And so on. So there’s a lot of overlap, meaning a given actor is in several of these groups.

The tricky part is that when an actor is destroyed, it needs to be immediately removed from all groups so that no one tries to access it. My first thought was to use shared pointers and weak pointers, since this is exactly the problem they’re meant to solve. But UE4 does not necessarily delete an object when it’s destroyed, meaning all the weak pointers will still be valid for some unknown number of ticks.

So is there a better approach to this? I guess the brute force solution would be to have every object remove itself from every group in its Destroyed() method, but that seems pretty error prone.

I’ve not had to solve such a scenario myself, but this strikes me as a good use case for GamePlay tags.

I haven’t used them myself, but they would strike me as perfect for this, and 4.15 expanded their capabilities even further.

Sorry, but I can’t give you examples on using the tags, as I’ve not needed to myself.