In the second part of this tutorial we will use the weight tool, to clean up the auto weighting of the mesh to the bones. This ensures the right part of the mesh moves with the correct bone so that we can animate the rig correctly. 36 Mb video file.
Click the image to watch the video.

do you know of any other video training for unity 3D? I’ve already seen Unity’s site and some site called Vemo or something like that but nothing else is around. -James
Yes. I work with a guy called Will Goldstone, who has put some very good video tutorials together which can be accessed from his web site: Learn Me Silly.
@james sullivan- The videos for Unity on LearnMeSill are more in depth than the vimeo ones and go quite in depth.
Mark- Thank you for this excellent resource. I have to get some sleep but plan to take a lok at these tomorrow.
Hey, thanks for the video tutorial. It helped a lot for the rigging, but I can’t seem to get it to work inside unity. I am doing the modeling/animation and my brother is doing the scripting. I have followed your tutorial and others several times and everything works fine in c4d. When I export in .fbx it seems to come in just fine. However, we can’t get the animations to work at all inside of Unity. I think it is a scripting error personally, but my brother disagrees. Where would I be able to find the script to make it work? Thanks, Garrison
Hi Garrison
Before we get into scripting, let’s check and see you have your character set up correctly. Can you see your animations in the inspector when you place the character on the stage? Have you added a Character Controller? If these are in place then you can add this script:
var speed = 3.0;
var rotatationSpeed = 200.0;
private var curSpeed = 0.0;
var runIncrease : float = 4.5;
var footsteps : AudioClip;
var lastStepTime : float;
var runOn : boolean = false;
private var footStepTime : float;
static var caught: boolean = false;
static var retreat: boolean = false;
var release = 0;
function Start ()
{
// Set all animations to loop
animation.wrapMode = WrapMode.Loop;
animation.Stop();
}
function Update () {
if (caught==false){
// Rotate around y-axis
var newRotation = Input.GetAxis("Horizontal") * rotatationSpeed;
transform.Rotate(0, newRotation * Time.deltaTime, 0);
// Calculate speed
var newSpeed = Input.GetAxis("Vertical") * speed;
if (Input.GetKey("left shift")){
newSpeed *= runIncrease;
runOn=true;
}
else{
runOn=false;
}
//make him slower when hurt
/*if(Health.health < = 40){
newSpeed = newSpeed/2;
}*/
// Move the controller
var controller : CharacterController = GetComponent (CharacterController);
var forward = transform.TransformDirection(Vector3.forward);
controller.SimpleMove(forward * newSpeed);
if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1){
animation.CrossFade("walk");
}
else{
animation.CrossFade("idle");
}
if(runOn){
footStepTime = 0.25;
animation.CrossFade("run");
}
else{
footStepTime = 0.5;
}
if(newSpeed>=1 && Time.time > (lastStepTime+footStepTime)){
lastStepTime = Time.time;
footSteps();
}
// Update the speed in the Animation script
SendMessage("SetCurrentSpeed", newSpeed, SendMessageOptions.DontRequireReceiver);
SendMessage("SetCurrentLean", Input.GetAxis("Horizontal"), SendMessageOptions.DontRequireReceiver);
}else{
// should put some code here to make energy go down
// also make screen go fuzzy
//caught so press jump button repeatedly to release
if(Input.GetButtonUp("Jump")){
release++;
Debug.Log(release);
}
//after 6 presses let go!
if(release>5){
Debug.Log("released");
release=0;
caught=false;
retreat=true;
}
}
}
function footSteps(){
//AudioSource.PlayClipAtPoint(footsteps, transform.position);
}
@script RequireComponent (CharacterController)
[...] See also Part 1 and Part 2. [...]