Actually i wasn’t insistent :D. As in many cases it really depends on your target game/resources/hardware.
If you are doing small game like Dota (small in terms of players in single match), then trying to create elaborate generic system is kind of pointless. Replicating UObjects is not by any means hard (and you can essentially just let actor which replicate sub-object decide about things like relevancy, if actor is relevant to other actors, it’s subobjects are also etc. It’s crude, but should be sufficient for most cases).
But with abilities as actors, you have much of replication problems solved.
I actually migrated my own ability system to UObjects, and replicate them trough ActorComponent. Not much different for my case, but I have less Actor cruft to deal with in subclasses.
The big difference that I noticed about the engine AbilitySystem, is the fact that it mainly rely on non-instanced objects.
And while I know what it means, I don’t know what are cons/pros for doing it this way.
One difference I’m sure of that non-instanced objects, can’t have BP graph executed.
I’m not sure if non instanced objects, can have things like RepNotify (something, that my system is very dependent on).
Anyway, I would also like to hear more about this subsystem. Though I’m checking every commit and scour trough code quite often, I ended up rolling my own system for no other reasons that:
- The build in one seems complicated, especially if you don’t know what it is supposed to do :D. Or why it is the way it is.
- It seems to be very generic, to be able to carter to wide range of games (I have specific type of game in mind, so I can simplify mine to do what I need, though it’s still fairly extensible… as long as you do action rpg ;p).
- It also seems to treat the using csv data very seriously for effects especially. I didn’t found it appealing to me.
I like to keep everything in single blueprint (within reasonable range of course).
- To learn few new things (;.
Though I’m sure that build in system, is at least 100x better than mine, has better performance (especially under heavy load), and is more flexible.
Especially since my implementation heavily depends on RepNotifies, RPCs, object instancing(abilities are instanced per actor), creating/destroying new objects (damage over time effects), and on creating event driven logic for all above using blueprints.
And here about tags:
GameplayTags is absoluawesomlygood (new word!) module.
I personally use it for pretty much everything. I tended to use it even for indentifying objects, without creating some odd class inheritance trees. I just create base class with tag container, some base functionality, and make blueprints with different tags.