2017-03-25 14 views
0

私はそこにいくつかの敵と少しロゲランのゲームを得ました。彼らが私に当たったとき、私はいくつかの健康を失う。私はこれを「よく知られている標準」という方法で呼びます。ユニティにスライド番号を実装する

public void ChangeHealth(float healthToAdd) // Add or subtract health 
{ 
    healthData.CurrentHealth = Mathf.Clamp(healthData.CurrentHealth + healthToAdd, 0, healthData.MaxHealth); // Change the current health 
    healthView.UpdateHealthBar(healthData); // update the GUI 
    if (healthData.CurrentHealth <= 0) // Kill the player at 0 health 
     Destroy(gameObject); 
} 

私が健康を失うと、これは即座に起こります。今私はそれを段階的に滑らかに増減させたい。

私は数字

float animationTime = 1; // The duration 
float desiredNumber; // The calculated result 
float initialNumber; 
float currentNumber; // The current value 

void AddToNumber(float value) // Change the Health 
{ 
    initialNumber = currentNumber; 
    desiredNumber += value; 
} 

private void Update() 
{ 
    if (currentNumber != desiredNumber) // Create the sliding process 
    { 
     if (initialNumber < desiredNumber) 
     { 
      currentNumber += (animationTime * Time.deltaTime) * (desiredNumber - initialNumber); 
      if (currentNumber >= desiredNumber) 
      { 
       currentNumber = desiredNumber; 
      } 
     } 
     else 
     { 
      currentNumber -= (animationTime * Time.deltaTime) * (initialNumber - desiredNumber); 
      if (currentNumber <= desiredNumber) 
      { 
       currentNumber = desiredNumber; 
      } 
     } 

     Debug.Log(currentNumber); // Update the GUI .. 
    } 
} 

をスライドさせるために、ここで、このコードを発見した問題は、私は本当に私のコードまたはどのように私のコードに追加するためにそれを使用する方法がわからないこと、です。この方法で以前のコードを変更することは可能ですか?それはスライド計算を使用するのですか?

誰かが私を助けてくれたらすごくいいですね。

+0

'AddToNumber()'は、あなたの 'ChangeHealth()'メソッドがしたいものと正確に思われます。クランプや破壊のようなロジックを追加するだけで、あなたの代わりに新しいメソッドを呼び出すことができます。 – Lelefant

答えて

1

まず、Coroutinesを使用することをお勧めします。 Updateでコードを実行すると、各フレームが計算されます。コルーチンを使用する場合は、開始時と終了時を選択できます。これは、あなたが探していた動作であれば、私に教えてくださいhttps://docs.unity3d.com/Manual/Coroutines.html

IEnumerator HealthFade() 
{ 
float time = 1f; // one second 
float currentTime = 0f; // the time passed 
while(currentTime < time) 
{ 
healthbar.fillamount = Mathf.Lerp(0f,100f,currentTime/time); // 0f = 0% hp 1f = 100% Hp, currentTime/time give you a number between 0 and 1 = the amount of health you want to put inside the bar. 
currentTime += Time.deltaTime; 
yield return null; 
} 
} 

:あなたはここにいくつかに関する情報を見つけることができます。

+0

ちょっと、ちょうどあなたのコードを試しました、これは私が持っているものです:http://pastebin.com/ACXs3H1V私のメソッド "ChangeHealth"は呼び出されませんが、私はそれをUpdateメソッドで呼び出します。私が逃した何かがありますか? – Question3r

+0

私は次のようなことを考えていました:http://pastebin.com/RJSnjjKS あなたのメソッドはCoroutineになっていて、StartCoroutine()で呼び出されます。Coroutinesをコードに使用するのは、currentTime /継続時間のため、私たちが入っている正確な秒数で状態を取得します。コルーチンは、メインスレッド(更新機能)とパラレルで実行されます。それがあなたが探していた行動でないなら、私に教えてください。それがあなたを助けたことを願っています。 – pasotee

+0

私はここにこの1つ私のコードを更新しました:http://pastebin.com/aMGnyHxuこれはまだ正常に動作していますが、 "スライド"効果は起こりません。それは即座に起こります。 'healthData.CurrentHealth = Mathf.Clamp(healthData.CurrentHealth + healthToAdd、0、healthData.MaxHealth)に問題がありますか? //データを変更しますか? – Question3r

関連する問題