- Home /
 
How would I use Mecanim to holster or draw a weapon? (C#)
I have two animations on my character: DrawWeapon HolsterWeapon
In the animator, they are both on a layer called "Holster".
I have a boolean set up in mecanim that I want to use to control whether the weapon is currently holstered or not. I want the holstered boolean to be toggled between true and false upon pressing "q".
Here is my attempted code(I excluded the unnecessary parts):
 using UnityEngine;
 using System.Collections;
 
 public class BusinessmanController : MonoBehaviour {
 
     private Animator anim;    // Reference to the animator component.
 
     private BusinessmanHashes hash;    // Reference to the HashIDs.
 
     public bool holsteredLocal = true; 
 
 void Awake ()
     {
         // Setting up the references.
         anim = GetComponent<Animator>();
         hash = GetComponent<BusinessmanHashes>();
     }
     void Update ()
     {            
         //AudioManagement(shout);
         if (Input.GetKeyDown("q")) {
             Debug.Log ("go");
             if (holsteredLocal) {
                 holsteredLocal = false;
                 anim.SetBool(hash.holsterBool, false);
             }
             if (!holsteredLocal) {
                 holsteredLocal = true;
                 anim.SetBool(hash.holsterBool, true);
             }
         }
     }
         void DrawManagement (bool holstered)
         {
             // If the draw input has been pressed...
             if (holstered) {
                 gameObject.GetComponent<HeadLookControllerImproved>().enabled = false;
             }
             if (!holstered) {
                 gameObject.GetComponent<HeadLookControllerImproved>().enabled = true;
             }
         }        
 
 }
 
 
 
     
     
 
 
 
               The script compiles okay, but it doesn't really do anything at all when I press 'q'. I'm new to mecanim, can anyone help?
               Comment
              
 
               
              Answer by Teejay5 · May 27, 2013 at 02:37 AM
Nevermind, solved! Just had to adjust some things:
 using UnityEngine;
 using System.Collections;
 
 public class BusinessmanController : MonoBehaviour {
 
     public float speedDampTime = 0.1f;    // The damping for the speed parameter
     
     
     private Animator anim;                // Reference to the animator component.
     private BusinessmanHashes hash;            // Reference to the HashIDs.
     
     public bool holsteredLocal = true;
     
     void Awake ()
     {
         // Setting up the references.
         anim = GetComponent<Animator>();
         hash = GetComponent<BusinessmanHashes>();
         
         // Set the weight of the layer to 1.
         anim.SetLayerWeight(1, 1f);
     }
     
     
     void FixedUpdate ()
     {
         // Cache the inputs.
         float h = Input.GetAxis("Horizontal");
         float v = Input.GetAxis("Vertical");
         //bool sneak = Input.GetButton("Sneak");
         
         MovementManagement(h, v);
         
         
     }
     
     
     void Update ()
     {        
         
         if (Input.GetButtonDown("Draw")) {
             Debug.Log ("go");
             if (holsteredLocal == true) {
                 holsteredLocal = false;
                 anim.SetBool(hash.holsterBool, false);
             }
             else if (holsteredLocal == false) {
                 holsteredLocal = true;
                 anim.SetBool(hash.holsterBool, true);
             }
         }
         
         //DrawManagement(holsteredLocal);
     }
     
     
     void MovementManagement (float horizontal, float vertical)
     {
         // Set the sneaking parameter to the sneak input.
         //anim.SetBool(hash.sneakingBool, sneaking);
         
         // If there is some axis input...
         if(horizontal != 0f || vertical != 0f)
         {
             // ... set the players rotation and set the speed parameter to 5.5f.
             ////Rotating(horizontal, vertical);
             anim.SetFloat(hash.speedFloat, 5.5f, speedDampTime, Time.deltaTime);
         }
         else
             // Otherwise set the speed parameter to 0.
             anim.SetFloat(hash.speedFloat, 0);
     }
     
         void DrawManagement (bool holstered)
         {
             // If the draw input has been pressed...
             if (holstered) {
                 gameObject.GetComponent<HeadLookControllerImproved>().enabled = false;
             }
             if (!holstered) {
                 gameObject.GetComponent<HeadLookControllerImproved>().enabled = true;
             }
         }        
             
         //    AudioSource.PlayClipAtPoint(shoutingClip, transform.position);
     //}
     
     
 }
 
              Your answer