Den Vorschlag von Schorsch kann man durchaus umsetzen, nicht aber um das Vorhandene Problem zu lösen.
@Garzec:
Das Problem ist deine lokale isRunning Variable.
Abgesehen davon solltest du nicht den Ansatz wählen "Dem Spieler wird eine Ausdauerleiste angezeigt und abhängig davon ist es, ob er sprinten kann", sondern eher "Der Spieler hat einen Ausdauerwert, der vom Sprinten aufgebraucht wird und sich wieder aufladen muss. Dieser Wert wird im UI angezeigt." Der Unterschied ist, dass nicht aus dem Code, der die Ausdauer managed, auf das UI zugegriffen wird, sondern das UI die anzuzeigenden Werte abruft.
Ein paar andere Feinheiten sind:
Du speicherst den Wert eines Parameters (
isRunning) in einer lokalen Variable (
running), statt direkt darauf zuzugreifen.
Zur Bedingung
if (Bedingung) gibt es einen sonst Fall
else if (!Bedingung) mit unnötiger Bedingung.
Für die Ausdauer wird die Obergrenze nicht abgefragt. Insgesamt würde sich eine Property anbieten, um sicherzustellen, dass nach einer Zuweisung auch immer ein Wert innerhalb des gültigen Bereichs gespeichert wird (->
Mathf.Clamp).
Du solltest nicht auf bestimmte Tasten abfragen (Shift beim Sprinten), sondern in den Inputeinstellungen eine Achse dafür definieren und diese Abfragen.
Manche "magische Werte" bieten sich dazu an, im Editor angepasst zu werden (bspw. die Füllrate der Ausdauer). Eine Membervariable wäre entsprechend besser geeignet. Sollen diese nicht im Editor angepasst werden, wäre eine Konstante besser.
Die Auffüllgeschwindigkeit und der Sprintverbrauch sollten separate Werte sein. (Dies macht spätere Anpassungen wesentlich einfacher, bspw. wenn das Sprinten kurzzeitig einen geringeren Verbrauch haben soll.)
Vielleicht wäre es besser, wenn in jedem Frame die Ausduer sich auffüllt (bspw. 20/s wie bisher), beim Rennen aber ein größerer Ausdauerwert verbraucht wird (bspw. 40/s, wenn das gleiche Verhalten wie bisher beibehalten werden soll).
StaminaLeft kann in einen Einzeiler umgewandelt werden (
return stamina > 0;). Weiterhin würde sich die Methode anbieten, in eine Property umgewandelt zu werden.