基于两个值夹紧动画

时间:2017-01-02 12:47:01

标签: c# unity3d

我有一个想要根据x值播放的动画,它实际上是一个物体的位置。

在x上映射动画键,从-2到+6开始。因为x变为-2动画将处于初始状态,因为其值变为增加动画应该进一步运行,因为x达到+6动画应该完成。在这些值之间,用户在任何时候减少x值,那么动画应该是反向的。我认为它实际上是钳制过程,我想将x值映射到动画的关键帧中。

下面只是一个运行动画的简单代码:

void Update () {
    if (isPositionChanging)
    {
        if(transform.position.x > xPos){
            if(incrementOrDecrement <=12) {
            incrementOrDecrement ++;
            AnimationPlayOnPositionValue(1, incrementOrDecrement);
            }
        }
        else {
            if (incrementOrDecrement >= 0)
            {
            incrementOrDecrement--;
            AnimationPlayOnPositionValue(1, incrementOrDecrement);
            }
        }

    }
}

void AnimationPlayOnPositionValue(float speed,float timeToUpdate) {
    animatedObject["MachineAnimationComplete"].speed = speed;
    animatedObject["MachineAnimationComplete"].time = timeToUpdate;
    animatedObject.Play();

}

1 个答案:

答案 0 :(得分:0)

不确定我是否得到了你正在努力实现的目标,但我会试一试:

  • 首先,我猜你在xPos = transform.position.x;的末尾忘记了Update()行:为了比较下一帧,我保存最新的X位置就像这些值一样? (代码剥离错误我猜:P)
  • 其次,我认为您可以做的是手动驱动您的动画,因为您知道它的名字:为此,您可以调用AnimationClip.SampleAnimation()方法。

看起来像是:

void Update()
{
    float normalizedTime = Mathf.Clamp((transform.position.x - (-2.0f)) / (6.0f - (-2.0f)), 0.0f, 1.0f);
    float animationTime = normalizedTime * animatedObject["MachineAnimationComplete"].length;

    animatedObject.GetClip("MachineAnimationComplete").SampleAnimation(animatedObject.gameObject, animationTime);`
}

希望这有帮助,