【Unity C#】スタミナの要素をプログラムしたいです
作りたいコマンド
以下のようなプログラムをUnity C#言語で制作したいです
スタミナゲージが0以上 かつ LeftCtrlが押されたら(押しっぱなし) FlagをON
FlagがONの時[指定コマンドA]を1度だけ実行
スタミナゲージが0 もしくは LeftCtrlが離されたらFlagをOFF
FlagがOFFの時[指定コマンドB]を一度だけ実行
[指定コマンドA] (スタミナ値0まで)
(1).スピードを2.0fまで上げる
(2).スタミナゲージを1ずつ0まで下げていく
(3).1秒後に(1)にループさせる
[指定コマンドB] (スタミナ値MAXまで)
(1).スピードを1.0fに戻す
(2).スタミナゲージを1ずつ上げていく(回復)
(3).1秒後に(1)にループさせる
自分で書いたプログラム
float speed;
float staminaGage;
bool dashJudge = false; //dashしているかの判定
//ダッシュ
if (Input.GetKey(KeyCode.LeftControl)) { //LeftControlが押されているとき
if(!dashJudge){
dashJudge = true; //判定をTrue
StartCoroutine(dashA()); //dashAに移動
}
}else if(Input.GetKeyUp ( KeyCode.LeftControl )) {
dashJudge = false; //判定をFalse
StartCoroutine(dashB()); //dashBに移動
}
//ダッシュしてるとき
IEnumerator dashA() {
if(dashJudge == true){
speed = 2.0f; //スピードを速く
while(staminaGage > 0.0f){
yield return new WaitForSeconds(1); //1秒待機(コルーチン)
staminaGage -= 1.0f; //スタミナを1消費
print(staminaGage); //現在のスタミナを表示
}
}
}
//ダッシュしてないとき
IEnumerator dashB() {
speed = 1.0f;
while(staminaGage < 5.0f){
yield return new WaitForSeconds(1); //1秒待機(コルーチン)
staminaGage += 1.0f; //スタミナを1回復
print(staminaGage); //現在のスタミナを表示
}
}
発生している問題
LeftCtrlを押している間は1秒ごとに数値が減っていっているが
離した際に数値が1増えて1減る,1増えて1減るという無限ループに入ってしまいます
0