- 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);
//}
}