• Hi Guest!

    We are extremely excited to announce the release of our first Beta1.1 and the first release of our Public AddonKit!
    To participate in the Beta, a subscription to the Entertainer or Creator Tier is required. For access to the Public AddonKit you must be a Creator tier member. Once subscribed, download instructions can be found here.

    Click here for information and guides regarding the VaM2 beta. Join our Discord server for more announcements and community discussion about VaM2.
  • Hi Guest!

    VaM2 Resource Categories have now been added to the Hub! For information on posting VaM2 resources and details about VaM2 related changes to our Community Forums, please see our official announcement here.
CharacterStateManager

Plugins + Scripts CharacterStateManager

Download [<1 MB]
What is it?
CharacterStateManager is meant to be a powerful tool for layering multiple state machines to control a character in complex ways. The main goal was to create an all-in-one plugin that could create dynamic procedural behavior. It has many options and there are many ways to do things, so have fun exploring and thinking creatively.

Features
  • Robust system for defining and transitioning between states, and assigning behaviors (in the the form of animations) to those states.
  • Ability to layer multiple state machines each controlling different facets of a character's behavior.
  • Built-in layering and keyframing system for building animations out of any combination of character controllers and morphs.
  • Built with procedural behavior in mind, so lots of sliders for randomizing timings, transitions, and even morph/controller values.
  • Easy to use automated messaging system allowing multiple characters to interact, removing the need for fiddling with triggers.
  • Save/Load the entire plugin instance or any part of it to a file (including states, layers, animations, etc) for fast and easy reuse of your work.
  • Lots of in-game helper text to explain what options do to ease the learning curve.
Overview
There are 4 main concepts in CharacterStateManager: Groups, States, Layers, and Animations.

Groups
are basically self-contained state machines. Groups are collections of States that can transition into each other and are independent from the states in other groups. Groups allow you to layer multiple sub-behaviors together to create complex overall behavior.
groups.png



States are used to define a character's current action, or mood, or any other abstraction you like. States belong to a Group, and are linked by Transitions to other states. There are many options for defining how and when a state will transition to another state -- including triggering by animations completing, fixed or random timers, or through the Messaging system in reaction to another character. States contain an Animation playlist that can play either sequential or random animations while the character is in that state. This combination of transitions and animation playlists allows for highly customizable behavior.
states.png



Layers are collections of any combination of controllers and morphs that can then be controlled by an Animation. Layers let you easily use different animations to control different parts of a character without affecting each other.
layers.png



Animations define how a Layer... well... animates over time. Animations are comprised of a collection of Keyframes. Keyframes are snapshots of a layer's controller/morph values that are then linked together with easings (aka tweens) to create a full animation. Once created, animations can then be assigned to a State's animation playlist.
animations.png

keyframes.png



This looks like AnimationPoser (aka ...Why?)
Yes! This plugin was heavily inspired by AnimationPoser. However, I have very specific goals in some of my scenes that I had difficulty achieving with AnimationPoser. Some key differences:
  • AnimationPoser is animation-first, while CharacterStateManager is state-first. This means that in CharacterStateManager, states are the most important, fundamental object. Animations are secondary and used as ways to express states visually.
  • AnimationPoser did not have enough granularity to achieve certain things easily. For example, CharacterStateManager has groups and per-state animation playlists, which AnimationPoser lacks.
  • AnimationPoser has a lot of complexity that I actually didn't need. Its transition system is powerful but a pain to set up and not that useful to me. Its messaging system is similarly an amazing idea but in practice requires lots of fiddling. And setting up easings and timings between "keyframes" (aka states in AnimationPoser) was more work than it needed to be. Imo, CharacterStateManager makes this easier.
These are the main ideas that made me want to create CharacterStateManager, but of course there are many other differences. In essence, AnimationPoser is about animations, and CharacterStateManager is about states. I wanted a tool for modeling a character as a dynamic set of overlapping states with lots of room for randomness, but also the ability for fine-grained control. CharacterStateManager is that tool -- I made it for myself but also some other people might like it too!

I should also note that while I took inspiration from AnimationPoser's concepts, CharacterStateManager is not just an edit of AnimationPoser. CharacterStateManager was completely written from scratch.

Github
You can always find the code for CharacterStateManager here:
https://github.com/ThatsLewd/CharacterStateManager

Any bugs and problems should be reported on Github, as I don't check these forums very often.
React to this content...

Share this resource

Latest updates

  1. v1.0.1 - Minor bugfix

    Changelog Fixed a problem with sliders not saving min/max values, breaking save/load of slider...

Latest reviews

Positive
Version: 1.0.1
One of the best plugins I’ve ever seen, especially for those who aren’t big fans of the animation timeline and prefer controlling animations through scripts. While it includes all controllers state capture, that feature is just a layer on top of an orthogonal state machine. I haven’t seen a state machine this powerful anywhere else — it’s pure gold and finally allows managing all animation states in one place. No more juggling multiple instances of one plugin that become a mess after a day or two.

Thanks to the excellent abstractions, the state machine can be used entirely on its own — without layers or animations. There's also a fantastic loosely-coupled messaging system that nearly eliminates the tedious process of setting up triggers for state transitions and makes it easy to synchronize states between different characters.

Huge thanks to the author for the hard work and outstanding result!
Upvote 0
Positive
Version: 1.0.1
Posted:
Works great right of the box. Amazing how much functionality is packed in the first release.

Looking forward future updates!
Upvote 1
Positive
Version: 1.0.1
Posted:
Looks great, was able to get animation up and running quickly.
Upvote 1
Back
Top Bottom