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.

See also Part 1 and Part 3.

Click the image to watch the video.

Weighting a character


This post is tagged

7 Responses

  1. james sullivan says:

    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

  2. Mark says:

    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.

  3. diamondTearz says:

    @james sullivan- The videos for Unity on LearnMeSill are more in depth than the vimeo ones and go quite in depth.

  4. diamondTearz says:

    Mark- Thank you for this excellent resource. I have to get some sleep but plan to take a lok at these tomorrow.

  5. Garrison Foster says:

    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

  6. Mark says:

    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)

Leave a Reply

Categories