Download

Solving Large ABPs -- Can Composite ABP Be a Thing?

Hello,

I spend quite some time thinking of how to structure my ever growing Unreal project to scale in a sane and sustainable way. Components are great and they’ve really been maturing during the last couple of updates. However, the elephant in the room – in my case – is Animation Blueprints. My main player ABP has a chain of maybe 10 state machines in its AnimGraph; starting from Locomotion and then interleaved with Blend nodes I have different states the character can be in, like riding a horse, pushing a wagon, hand to hand combat, working a counter in a kitchen, and so on.

Here’s a made up example, but you probably get my drift:

6fa67df8e710716a10a8a8c69f7eccfb397ec46c.png

It actually gives a good overview over what is going on, and I have some other nodes later in the chain (closer to Final Animation Pose) which can choose to veto, or do common processing etc. It’s a thorn in my side to put everything in 1 ABP when the game logic part is in pretty components, but the real pain is that because I’m using Perforce there’s a big nasty exclusive checkout on the ABP asset, creating contention in my team’s workflow.

Now there are a bunch of options for me to turn to, but all of them more or less miss the mark (unless someone else has figured out a dandy solution, which I’d be eager to hear). I use montages and blend spaces extensively for other, proper things. Using multiple ABPs (with or without inheritance+asset overloading) isn’t really a great option as I have shared AnimGraph functionality, but still want to have totally custom state machine flow, and I fear it would obscure the overview of whats going on.

Now what would fit the bill perfectly would be composite ABPs; to have a node in my AnimGraph which would forward processing to another ABP and return a pose as result. This would allow me to keep the current clear flow of things, but removing the congestion of the monolith ABP. It should be possible to make this node into more of a “slot”, to replace all my different interaction states with a single node, and during runtime push different anim instances in there from BP/C++.

How does this sound? Am I the only one with this issue? Or am I missing a clear cut solution?

Send halp. :o

xoxo

Edit: This, I guess, would be similar to “ABP Macros” that are mentioned in the Trello roadmap (wishlist)