Jump to content
Unity Insider Forum

Variablen-Werte während der Laufzeit(Spielzeit) ändern


killstriker64

Recommended Posts

Hallo liebe Unity-Community,

ich habe vorgehabt einen Schwierigkeitsgrad im Spiel einzubauen. Dabei sollen auf Knopfdruck die Werte von Variablen im Spielgeschehen geändert werden. Auf Easy, Default und Hard (Funktionen im Script) habe ich jeweils die Werte der einzelnen Variablen (Spielverhalten von Objekten) geändert. Diese Änderungen sollen sich natürlich auch ingame bemerkbar machen. Beispielsweise möchte ich, dass der 'float lifetime' Wert von (default) 1f bei Knopfdruck auf 0.5f geändert wird und diese Änderung in der Laufzeit wirksam ist. Ich hab es hinbekommen, dass die Änderungen vor Spielstart wirksam werden (durch Bool-Werte: also Easy und Default Schwierigkeitsgrade sind auf 'false' und Hard ist auf 'true' für den Schwierigkeitsgrad Hard ==> siehe Anhang). Jedoch möchte ich dies wie gesagt während des Spiels ändern und wirksam machen. Hat jemand möglicherweise Ideen bzw. Lösungsvorschläge, wie man dieses Problem bewältigen kann? Zusätzlich sei noch erwähnt, dass ich die neu bearbeiteten Werte bei neuladen der Szene in Laufzeit beibehalten möchte. 

 

Mit freundlichen Grüßen

killstriker64

AimTraining1.PNG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn du etwas am Start aufrufen möchtest, dann benutzt du die Start/Awake Methoden.

Wenn du ewas zur Laufzeit aufrufen möchtest, dann benutzt du Update Methode.

https://docs.unity3d.com/ScriptReference/MonoBehaviour.Update.html

Noch besser wäre es natürlich wenn du eigene Funktion schreibst und nur einmal diese aufrufst, mit einem Knopf zum Beispiel. :)

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Statt offensichtlich boolschen Werten für den Schwierigkeitsgrad würde ich eine Enumeration nutzen, damit Du immer nur einen Zustand haben kannst.

//Beispiel
public enum GameDifficulty
{
  Easy = 0,
  Medium = 1,
  Hard = 2
}

//... in deiner Komponente
public GameDifficulty difficulty = GameDifficulty.Easy;

Um die lifetime diesem anzupassen, könntest Du z.B. ein Dictionary nutzen.

//in deiner Komponente da oben
private Dictionary<GameDifficulty, float> lifetimeDictionary = new Dictionary<GameDifficulty, float>();

void Start()
{
  lifetimeDictionary.Add(GameDifficulty.Easy, 0.1f);
  lifetimeDictionary.Add(GameDifficulty.Medium, 0.5f);
  lifetimeDictionary.Add(GameDifficulty.Hard, 1f);
}

void Update()
{
  //da wo du deine lifetime nutzt...
  lifetime = lifetimeDictionary[difficulty]; //das ist die difficulty aus dem oberen Pseudocode
}

Nun kannst Du die "difficulty" ändern und es wird im Update immer die im Dictionary festgelegte lifetime genutzt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...