I`m using Spine with Unity inkluding the Animator tool. For this i use this code:
public class AnimationScript : StateMachineBehaviour
{
public string AnimationName;
public float AnimationSpeed;
public bool loop = true;
public int track = 1;
private SkeletonAnimation anim;
//OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
anim = animator.GetComponent<SkeletonAnimation>();
anim.state.SetAnimation(track, AnimationName, loop).TimeScale = AnimationSpeed;
}
This works well so far. Now im trying to set the TmeScale for the walk animation to the real velocity of the Character.
I tryed by using:
public class AnimationScript : StateMachineBehaviour
{
public string AnimationName;
public float AnimationSpeed;
public bool loop = true;
public int track = 1;
public bool useRealSpeed= false;
private float currentSpeed;
private SkeletonAnimation anim;
//OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
anim = animator.GetComponent<SkeletonAnimation>();
anim.state.SetAnimation(track, AnimationName, loop);
if (!useRealSpeed)
{
anim.timeScale = AnimationSpeed;
}
}
override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
if (useRealSpeed)
{
currentSpeed = animator.GetFloat("MovementSpeed");
anim.state.TimeScale = currentSpeed * .5f;
}
}
but it mess up the hole timesclae for other Animations too. I`m using two Tracks, 0 for Legs and 1 for Arms and Body.
Can anyone help me with that?