Wie kann ich in Unity auf ein UI Text von einer anderen Klasse, auf der anderen Klasse zugreifen?
Ich habe den Fehler gefunden
es hat doch mit mit Ammo = GameObject.Find("AmmoText"); , und Ammo.GetComponnent<Text>.text = Ammo.ToString(); Funktoniert ich habe nur etwas unlogisch gedacht
Ich will gerne auf mein "Inventar Klasse" zugreifen, wo ich sage, wenn ich die Waffe fallen lasse, soll die Munition auf 0 gestellt werden, und dass es auch im Text die "0" angezeigt werden soll. Das funktioniert ja, aber jetzt habe ich eine andere Klasse, die ich der Waffe hinzugefügt habe. In der Klasse sage ich, dass die Waffe nachladen soll wenn es das Magazin leer geschossen wurde. Und das soll auch in dem gleichen Text anzeigt werden. Den kompletten Skript hab ich fertig, nur mir fehlt das ich den Text auf beide Klassen zugreifen kann
Das mit, Ammo = GameObject.Find("AmmoText"); und dann, Ammo.GetComponnent<Text>.text = Ammo.ToString();
hab ich auch schon ausprobiert. Macht er aber nicht da steht auch kein Fehler Code. Ich habe sonst keine ahnung mehr.
1 Antwort
Dein gesamtes Konstrukt klingt seltsam, nicht wirklich logisch.
Ich würde ja eher nur zwischen drei Klassen unterscheiden: Weapon, WeaponOwner und Inventory. Der WeaponOwner hat den interessantesten Inhalt:
class WeaponOwner
- weapon: Weapon
- inventory: Inventory
+ reload(): void
+ throwAway(): void
Eine Referenz auf den Statustext kann nun vom Inventory-Objekt gehalten werden.
class Inventory
- numberOfAvailableBullets: int
- statusText: Text
+ update(): void
+ setNumberOfAvailableBullets(count: int): void
Von außen wird nur die Anzahl der Kugeln geändert. Das Inventar kann den Statustext selbst in seiner Update-Methode ändern.
void Update()
{
statusText.text = numberOfAvailableBullets.ToString();
}
Meines Erachtens sollte die Kontrolle der Waffe über die Spielerfigur ablaufen. Aber gut, eine Lösung für dein System wäre es wohl, bei Aufnahme der Waffe die Referenz des Spielerobjekts an die Waffe zu übergeben. Dann kann über diese eine Methode aufgerufen werden, die den Text aktualisiert.
In Pseudocode angedeutet:
class Player:
void takeWeapon()
weapon.player = this
void throwWeapon()
weapon.player = null
void updateAmmoStatus(numberOfBullets):
statusText.text = numberOfBullets.toString()
class Weapon:
player = null;
void shoot():
# shoot ...
player.updateAmmoStatus(numberOfBullets)
Das "Inventar Script", ist Eigentlich ein Pickup Script, der sagt Wenn er die Waffe aufhebt, dass der Script von der Waffe aktiviert wird. und viele weitere Komponenten von der Waffe ein und ausgeschaltet wird. Und wenn er die Waffe fallen lässt dass die ganzen Komponente die geändert wurden wieder rückgängig gemacht wird + er leert logischerweise das Magazin, da man die Waffe nicht mehr in der Hand hat. Beim Spieler Objekt hab ich auch das UI reingemacht. Wo ich angebe was er für eine Waffe in der Hand gerade hat, wie viel Munition man hat und wie viel Munition noch in das Magazin drinnen sind. Die Waffe ist ehr ein Externer Objekt der erst dem Spieler zugewiesen wird, wenn ich die Waffe aufhebe. Und jetzt kommt mein Waffen Script und mein Problem im Spiel. Mein Waffen Script, was sagen und abfragen soll wie viel Munition im Magazin drinne ist, damit die Waffe schießen kann usw und dass soll im UI stehen, wie viel Munition im Magazin drinnen ist vom Spieler. Und die Waffe lass ich von einer Kiste die man aufmachen kann Spawnen.
Vielleicht hab ich es jetzt besser erklärt, wollte ein Bild einsenden damit ich nicht viel schreiben muss. Damit auch du nicht viel lesen musst, aber hoffe du verstehst es jetzt. Brauche einfach nur was damit ich auf dem UI Text vom Spieler zugreifen kann.