2017-01-02 51 views
0

我有一個基於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(); 

} 
+0

確保接受的答案或添加評論(縣)如果你沒有找到答案解決您的問題。 – Kardux

回答

0

不能確定,如果我得到你想要什麼正確實現,但我給它一個去:

  • 第一,我想你在Update()的末尾忘了xPos = transform.position.x;一行:爲了比較下一幀,我像這個值一樣保存了最新的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);` 
} 

希望這有助於