2017-01-14 6 views
0

[OK]を、ので、私はちょうど設定時間lerpが、これが本当であるならば、それは依存持っている必要がありカントユーザーのタップメートルの意味によって制御されるanimationntheスピードがあります。年末Unity - 特定のアニメーション状態がオンのときにどうやってどうやったらどうするの?

cameraAnim.GetCurrentAnimatorStateInfo (0).IsName ("stillOpening") 

を(高速または低速それがかかった時間に関係なく、)このアニメーション私はその最終値にlerpedているように、私の材料で、このフロートが必要になります。

それはstillOpening」の終わりにtopSkyBoxOpenに等しくなるように持っている意味
skybox.SetFloat ("_Exponent1",Mathf.Lerp(skybox.GetFloat("_Exponent1"), topSkyBoxOpen, ratio)); 

"私はタイミングを調整する方法を知らない。

私はアップデート()でこれを試してみました:

void openSkyLerp() 
    { 
     float ratio = 0; 
     float duration = 0.5f; // this is the one that will control how long it takes 
     // value is in second 
     float multiplier = 1/duration; 

     while (cameraAnim.GetCurrentAnimatorStateInfo (0).IsName ("stillOpening")) { 
      ratio += Time.deltaTime * multiplier; 
      skybox.SetFloat ("_Exponent1",Mathf.Lerp(skybox.GetFloat("_Exponent1"), topSkyBoxOpen, ratio)); 

     } 
    } 

しかし、何もまったく起こりません - 私はそのはそれを1つのフレーム内のすべてのlerpを持ってしようとしているので、これがあるかもしれないお読みください。これは可能ですか?どのように速度に関係なくアニメーションが再生されている間、私はどうすることができますか?

答えて

0

これは、 "stillOpening"の末尾にあるTopSkyBoxOpenと同じでなければなりません。私はタイミングを調整する方法を知らない。

問題は、フレームを待っていることさえありません。したがって、方程式が正しい場合であっても、すべてが1つのフレーム内でスムーズに起こることはありません。 yield return null;のフレームを待つと、コルーチンが必要です。

非常に似ていますが、同じではないと回答しましたquestion数時間前です。

stillOpening変数が宛先値の場合は、whileループに入る前に現在の_Exponent1の値を取得します。カウンタがtopSkyBoxOpenより小さい間に各フレームをインクリメントするカウンタ変数を持つ。 SetFloat機能でMathf.Lerp(currentVal, topSkyBoxOpen, counter/duration);を使用することができます。しかし、ときに、ユーザーのタップやアニメーションをスピードアップし、通常の速度でアニメーションの作品

bool running = false; 

void openSkyLerp() 
{ 
    if (running) 
    { 
     return; 
    } 
    running = true; 
    StartCoroutine(OpenSky(5)); 
} 

IEnumerator OpenSky(float duration) 
{ 
    float currentVal = skybox.GetFloat("_Exponent1"); 
    float counter = 0; 
    while (counter < topSkyBoxOpen) 
    { 
     //Exit if not still opening 
     if (!cameraAnim.GetCurrentAnimatorStateInfo(0).IsName("stillOpening")) 
     { 
      yield break; 
     } 
     counter = counter + Time.deltaTime; 

     float val = Mathf.Lerp(currentVal, topSkyBoxOpen, counter/duration); 

     skybox.SetFloat("_Exponent1", val); 
     yield return null; //Wait for a frame 
    } 
    running = false; 
} 
+0

[OK]を、おかげで(働く価値のthatsのでところでどこで?5期間に手に入れた)、のみを取得跳躍約6.28まで、すべてではありません – skyguy

+0

**どこで5を取得しましたか?**どこでも。任意の番号を使用できます。それは単に、現在の '_Exponent1'状態から* 5 *秒でtopSkyBoxOpen'に徐々に移行することを意味します。あなたはそれをあなたが望むものに変えることができます。 – Programmer

+0

**飛び跳ねは6.28周りにしか到達しません**これは '_Exponent1'のククルント値から' topSkyBoxOpen'の値になります。 'topSkyBoxOpen'が6.28の場合、それは6.28で止まりますので、' topSkyBoxOpen'変数の値を確認してください。 'topSkyBoxOpen'変数の値が停止時と異なる場合、' if(!cameraAnim.GetCurrentAnimatorStateInfo(0).IsName( "stillOpening"))を削除してください。 { yield break; } 'をコードから削除します。それがあなたの問題を解決するかどうか教えてください。 – Programmer

関連する問題