『switch』文とは
条件により処理を分岐させたいときに使います。
もくじ
1.基本構文
2.構文パターン
3.具体例
4.Unityでの使用例【スマホでのタッチを検知する】
基本構文
1 2 3 4 5 6 7 8 9 10 11 12 |
switch (変数) { case 値1: // 処理1 break; case 値 2: // 処理2 break; default: // 処理3 break; } |
※プログラミングは基本的に、すべて半角英数字で記述します。上記では便宜上全角を使用していることをご了承ください。
“switch(変数)”に書かれた「変数」の値(数値や文字列)が、
“case”の後ろに書かれた「値」と一致する場合に、その中の処理が行われます。
例えば「変数」が「値1」であった場合には、
“case 値1”の中の「処理1」が実行されます。
処理が終われば、switch文は終了となります。
“default”は、どの値とも一致しなかった場合に、選択されます。
“break;”は、「ここで”case”内の処理が終了です」という合図なので、
処理の最後には必ず記述しましょう。
“変数”の箇所(match式という)には、
char型, string型, bool型, 整数値(int型やlong型), enum値が利用可能です。
構文パターン
「switch」文は以下のような書き方もできます。
「case」は1つ以上あれば、いくつあっても問題ありません。
「default」はなくても問題ありません。
1 2 3 4 5 6 |
switch (変数) { case 値1: // 処理1 break; } |
処理が同じ場合には、このような書き方もできます。
この場合「値1」と「値2」で同じ「処理」が実行されます。
1 2 3 4 5 6 7 |
switch (変数) { case 値1: case 値2: // 処理 break; } |
具体例
それでは具体例を見てみましょう。
例1)int型を使用した場合
1 2 3 4 5 6 7 8 9 10 11 12 |
int count = 5; switch (count) { case 1: case 5: Debug.Log("case1or5"); break; default: Debug.Log("default"); break; } |
例2)string型を使用した場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
string subject = "国語"; switch (subject) { case "英語": Debug.Log("英語"); break; case "理科": Debug.Log("理科"); break; case "社会": Debug.Log("社会"); break; default: Debug.Log("その他"); break; } |
Debug.Log(“default”):UnityエディタのConsoleに「default」と出力する関数
例1では、int型である”count”で場合分けがされています。
“count”には5が代入されているので、”case 5″に入り、
consoleには「case1or5」と出力されます。
例2では、string型である”subject”で場合分けがされていますね。
“subject”には「国語」が代入されているので、どの”case”にも当てはまりません。
なので”default”の中に入り、consoleには「その他」と出力されます。
Unityでの使用例
スマホでの「タッチ」を検知するコードになります。
if文で説明したのと同じで、今度はswitchを利用したスクリプトになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0); switch (touch.phase) { case TouchPhase.Began: // 指が画面に触れた時の処理 break; case TouchPhase.Stationary: case TouchPhase.Moved: // 画面に指が触れている間の処理 break; case TouchPhase.Ended: // 指が画面から離れた時の処理 break; } } |
Input.touchCount:スマホでタッチ(タップ)された回数が格納されている
Input.GetTouch(0):座標などのタッチ情報を取得する関数
TouchPhase.Began:画面に指が触れたとき
TouchPhase.Moved;画面上で指が動いたとき
TouchPhase.Stationary:指が画面に触れているが動いていないとき
TouchPhase.Ended:画面から指が離れたとき
「Input.touchCount > 0」は、
「スマホのタッチ回数が0より大きい場合」という意味であり、
上記では「スマホのタッチ回数が0より大きければ、タッチ情報を取得する」
という処理が行われています。
タッチがされていなければInput.touchCountは0なので、
条件は満たされずif文は無視されます。
タッチ情報が取得された後、
今度はその取得したタッチ情報をもとに分岐が発生しています。
if文では、タッチされたかどうかを検証して、
switch文では、タッチされた情報が何であるかで条件分岐させています。
上記コードをUpdate関数内に記述すれば、スマホのタッチを検知して、
いろいろな処理を行うことができます。