(Unity) - Variable aus einem Skript in einem anderen benutzen?

2 Antworten

Dir fehlen wie gesagt noch wichtige Grundlagen für C#. Die Lösung für dein Problem habe ich dir ja bereits beschrieben, aber du kannst scheinbar mit diesen Punkten noch nichts anfangen - verstehst offensichtlich auch den obigen Code noch nicht.

Wenn man dir hier nun eine fertige Lösung präsentiert, hilft dir das nur für den Moment. Und ich bin mir sicher, du würdest danach einfach weiterstolpern, dem Ratschlag zum Trotz, sich erst einmal mit den Grundlagen der Sprache zu befassen.

Dein Fehler ist:

  • Das health eine lokale Variable ist. Du brauchst aber ein Feld, welches in der ganzen Klasse sichtbar ist.
  • health ist ein Objekt des Typs Health. Das ist kein numerischer Typ, auf den man einfach Rechenoperationen durchführen kann. Stattdessen musst du über das Objekt auf das Property zugreifen, welches den numerischen Typ speichert. Sofern noch kein Property für diesen Wert vorhanden ist, solltest du dir eines anlegen.

Beschäftige dich mit den Themen, die ich dir schon in meinem Kommentar aufgezählt habe. Du brauchst sie.

Dafür verwendet man in C# das hier: Eigenschaften (C#-Programmierhandbuch)

Das könnte zum Beispiel so aussehen:

public class Health : MonoBehaviour {
    [SerializeField]
    private int health;

    public Int Health {
        get { return health; }
        set { health = value; }
    }
}

Das benutzt man dann so:

Hurt()
{
        var component = gameObject.GetComponent<Health>();
        var health = component.Health;
        if(health <= 0)
        {
            Application.LoadLevel(Application.loadedLevel);
        }
}

Heal()
{
    var component = gameObject.GetComponent<Health>();
    if(component.Health < component.MaxHealth){
        component.Health = component.Health + 1;
    }
}