Siavash Mortazavi
Siavash Mortazavi

Reputation: 1852

Unity 4.x: How to Access AnimationState in Mecanim

I'm using Mecanim Animation System in Unity 4.5.x. I have an Animator component on a GameObject called "VictorSprite", with several layers, each layer has several AnimationStates.

How can I access each AnimationState to change its properties, specifically speed?

Unfortunately, most of the documents I can find are deprecated, and don't refer to Mecanim. I have also tried this code:

AnimationState animState = GameObject.Find("VictorSprite").GetComponent<Animator>().animation["VictorTalk"]; 

But, I receive this error message:

"MissingComponentException: There is no 'Animation' attached to the "VictorSprite" game object, but a script is trying to access it. You probably need to add a Animation to the game object "VictorSprite". Or your script needs to check if the component is attached before using it."

Unity 3.x Animation component is deprecated and is not recommended anymore in Unity 4.x.

p.s. I tried this code too, but it doesn't provide good functionality:

AnimatorStateInfo animState = GameObject.Find("VictorSprite").GetComponent<Animator>().GetCurrentAnimatorStateInfo(2);

p.s. 2: Basically, I'm applying multiple animations in different layers on a game object, and I want to be able to pause one of them dynamically. Setting its weight to 0 is not helpful, because it "resets" the animation, instead of pausing.

Upvotes: 0

Views: 2957

Answers (2)

peroon
peroon

Reputation: 84

To speed up,

    var animator = unityChan.GetComponent<Animator> ();
    animator.speed = 10.0f;

Upvotes: 1

axwcode
axwcode

Reputation: 7824

This should give you what you want.

Animator animator = GameObject.Find("ObjectInScene").GetComponent<Animator>();
AnimationInfo[] stateInfo = animator.GetCurrentAnimationClipState(index);

However, it is a bit unclear why you would actually want this.

Upvotes: 0

Related Questions