Crowd System Breakdown
- Andy Yankovich
- Mar 10, 2023
- 2 min read
For the production of Dim, my team needed a system to animate a crowd of silhouette characters. We needed them to react and have some sort of movement and keep-alive. I decided on a blueprint system. Although I didn't know how I would make it yet, I knew figuring it out would be more efficient than animating them by hand.

To start, I would need a system that would set a few values for me. I created a simple function that stored each characters original position, set a randomized scale, (to give some variety to the otherwise duplicated characters), and set an Array, which stored a handful of components that would act as positions for them to move to.

This is the function I came up with for their movement. It is limited, but also simple and easy to modify, which fits my needs perfectly. This function uses a timeline feeding into a "Set Relative Location" Node. In between, I have a Vector Lerp that uses the Timeline's float track as an alpha to move between the original position and a position from the array. To make it more random and organic, I set a shuffle node and a delay at the end of the timeline, which shuffles the array, (setting a new position for the next move), and restarts the timeline. Simple and effective.

Next up is another prep event, which adds and sets a Sprite component to my Actor, as well as referring to the Sprite Scaler that I set in the first function, which allows each individual instance to receive a random scale within the set range.

This "Choose Reaction Function" uses a float value to choose between a set of possible reaction sprites for the actor to flip between.

And this Anim Sprite Function uses a few slightly randomized delays to interpolate between the original sprite and the reaction sprite, which continues to loop.

Finally, this function in a separate Actor I named the Crowd Manager gets all of the actors of that class that exist in the level and sets the float value that corresponds to the various reactions. This was extremely important as it allows us bring this Crowd Manager into the Sequencer and animate the single value, as opposed to having each individual crowd actor's reactions animated individually.
Yorumlar