[第6回] if文を利用した条件分岐を学ぶ|Unityで学ぶC#入門
「Unityで学ぶC#入門」の連載第5回は「演算子の使い方を学ぶ」でした。
第6回の今回はif文を利用した条件分岐についてご紹介していきます。
条件分岐はシステム開発でもゲーム開発でも使用します。理解していないとドツボにはまってしまうこともあるためしっかりと理解しておきましょう。
条件分岐とは
ある条件のときに特定の処理をさせることを「条件分岐」と言います。
↓条件分岐イメージ
このような条件分岐は日常生活でも多く使われています。
- 駐車場の時間ごとの料金
- チケットの大人料金、子供料金
- BMI
- ジェットコースターの身長制限
以上のように様々な場面で条件分岐が使用されています。
今回はその中でも駐車場の料金を例に用いて条件分岐のプログラムを記述していきます。
実例の条件を確認
では具体的に条件を決めていきましょう。
自分が車を止めていた時間を入力として、自分が支払う料金を出力するプログラムを記述します。
条件は以下のようにまとめました。
駐車時間(分) | 料金(円) |
~60 | 1,000 |
~120 | 1,500 |
~180 | 2,000 |
181~ | 2,500 |
駐車してから60分以内は一律1,000円。そこから180分までは1時間ごと500円増えて、181分を超えると一律2500円という条件です。
ではこの条件を満たすようなプログラムを「if文」を利用して実現していきます。
if文の使い方
if文は以下のようにして条件を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
if(条件式1){ 処理1 } else if(条件式2){ 処理2 } else if(条件式3){ 処理3 } ・ ・ ・ }else{ 処理X } |
まずは最上部を見てみましょう。
1 2 3 |
if(条件式1){ 処理1 } |
条件式1が「true」のとき、処理1を実行します。
条件式1が「false」のとき、下のelse文に移行します。
else文を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
else if(条件式2){ 処理2 } else if(条件式3){ 処理3 } ・ ・ ・ }else{ 処理X } |
else文とは上段のif文が成立しないときに実行する部分で、「else if」とすることでif文と同じように条件を与えることができます。
つまり処理2は、条件1が「false」かつ条件2が「true」のときに実行されます。
同じく処理3は、条件1と2が「false」かつ条件3が「true」のときに実行されます。
最後に、全ての条件が「false」だった場合に処理Xが実行されます。
実例検証
正常コード
先ほど確認した駐車場の実例を実現するプログラムを記述します。
↓正常コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { //int型の駐車時間と料金を定義 int time; int fee; // Start is called before the first frame update void Start() { //駐車時間を決定 time = 30; //駐車時間が60分以下のとき if(time <= 60){ //料金は1000円 fee = 1000; } //駐車時間が120分以下のとき else if(time <= 120){ //料金は1500円 fee = 1500; } //駐車時間が180分以下のとき else if(time <= 180){ //料金は2000円 fee = 2000; } //駐車時間が上記以外のとき else{ //料金は2500円 fee = 2500; } //駐車料金を出力 Debug.Log("駐車料金は[" + fee + "円]です"); } } |
↓実行結果(time = 30)
↓実行結果(time = 80)
↓実行結果(time = 150)
↓実行結果(time=210)
正常な結果が出力されることを確認できました。
問題コード
if文で問題が発生しうる部分を確認していきます。
次のコードで出力に問題が発生する理由を考えながら実行結果を確認してください。
↓問題コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { //int型の駐車時間と料金を定義 int time; int fee; // Start is called before the first frame update void Start() { //駐車時間を決定 time = 30; //駐車時間が180分以下のとき if(time <= 180){ //料金は2000円 fee = 2000; } //駐車時間が120分以下のとき else if(time <= 120){ //料金は1500円 fee = 1500; } //駐車時間が60分以下のとき else if(time <= 60){ //料金は2000円 fee = 1000; } //駐車時間が上記以外のとき else{ //料金は2500円 fee = 2500; } //駐車料金を出力 Debug.Log("駐車料金は[" + fee + "円]です"); } } |
↓実行結果(time = 30)
timeが30のときは本来であれば料金は1,000円と出力されなければいけません。しかし、このコードだと2,000円と出力されてしまいます。
原因はif文の条件の順番にあります。
一番最初の条件で「time <= 180」としているため、入力値が30でも80でも150でも同じく出力が2,000円になってしまいます。
このように、条件分岐を使用するときは、条件を記述する順番にも気を使わなければいけません。
もし上記の問題を防ぎたい場合は、条件文をもっと具体的に記述する必要があります。
↓改善コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { //int型の駐車時間と料金を定義 int time; int fee; // Start is called before the first frame update void Start() { //駐車時間を決定 time = 70; //駐車時間が180分以下のとき if(time > 120 && time <= 180){ //料金は2000円 fee = 2000; } //駐車時間が120分以下のとき else if(time > 60 && time <= 120){ //料金は1500円 fee = 1500; } //駐車時間が60分以下のとき else if(time <= 60){ //料金は2000円 fee = 1000; } //駐車時間が上記以外のとき else{ //料金は2500円 fee = 2500; } //駐車料金を出力 Debug.Log("駐車料金は[" + fee + "円]です"); } } |
マークしている行のように、値の範囲を明確にすることで問題を改善できます。
まとめ
いかがでしたでしょうか。
連載第6回となる今回はif文を利用した条件分岐の方法についてご紹介してきました。
if文を使用できるようになると、よりゲームらしさやシステムらしさを増したプログラミングをすることができるようになるのではないでしょうか。
条件分岐には他にもSwitch文を利用した方法などもありますが、if文をマスターすればさほど難しくは感じないと思います。
次回はメソッドの使用方法をご紹介いたします。
続けて第7回の記事に読む方はこちらをクリック
他の回の記事について気になる方はこちらをクリック
この記事はいかがでしたか?
もし「参考になった」「面白かった」という場合は、応援シェアお願いします!