2016-05-25 19 views
1

Iが生存シューターチュートリアルの手順を辿り試みたが(アルファを変える、TextMeshのプロパティにアニメーションクリップを作成し、ステートマシンを作成する)が、textMesh.MeshRenderer._Colorオブジェクト内alphaプロパティをアニメーション化しこのオブジェクトは実行時に消えるため(animatorウィンドウはアニメーション化するための有効なオブジェクトとして受け入れるにもかかわらず)、アニメーションウィンドウは実際にオブジェクトを再表示するとオブジェクトが見つからないことを示しています。捨てられる色のオブジェクトのいくつかの種類ですか?Unity:点滅するTextMeshをアニメーション化する方法(プレイヤーが何かをしたときにアルファを変更する)?

の問題は、これは私がテキストメッシュオブジェクトに編集することができます唯一の「色」であるということです。それ以外の場合、状態マシンは完全に動作しています。アニメーションが再生されているようです...ちょうど何も起こっていません...そして、私が言ったように、アニメーションウィンドウでアニメーションクリップを再び開くと、プロパティには触れていませんが、それぞれのオブジェクト。

私は何をしようとしているのですか?プレイヤーが近づくまで目に見えないように、(HUDではなく)ゲーム内に点滅するラベルを実装しようとしています。コントロールの提案)。たぶん、Textmeshオブジェクトが間違ったオブジェクトです。多分、トラブルのことができます。私が作っています間違い...

答えて

2

を撃つのではなく...私のアニメーション処理が間違っている...しかし、私は簡単に答えは私がやろうとしています何を実装する方法に入るかもしれないと思いますこれをアニメーションとコードで行います。私はコードで行くだろう。 Coroutinesでは、lerpTime.deltaTimeでは、Unityではほぼすべてのタイプのアニメーションが可能です。 startTextMeshAnimation()が呼び出され、stopTextMeshAnimation()が呼び出されるまで、以下のコードはTextMeshを点滅させます。速度を変更するには、changeTextMeshAnimationSpeed()を呼び出し、速度値を渡します。これは数秒です。 5F0.2は大丈夫です。

public TextMesh textMesh; 
public float animSpeedInSec = 1f; 
bool keepAnimating = false; 

private IEnumerator anim() 
{ 

    Color currentColor = textMesh.color; 

    Color invisibleColor = textMesh.color; 
    invisibleColor.a = 0; //Set Alpha to 0 

    float oldAnimSpeedInSec = animSpeedInSec; 
    float counter = 0; 
    while (keepAnimating) 
    { 
     //Hide Slowly 
     while (counter < oldAnimSpeedInSec) 
     { 
      if (!keepAnimating) 
      { 
       yield break; 
      } 

      //Reset counter when Speed is changed 
      if (oldAnimSpeedInSec != animSpeedInSec) 
      { 
       counter = 0; 
       oldAnimSpeedInSec = animSpeedInSec; 
      } 

      counter += Time.deltaTime; 
      textMesh.color = Color.Lerp(currentColor, invisibleColor, counter/oldAnimSpeedInSec); 
      yield return null; 
     } 

     yield return null; 


     //Show Slowly 
     while (counter > 0) 
     { 
      if (!keepAnimating) 
      { 
       yield break; 
      } 

      //Reset counter when Speed is changed 
      if (oldAnimSpeedInSec != animSpeedInSec) 
      { 
       counter = 0; 
       oldAnimSpeedInSec = animSpeedInSec; 
      } 

      counter -= Time.deltaTime; 
      textMesh.color = Color.Lerp(currentColor, invisibleColor, counter/oldAnimSpeedInSec); 
      yield return null; 
     } 
    } 
} 

//Call to Start animation 
void startTextMeshAnimation() 
{ 
    if (keepAnimating) 
    { 
     return; 
    } 
    keepAnimating = true; 
    StartCoroutine(anim()); 
} 

//Call to Change animation Speed 
void changeTextMeshAnimationSpeed(float animSpeed) 
{ 
    animSpeedInSec = animSpeed; 
} 

//Call to Stop animation 
void stopTextMeshAnimation() 
{ 
    keepAnimating = false; 
}` 
+1

ああ、それは素晴らしいです。ありがとうございました – bordeo

関連する問題