(Unity) Variable von einem Skript in einem anderen benutzen?
Hallo,
ich bin gerade dran für mein Spiel ein Kampfsystem zu machen.
Ich habe eine Lebensanzeige und will das Schadenssystem in meinem Movement-Script machen.
In dem Script "Health" das sich auf dem Spieler befindet steuere ich die Lebensanzeige. Jetzt muss ich die variable "health" die sich im Script "Health" befindet ja mit dem script "Movement" (welches sich auch auf dem Spieler befindet) irgendwie verknüpfen.
Also ich möchte die Variable "health" aus dem Script "Health" im Script "Movement" weiterverwenden.
Wie mache ich das? Im Internet habe ich kein passendes Tutorial gefunden.
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.
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. 😜
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.
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 :(...
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.
In diesem Video wird das ganze auch nochmal kurz erklärt...
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?