Jump to content
Unity Insider Forum

Powerleiste nach Gegnertod auffüllen


Unitynoob42

Recommended Posts

Hallo, ich mache ein 2D Spiel in Unity und benutze ein C# Skript. Ich möchte gerne, dass wenn ein Gegner getötet wird, die Powerleiste um 2 von 100 Punkte aufgefüllt wird, das klappt allerdings nicht. Hier der Code:

public class HealthController : MonoBehaviour
{

private float power = 0;


private float maxPower = 100;

public Image powerGUI;

public Enemy enemy;

void UpdateView()
{
   if(enemy.isDead == true && powerGUI.fillAmount != maxPower)
   {
         powerGUI.fillAmount = 0.02F;
   }
	
}
}
public class Enemy : MonoBehaviour {

    public float health = 1;
    public bool isDead = false;

	void ApplyDamage(float damage)
    {
        health -= damage;

        if (health <= 0)
        {
            isDead = true;
            Destroy(gameObject);
        }
    }

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zitat

Ich möchte gerne, dass wenn ein Gegner getötet wird, die Powerleiste um 2 von 100 Punkte aufgefüllt wird, das klappt allerdings nicht.

Das klappt nicht, weil du versuchst auf die enemy-Komponente zuzugreifen, obwohl du das GameObjekt, das die Komponente enthält zerstörst , sobald die Variable "health" <= 0 ist. Sobald du "Destroy(gameObject)" aufrufst, ist das GameObject (mit samt der Komponente) nicht mehr vorhanden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Antwort,

 

habe den Code so geändert, allerdings funktioniert es immernoch nicht.

public class Enemy : MonoBehaviour {

    public float health = 1;
    public bool isDead = false;

	 void ApplyDamage(float damage)
    {
        health -= damage;

        if (health <= 0)
        {
            isDead = true;
            
            Death();
            
        }
    }

    void Death()
    {
        isDead = true;
        walk.enabled = false;
        anim.Play("mummy_death");
        health = health - 1;
       
    }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

OK, wie dein Name und der Quellcode schon vermuten lassen bist du noch ganz am Anfang aber gib nicht auf, das war jeder mal. =)

Also als erstes setzt du deine "isDead" Variable 2 mal auf "true" das ist zwar nicht schlimm aber unnötig. Daher würde ich dir erstmal empfehlen, innerhalb deines if-Blocks in der Methode "ApplyDamage()" diese Zeile zu entfernen:

isDead = true;

da du genau das gleiche sowieso nochmal in der Death()-Methode machst.

Dann möchtest du ja, dass die Variable "health" auf 2 steigt, nach dem sie kleiner oder gleich 0 ist. In deiner Death()-Methode machst du mit deiner health-Variable aber folgendes:

health = health - 1;

Das heißt, du verringerst ihren Wert um eins. Da du aber ihren wert auf 2 gesetzt haben möchtest (nicht um 2 erhöht, sondern auf 2 gesetzt) müsste die Zeile so aussehen:

health = 2;

Wenn das dann immer noch nicht funktioniert, dann hast du noch irgendwo anders fehlerhaften Code.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...