Wie kann ich in Unity auf ein UI Text von einer anderen Klasse, auf der anderen Klasse zugreifen?

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();
}

4DevStudios 
Fragesteller
 29.10.2022, 19:29

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.

0
regex9  30.10.2022, 18:46
@4DevStudios

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)
0