Playing in Edit Mode

The SoloAnimation component is only used to play a single animation so it will automatically apply the first frame of that animation in Edit Mode as soon as it is assigned (as long as the Apply In Edit Mode toggle is enabled):

This is implemented by using the MonoBehaviour.OnValidate message which gets called in Edit Mode whenever an instance of the script is loaded or a value is changed in the Inspector. So if you want your own scripts to work like that too, you can simply use it to call either of the following methods:

  • AnimancerUtilities.EditModeSampleAnimation applies the first frame of the animation (or a specific time if you use the optional parameter).
  • AnimancerUtilities.EditModePlay actually plays the animation.

They're both AnimationClip Extension Methods so they can be called directly on the animation:

[SerializeField]
private AnimancerComponent _Animancer;

[SerializeField]
private AnimationClip _Idle;

private void OnValidate()
{
    // Apply the first frame of the animation.
    _Idle.EditModeSampleAnimation(_Animancer);
    
    // Apply the effects of the frame 0.5 seconds into the animation.
    _Idle.EditModeSampleAnimation(_Animancer, 0.5f);
    
    // Actually play the animation.
    _Idle.EditModePlay(_Animancer);
}
  • This is especially convenient for Sprite animations like those in the Directional Basics sample so that you can simply apply the first frame of whatever Idle animation you assign to each character so that it will show the correct Sprite without you needing to also set the Sprite manually.
  • The Doors sample allows each door to start anywhere between open and closed, so it uses this feature to show exactly where every door will be in the Scene view without needing to enter Play Mode.

Both of those methods automatically take care of a few extra concerns which wouldn't normally be relevant in a regular call to AnimancerComponent.Play:

  • You can actually pass in any Component and it will find the correct object to play the animation on by searching the parents and children of the given object.
  • They null-check the AnimationClip and the object to play it on so you don't have to worry about that.
  • They have [Conditional("UNITY_EDITOR")] attributes.
  • They do nothing in Play Mode. Otherwise changing anything in the script's Inspector in Play Mode would play the specified Idle animation and interrupt whatever Animancer was supposed to be doing.
  • Also note that animations in Edit Mode do not count as modifications to the scene that will flag it as dirty (to tell Unity that it needs to be saved). This generally doesn't matter since any time the scene is opened the animation will simply be played again. However, when the scene does get saved it could be at any point in the animation and save whatever values it currently has, which would show up as modifications in a version control system.