Scripting Root Motion

Hey, Warriors! It’s Adam here again, and today I’m going to show you how to set up a root motion animation system in your code.

How I feel when I know something cool.

Me when I think I know something cool.

In previous posts where I’ve gone over the fundamentals of setting up humanoid animation systems, I focused on creating character motion using both the standard Third Person Controller script and the root motion option in the Animator component.

As you may have discovered in those posts, these systems definitely have a few flaws that make them a little hard to work with at times. The TPC script is quite old and isn’t really meant to work with Mecanim which causes various headaches, and relying on root motion to determine your character’s movement means including unnecessary animation work early on in your development schedules. You can’t truly test a root motion-based movement system without some animations set up to make it work, and this means focusing on animation during your prototyping phases, which may not be a good option.

But fear not, Warriors! There is yet another way to control the awesome power that is Mecanim, and by the end of this post you’ll be using your home-brewed character controllers to control some of the more negative aspects that come with using a root motion system to move your characters around. Grab the example package, and let’s get on our way!

Unity_Logo_small  [Scripting_RootMotion]

Credit where credit is due: I had a run-in with Robert Lanciault (Mecanim creator!) at GDC 2014, and he showed me this method of scripting root motion. I guess it was always an option, but I’d never run across it before. You can find the original Unity example in the Mecanim Example Scenes package on the Asset Store (Nav Mesh example).

Read the rest of this entry »


2D Animation, Part 4 – Code Explanation

Previously on the site we hosted a guest series on 2D animation in Mecanim written by game artist Jonathan Ferriter. In Part 3 of the series, Jon showed us how take our 2D animations and implement them in the Unity engine using the two scripts provided in the post and titled Jump.cs and Move.cs.

In that third video, Jon sort of skims through the makeup of these scripts and doesn’t take the time to explain how they actually work, so I wanted to write this post in order to discuss them further. While writing this post I’ve gone through both scripts, learned how they work, and written comments in them so you might better understand their systems. You can download the updated scripts from this link.

Unity_Logo_small  Guest_JonFerriter_2DAnimation

Aside: I had a hard time tracking down the origin of these two scripts, and I can tell they’ve just been thrown haphazardly around the internet as the ‘quick solution’. So there might be a much better way to do all of this. Of course they work, but consider this a word of caution.

Read the rest of this entry »


Humanoid Animation – Free Motion, Part 2: Modifying the Third Person Controller

Welcome back, Warriors! This is the second installment of my tutorial on building a free motion animation system using Mecanim. In this post I’m going to walk you through the steps for modifying the Third Person Controller (TPC) script that comes as a part of Unity’s Standard Assets so that it works with Mecanim.

If you haven’t read Part 1: Importing Assets, be sure to check that out before reading on. You’ll need the tutorial package from that post to continue working.

I mentioned this briefly in the first post, but I want to remind you why I’m showing you how to use the TPC script in this tutorial. Even if I’m not a huge fan of it, plenty of developers still use it in their project because it is immediately available to everyone as a part of Unity’s Standard Assets packages. It’s also pretty easy to use if you don’t have the time or know-how to write your own movement code. Unfortunately, the script is written with Unity’s Legacy animation system in mind and not Mecanim. This can cause a lot of problems during development, especially later on when you can’t change fundamental game systems like player movement.

Since I’ve been in this difficult position before, I intend to show you all a way to continue using the TPC script for player movement while using Mecanim for character animations. In order to merge the two systems, we’ll need to make some modifications to our TPC script. All of the modifications shown here deal only with our animation code. No other parts of the code are disturbed.

Aside: Unity’s TPC script is written in JavaScript. The TPC script included in your tutorial package has been translated into C# by yours truly. I find that C# is a more powerful scripting language, and it is my preferred language when coding in Unity. If requested, I will supply JavaScript versions of any code I write.

Read the rest of this entry »