CharacterStateManager

Plugins CharacterStateManager

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.
Author
ThatsLewd
Downloads
4,192
Views
7,288
Packages
1
Total Size
0.06 MB
Version
1.0.1
First release
Last update
Rating
5.00 star(s) 2 ratings

More resources from ThatsLewd

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

Works great right of the box. Amazing how much functionality is packed in the first release.

Looking forward future updates!
Upvote 0
Looks great, was able to get animation up and running quickly.
Upvote 0
Back
Top Bottom