(Unity) Variable von einem Skript in einem anderen benutzen?

2 Antworten

Du brauchst nur die Spieler-Instanz (also das GameObject). Über dieses kannst du dir in der Movement-Klasse dann eine Instanz zu Health holen:

var health = (Health) gameObject.GetComponent("Health");

Das health-Feld sollte ein sichtbares Property bekommen. Ich würde es wohl Value nennen.

Samir34 
Fragesteller
 22.03.2020, 19:19

Danke für deine Antwort aber wenn das Player-Objekt bei mir "Player" heißt schreibe ich dann einfach "Player" statt "gameObject"? oder muss ich das gameObject irgenwie davor definieren?

0
Samir34 
Fragesteller
 22.03.2020, 19:21
@Samir34

Es wird nämlich wenn ich

var health = (Health) gameObject.GetComponent("Health");

schreibe das var und das "gameObject" rot angestrichen

0
regex9  22.03.2020, 19:26
@Samir34

gameObject ist ein sichtbares Feld für Components. Wenn var rot markiert wird, versuchst du vermutlich, health gerade außerhalb einer Methode zu definieren. Lies einfach die Fehlermeldung, die MonoDevelop/Visual Studio dir dazu ausgibt.

Generell solltest du dich aber erst mit C#-Grundlagen befassen, bevor du mit Unity beginnst. Dann wäre dieses Problem kein Problem für dich. 😜

0
Samir34 
Fragesteller
 22.03.2020, 19:31
@regex9

Oh- mann danke!

Aber ich kann das health dann nicht mehr wie ein int handhaben also sowas wie

healt--;

machen.

Gibt es da irgendeinen Tipp den du für mich hast?

0
regex9  22.03.2020, 19:38
@Samir34

In health steckt zunächst nur das Component-Objekt (also die Skriptklasse). Über dieses kannst du wie gesagt auf sichtbare Properties zugreifen und sie verändern (s. meine Antwort oben).

Generell wäre es am besten (hinsichtlich Performance), wenn du dir das Component-Objekt (health) als Feld anlegst, in Start definierst (GetComponent) und in Folgemethoden darauf zugreifst.

0
Samir34 
Fragesteller
 22.03.2020, 19:50
@regex9

Ich habe hier meine Start-Funktion:

 void Start()
    {
        var health = (Health)gameObject.GetComponent("Health");
    }

und hier eine Funktion wo ich darauf zugreife:

 void Hurt()
    {


        health--;
        if(health <= 0)
        {
            Application.LoadLevel(Application.loadedLevel);
        }
    }

Leider weiß ich nicht wie ich darauf zugreife :(.

Ich habe eigentlich gedacht das ich in C# gut gewappnet bin :(...

0
regex9  22.03.2020, 19:56
@Samir34

Das bist du wohl leider noch gar nicht. Es macht eher Sinn, wenn du dich damit nochmal beschäftigst und das meine ich nicht bös.

Ich weiß nicht, womit du bisher C# gelernt hast. Hier findest du jedenfalls eine ziemlich gute Quelle: http://openbook.rheinwerk-verlag.de/visual_csharp_2012/

Du solltest in Themen wie Arrays, Operatoren, Variablen, Funktionen, Sichtbarkeiten und vor allem auch OOP sicher sein, bevor du weitermachst. Andernfalls wirst du immer wieder auf Probleme stoßen, die eigentlich leicht zu lösen wären.

1
Samir34 
Fragesteller
 22.03.2020, 20:00
@regex9

Bis jetzt ist eigentlich alles immer gut gelaufen..

ich verstehe halt nicht wie ich jetzt das health anspreche weil wenn es einfach eine Membervariable wäre würde ich ja

Health.health ....

machen aber das funktioniert leider nicht..

0
Samir34 
Fragesteller
 22.03.2020, 20:39
@Samir34

kannst du mir da vielleicht helfen?

0