質問: はじめまして。 先月からUnityを勉強し始め、一通り終わったためにRPGの戦闘シーンを作ろうと試みているところです。 以下、質問内容になります。 <ゲームの仕様(質問における前提条件)> ・味方キャラクターは3人(A、B、C)、敵キャラクターは1人(D)。 ・攻撃の順番はA→B→C→D 【質問内容】 今回、if文、switch文、for文を用いて以下のプログラムを作りました。 ``` void Update(){ for(n=1;n<5;n++){ switch(n){ case 1: if(Input.GetKeyDown(KeyCode.P)){ Debug.Log("A attack"); break; } case 2: if(Input.GetKeyDown(KeyCode.P)){ Debug.Log("B attack"); break; } case 3: if(Input.GetKeyDown(KeyCode.P)){ Debug.Log("C attack"); break; } case 4: if(Input.GetKeyDown(KeyCode.P)){ Debug.Log("D attack"); break; } } } } ``` 理想としては、まずAの戦闘ターンでPボタンを押すとAが攻撃。 その後Bの戦闘ターンでPボタンを押すとBが攻撃。CとDが後に続く・・・という流れです。 しかしながら、実際にプログラムを実行すると、Pボタンを押すと、ABCD全てのcaseが実行されてしまい、Console画面には"各キャラ attack"が表示されてしまいました。 これを各キャラクターの処理を一つずつ実行したいのですが、どうかご教授いただけないでしょうか? 【対処法?】 この対処法をネット上で調べた結果、Console.ReadKey();やConsoleKeyInfoを用いるとのことだったのですが、試したところエラーが出てしまい行き詰まってしまいました。 (エラー内容は"All compiler errors have to be fixed before you can enter playmode!) 以上、宜しくお願い致します。
回答: メンバ変数で現在のアタックステータス(誰が攻撃しているのか)を保持して、pボタンを押すごとにステータスを変化させてみたらどうでしょうか? 例えば、下記のようなコードでどうでしょうか。 ``` private int n = 1; void Update(){ if(Input.GetKeyDown(KeyCode.P)){ switch(n){ case 1: Debug.Log("A attack"); break; case 2: Debug.Log("B attack"); break; case 3: Debug.Log("C attack"); break; case 4: Debug.Log("D attack"); break; } n++; } } ```