Unity2D: Wie kann ich "Für das nicht statische Feld, die Methode oder die Eigenschaft "Component.gameObject" ist ein Objektverweis erforderlich" korrigieren?
Hallo allesamt, ich mache aktuell ein 2D-Spiel und habe in meiner "Enemy"-Klasse eine Funktion namens "TakeDamage()" geschrieben, mit dessen Hilfe der Gegner Schaden nehmen und auch sterben können soll. Ich will diese entsprechend immer ausführen, wenn der Spieler einen Gegner in seiner Reichweite attackiert.
Aber genau bei diesem Ausführen kommt die Fehlermeldung:
Für das nicht statische Feld, die Methode oder die Eigenschaft Enemy.TakeDamage(float)" ist ein Objektverweis erforderlich.
Hier ist das Skript von der Funktion:
public void TakeDamage(float amount)
{
currentHealth -= amount;
if (currentHealth <= 0)
{
Destroy(this.gameObject, deathTime);
Debug.Log("Enemy died");
}
Debug.Log("Enemy took damage");
}
Und hier das Skript für die Attack()-Funktion, in der ich das obige nutzen will:
void Attack()
{
anim.SetTrigger("attacking");
Collider2D[] touchedEnemies = Physics2D.OverlapCircleAll(attackPoint.position, attackRange, enemyLayer);
foreach(Collider2D enemy in touchedEnemies)
{
Enemy.TakeDamage(30f);
Debug.Log("We hit " + enemy.name);
}
}
Jegliche Hilfe würde ich herzlichst begrüßen. Danke im Voraus und einen schönen Tag. 😉
1 Antwort
Die TakeDamage-Methode ist eine objektgebundene Methode, daher brauchst du auch ein Objekt der Klasse Enemy, um sie aufrufen zu können.
In deiner Schleife läufst du bereits über alle Collider. Von diesen musst du dir das jeweils angehängte Game Object holen und von diesem dann die Script-Komponente (Enemy).
Ich verstehe, könntest du mir netterweise noch sagen, wie das in meinem Code aussähe? So, wie ich es verstehe, könnte ich durch Instantiate() wohl auch einfach eine Instanz der Enemy Klasse als Objekt nehmen, aber in dieser verallgemeinerten Form in Verbindung mit jeglichem GameObject vom Collider habe ich gerade etwas herumprobiert und bekomme es nicht ganz hin.