- Home /
 
 
               Question by 
               alexanderameye · Dec 24, 2013 at 02:22 PM · 
                animationanimatormecanimanimator controllerparameters  
              
 
              unity freezes when running sprinting animation
I followed the beginning of the mecanim unity tutorial and now I was trying to add a sprint animation, so that locomotion is walking and another blend tree is running. I created a new Blend tree, and a transition from locomotion to the running blend tree, and the condition is: "Sprint" is true. Locomotion and the other animations work fine, but when I press the left shift button, unity freezes. This is the BotControlScript:
 ![using UnityEngine;
 using System.Collections;
 
 // Require these components when using this script
 [RequireComponent(typeof (Animator))]
 [RequireComponent(typeof (CapsuleCollider))]
 [RequireComponent(typeof (Rigidbody))]
 public class BotControlScript : MonoBehaviour
 {
     [System.NonSerialized]                    
     public float lookWeight;                    // the amount to transition when using head look
     
     [System.NonSerialized]
     public Transform enemy;                        // a transform to Lerp the camera to during head look
     
     public float animSpeed = 1.5f;                // a public setting for overall animator animation speed
     public float lookSmoother = 3f;                // a smoothing setting for camera motion
     public bool useCurves;                        // a setting for teaching purposes to show use of curves
 
     
     private Animator anim;                            // a reference to the animator on the character
     private AnimatorStateInfo currentBaseState;            // a reference to the current state of the animator, used for base layer
     private AnimatorStateInfo layer2CurrentState;    // a reference to the current state of the animator, used for layer 2
     private CapsuleCollider col;                    // a reference to the capsule collider of the character
 
     static int idleState = Animator.StringToHash("Base Layer.Idle");    
     static int locoState = Animator.StringToHash("Base Layer.Locomotion");            // these integers are references to our animator's states
     static int jumpState = Animator.StringToHash("Base Layer.Jump");                // and are used to check state for various actions to occur
     static int jumpDownState = Animator.StringToHash("Base Layer.JumpDown");        // within our FixedUpdate() function below
     static int fallState = Animator.StringToHash("Base Layer.Fall");
     static int waveState = Animator.StringToHash("Layer2.Wave");
     static int rollState = Animator.StringToHash("Base Layer.Roll");
 
     
 
     void Start ()
     {
         // initialising reference variables
         anim = GetComponent<Animator>();                      
         col = GetComponent<CapsuleCollider>();                
         enemy = GameObject.Find("Enemy").transform;    
         if(anim.layerCount ==2)
             anim.SetLayerWeight(1, 1);
     }
     
     
     void FixedUpdate()
     {
         float h = Input.GetAxis("Horizontal");                // setup h variable as our horizontal input axis
         float v = Input.GetAxis("Vertical");                // setup v variables as our vertical input axis
         anim.SetFloat("Speed", v);                            // set our animator's float parameter 'Speed' equal to the vertical input axis                
         anim.SetFloat("Direction", h);                         // set our animator's float parameter 'Direction' equal to the horizontal input axis        
         anim.speed = animSpeed;                                // set the speed of our animator to the public variable 'animSpeed'
         anim.SetLookAtWeight(lookWeight);                    // set the Look At Weight - amount to use look at IK vs using the head's animation
         currentBaseState = anim.GetCurrentAnimatorStateInfo(0);    // set our currentState variable to the current state of the Base Layer (0) of animation
         
         if(anim.layerCount ==2)        
             layer2CurrentState = anim.GetCurrentAnimatorStateInfo(1);    // set our layer2CurrentState variable to the current state of the second Layer (1) of animation
         
         
         // LOOK AT ENEMY
         // if we hold Alt..
         if(Input.GetButton("Fire2"))
         {
             // ...set a position to look at with the head, and use Lerp to smooth the look weight from animation to IK (see line 54)
             anim.SetLookAtPosition(enemy.position);
             lookWeight = Mathf.Lerp(lookWeight,1f,Time.deltaTime*lookSmoother);
         }
         // else, return to using animation for the head by lerping back to 0 for look at weight
         else
         {
             lookWeight = Mathf.Lerp(lookWeight,0f,Time.deltaTime*lookSmoother);
         }
         
         //JUMPING
         //Idle to Jump
         if (currentBaseState.nameHash == idleState)
         {
             if(Input.GetButtonDown("Jump"))
             {
                 anim.SetBool("Jump", true);
             }
         }
 
         //Loco to Jump
         if (currentBaseState.nameHash == locoState)
         {
             if(Input.GetButtonDown("Jump"))
             {
                 anim.SetBool("Jump", true);
             }
         }
     
         //ROLLING
         //Idle to Roll
         if (currentBaseState.nameHash == idleState)
         {
             if(Input.GetKeyDown(KeyCode.LeftControl))
             {
                 anim.SetBool("Roll", true);
             }
         }
 
         //Loco to Roll
         if (currentBaseState.nameHash == locoState)
         {
             if(Input.GetKeyDown(KeyCode.LeftControl))
             {
                 anim.SetBool("Roll", true);
             }
         }
 
         if(currentBaseState.nameHash == rollState)
         {
             anim.SetBool("Roll", false);
         }
 
         if(currentBaseState.nameHash == locoState)
         {
             while(Input.GetKeyDown(KeyCode.LeftShift))
             {
                 anim.SetBool("Sprint", true);
             }
         }
         //WHILE JUMPING
         // if we are in the jumping state... 
         else if(currentBaseState.nameHash == jumpState)
         {
             //  ..and not still in transition..
             if(!anim.IsInTransition(0))
             {
                 if(useCurves)
                     // ..set the collider height to a float curve in the clip called ColliderHeight
                     col.height = anim.GetFloat("ColliderHeight");
                 
                 // reset the Jump bool so we can jump again, and so that the state does not loop 
                 anim.SetBool("Jump", false);
             }
             
             // Raycast down from the center of the character.. 
             Ray ray = new Ray(transform.position + Vector3.up, -Vector3.up);
             RaycastHit hitInfo = new RaycastHit();
             
             if (Physics.Raycast(ray, out hitInfo))
             {
                 // ..if distance to the ground is more than 1.75, use Match Target
                 if (hitInfo.distance > 1.75f)
                 {
                     
                     // MatchTarget allows us to take over animation and smoothly transition our character towards a location - the hit point from the ray.
                     // Here we're telling the Root of the character to only be influenced on the Y axis (MatchTargetWeightMask) and only occur between 0.35 and 0.5
                     // of the timeline of our animation clip
                     anim.MatchTarget(hitInfo.point, Quaternion.identity, AvatarTarget.Root, new MatchTargetWeightMask(new Vector3(0, 1, 0), 0), 0.35f, 0.5f);
                 }
             }
         }
         
         
         // JUMP DOWN AND ROLL 
         
         // if we are jumping down, set our Collider's Y position to the float curve from the animation clip - 
         // this is a slight lowering so that the collider hits the floor as the character extends his legs
         else if (currentBaseState.nameHash == jumpDownState)
         {
             col.center = new Vector3(0, anim.GetFloat("ColliderY"), 0);
         }
         
         // if we are falling, set our Grounded boolean to true when our character's root 
         // position is less that 0.6, this allows us to transition from fall into roll and run
         // we then set the Collider's Height equal to the float curve from the animation clip
         else if (currentBaseState.nameHash == fallState)
         {
             col.height = anim.GetFloat("ColliderHeight");
         }
         
         // if we are in the roll state and not in transition, set Collider Height to the float curve from the animation clip 
         // this ensures we are in a short spherical capsule height during the roll, so we can smash through the lower
         // boxes, and then extends the collider as we come out of the roll
         // we also moderate the Y position of the collider using another of these curves on line 128
         else if (currentBaseState.nameHash == rollState)
         {
             if(!anim.IsInTransition(0))
             {
                 if(useCurves)
                     col.height = anim.GetFloat("ColliderHeight");
                 
                 col.center = new Vector3(0, anim.GetFloat("ColliderY"), 0);
                 
             }
         }
         // IDLE
         
         // check if we are at idle, if so, let us Wave!
         else if (currentBaseState.nameHash == idleState)
         {
             if(Input.GetButtonUp("Jump"))
             {
                 anim.SetBool("Wave", true);
             }
         }
         // if we enter the waving state, reset the bool to let us wave again in future
         if(layer2CurrentState.nameHash == waveState)
         {
             anim.SetBool("Wave", false);
         }
     }
 }][1]
 
               [1]: /storage/temp/19697-capture1.jpg
 
                 
                capture1.jpg 
                (62.9 kB) 
               
 
              
               Comment
              
 
               
              Your answer