- Home /
Link animations and movement for CharacterController
I have a basic script for moving my character around and have setup my blend trees with animations.
Problem is that the movement and animations are not linked.
If I push play, the Idle state starts, and when it ends, blends into the walk animation automatically. Without any input from the controls.
Controls work fine by them selves as I can move around as I wish. But the animations pay no attention to the controls and go on regardless. Is this an issue in the CharacterController?
I am new to Unity and am running version 5.0.1 personal
using UnityEngine;
using System.Collections;
[RequireComponent(typeof (Animator))]
[RequireComponent(typeof(CharacterController))]
public class Motion : MonoBehaviour {
public float MoveSpeed;
public float RotationSpeed;
CharacterController cc;
public float animSpeed = 1.5f;
private Animator anim;
private AnimatorStateInfo currentBaseState;
static int idleState = Animator.StringToHash("Base Layer.Idle");
static int forwardState = Animator.StringToHash("Base Layer.Forwards");
static int backwardState = Animator.StringToHash("Base Layer.Backwards");
// Use this for initialization
void Start () {
anim = GetComponent<Animator>();
cc = GetComponent <CharacterController>();
}
// Update is called once per frame
void Update () {
Vector3 forward = Input.GetAxis ("Vertical") * transform.TransformDirection (Vector3.forward) * MoveSpeed;
transform.Rotate (new Vector3 (0, Input.GetAxis ("Horizontal") * RotationSpeed * Time.deltaTime, 0));
cc.Move (forward * Time.deltaTime);
cc.SimpleMove (Physics.gravity);
Debug.Log (anim);
}
}
Comment
Best Answer
Answer by Tempus_G · May 23, 2015 at 07:52 AM
Ok. I think I sorted it out. Was missing A few lines......
Updated script:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Animator))]
[RequireComponent(typeof(CharacterController))]
public class Motion : MonoBehaviour {
Animator anim;
public float MoveSpeed;
public float RotationSpeed;
CharacterController cc;
// Use this for initialization
void Start () {
cc = GetComponent <CharacterController>();
anim = GetComponent<Animator>();
}
// Update is called once per frame
void Update () {
Vector3 forward = Input.GetAxis("Vertical") * transform.TransformDirection(Vector3.forward) * MoveSpeed;
transform.Rotate (new Vector3(0,Input.GetAxis("Horizontal") * RotationSpeed * Time.deltaTime,0));
cc.Move(forward * Time.deltaTime);
cc.SimpleMove(Physics.gravity);
float move = Input.GetAxis ("Vertical");
float turn = Input.GetAxis ("Horizontal");
anim.SetFloat("Speed", move);
anim.SetFloat("Direction", turn);
}
}