Howto: Remapping the Animation Hierarchy in Unity

Working with animations in Unity has some quirks. Sometimes I will make an animation and I animated the wrong object. I might have realized I want to animate the container for an object, or accidentally animated the parent when I wanted to animate the child (this happens more often than I’d like to admit!).

missing_property
Cube2 has been renamed to MegaCube, breaking the animation.

Unity does not come out of the box with functionality to remap animations between objects.  But there are a few options to make your life easier. I’ll go over 3 ways to fix this: the Animation Hierarchy Editor, my Search & Replace tool, and manually editing the YAML.

Animation Paths – What are they?

All three methods share the same thing: I want to re-map the ‘path’ of the animation clip’s property to the correct path. What do paths look like? They are simply strings that map the path from the animation root to the animated object. Game objects names are separated by a slash (/) character. Some examples:

  • MyObject
  • Parent/Child
  • GrandParent/Parent/Child

So all techniques shown below are simply changing the clip’s ‘path’ value to a new value.

Animation Hierarchy Editor

Alexander Yoshi has created the useful Animation Hierarchy Editor utility. This allows you to remap between objects quite easily, although the interface is somewhat non-intuitive.

animation_hierarchy

The utility is one .cs file that you can place in the Assets/Editor folder. After installing it choose Window->Animation Hierarchy Editor and dock the window.

Basic Usage

Click on the animation in the Project tab.

animation_in_project_tab

Animations in Unity are comprised of Animators with one or more AnimationClips. The animator Parent uses the clip CubeAnimate.

In your scene, or on a prefab, locate the game object that contains the Animator.

animator_game_object

The ‘Parent’ object contains an animator that uses the CubeAnimate animation that we want to remap.

Drag this object into the ‘Referenced Animator’ field in the Hierarchy Window.

animator_reference

The window will now populate with the objects used:

paths_used

The path ‘Cube2’ doesn’t have a corresponding game object, denoted in red. It doesn’t point to any specific object. I can  update the path by dragging the MegaCube game object into the red field, fixing the clip:

mega_cube_path_fixed

Switching over to the Animation window shows that the object’s path has been remapped correctly:

animation_window_fixed

Project Search & Replace

My Project Search & Replace tool has the ability to fix animation clips:

 

Editing The Animation Clip Directly

The Animation Clip exists as a file on your hard drive, similar to a prefab, material, or other Unity object. If your ‘Asset Serialization’ is set to ‘Force Text’ then this file is a text file that you can open in a text editor and modify by hand. Naturally, modifying the file by hand is prone to error, and so it should only be attempted if you feel comfortable doing so.

asset_serialization_mode

To locate the Asset Serialization setting, go to Project Settings->Editor. This is under the Edit menu on Mac, but may be somewhere else on Windows (lmk and I can update this!).

Before modifying the clips, make sure that any changes are correctly saved to disk by choosing File->Save Project. Open the file in your text editor of choice (shoutout to Sublime). You’ll see the following data:

yaml_animation

See that last line with ‘path’ in it? That’s the path :). Searching & Replacing the value after the colon to another value will update the animation clip to point to a new path. After the file is saved and Unity refreshes the Animation Clip will display the new values.