5つの健康コンテナを持つZeldaヘルスシステムを構築しました。各容器には4つの部分があります。Unity - hpコンテナの更新時にZeldaライフシステムがクラッシュする
このヘルスバーを更新すると、範囲外の例外が発生します。
マイコード:
[SerializeField]
Image[] healthContainers; // 5 containers as images
int currentHealth;
int maxHealth;
int healthPerHealthContainer = 4; // 1 healthcontainer = 4 health pieces
private void Start()
{
maxHealth = healthContainers.Length * healthPerHealthContainer; // set max hp
currentHealth = maxHealth; // init current hp
UpdateHealthBar(); // first gui update
}
public void ChangeHealth(int amount) // get damage or heal
{
currentHealth = Mathf.Clamp(currentHealth + amount, 0, maxHealth); // add or subtract health
UpdateHealthBar(); // update gui
}
public void UpdateHealthBar() // gui updater
{
int healthContainerIndex = currentHealth/healthPerHealthContainer; // get the current heart to change
int healthContainerFillAmount = currentHealth % healthPerHealthContainer; // the fillamount of the heart
if (currentHealth % healthPerHealthContainer == 0)
{
if (currentHealth == healthContainers.Length)
{
healthContainers[healthContainerIndex - 1].fillAmount = 1;
return;
}
if (healthContainerIndex > 0)
{
healthContainers[healthContainerIndex].fillAmount = 0;
healthContainers[healthContainerIndex - 1].fillAmount = 1;
}
else
{
healthContainers[healthContainerIndex].fillAmount = 0;
return;
}
}
healthContainers[healthContainerIndex].fillAmount = healthContainerFillAmount/(float)healthPerHealthContainer;
}
だから私は20馬力で始まる各健康のために4枚で5個の健康コンテナを使用した場合。 GUIを更新するとき、それは
healthContainerIndex = 5;
に
healthContainers[healthContainerIndex].fillAmount = 0;
..ため
int healthContainerIndex = currentHealth/healthPerHealthContainer;
結果にクラッシュし、5つのコンテナと配列のインデックス範囲は、0から4です。
しかし、簡単に書いてください。
healthContainers[healthContainerIndex -1].fillAmount = 0;
私は正しい心を得る必要があるので間違っています。だから誰かが私がここで作った間違いを犯すのだろうか?私はそれを見ることができません..
私はあなたが(紙に) 'currentHealth'と何が' healthContainerIndex'があることを期待したいの値、およびどのような変更を期待したい 'healthContainers'インデックス書き留め示唆しています。 –
Unityに[SerializeField]を使用する理由はほとんどありません。 – Fattie
@Fattieよく執筆しています...そうではありません。変数をプライベートにすると、よりきれいに見える – Question3r