【Unity】switch文とは?変数や式の値で条件分岐する処理を作れる

switch文とは? Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「C#のswitch文について知りたい!」

「switch文ってどんなときに使うの?」

というお悩みの方に向けた内容となっています。

Unityで使われるC#では、条件分岐の際にif文ではなくswitch文が使われることがあります。

このswitch文は、指定した変数や式に対して、それぞれの値(結果)ごとで処理内容を変えることができるようになります。

同じようなことはif-else文でも作ることができますが、条件分岐が多くなるような場合は、switch文の方がコードがシンプルになり便利です。

そこで、このページでは、UnityのC#で使えるswitch文について、どういったものなのか、使い方や書き方までをまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

switch文とは?指定した変数の値ごとに処理の変更ができる

switch文は、変数やなどを指定して、その値によって処理を変更したい場合に使用します。

例えば、

  • サイコロを振って出た目に応じて進む処理を変更させる
  • プレイヤーのいるエリアによって背景の色を変更させる

といった条件分岐の処理を、switch文で作ることができます。

これと同じような処理は、if文を使って作ることもできます。

このif文との使い分けとして、

  • 条件分岐による処理が少ない場合 ⇒ if文
  • 条件分岐による処理が多い場合 ⇒ switch文

で使い分けるのが良く、条件分岐が3種類以上あれば、switch文での記述の方がスクリプト上で分かりやすくなることが多いです。

また、その条件の値「以上」「以下」といった範囲指定で条件分岐をしたい場合、switch文よりもif文の方が使いやすく、switch文はあくまでも特定の値を指定した条件分岐の場合におすすめです。

switch文の使い方・作り方

ここからは、switch文の使い方や作り方について紹介していきます。

switch文の基本的な書き方

switch文を使う際は、以下のように記述して使います。

switch(変数・式)
{
    case Aの値:
        変数・式がAの値の場合の処理内容
        break;

    case Bの値:
        変数・式がBの値の場合の処理内容
        break;
}

まず「switch」の後ろで条件となる変数などを()内で指定します。

そして、「case」でその変数のを指定し「:」と書いた後に、その値に一致した場合の処理を続けて書いていきます。

また、処理が行われた後に「break;」と書くことで、その時点でswitch文を抜ける処理が行われます。

これにより、一度分岐処理が行われたら、仮に他の条件に一致したとしても処理が行われないようになります。

例えば、実際に以下のスクリプトを作ってみました。

using UnityEngine;

public class Test : MonoBehaviour
{
    int num = 0;

    void Update()
    {
        // スペースキーを押した場合
        if (Input.GetKeyDown(KeyCode.Space))
        {
            num++;  // 変数を1ずつ加算する

            switch (num)
            {
                // 1の場合の処理
                case 1:
                    Debug.Log(num + ":攻撃する!");
                    break;

                // 2の場合の処理
                case 2:
                    Debug.Log(num + ":防御する!");
                    break;

                // 3の場合の処理
                case 3:
                    Debug.Log(num + ":逃げる!");
                    break;
            }
        }
    }
}

スペースキーを押したら、変数numの値が1ずつ加算されるように12行目で記述しています。

そして、14行目からswitch文で条件分岐していて、その変数numの値が「1」「2」「3」によって処理内容が変わるようにしています。

これで実行してみると、

スペースキーを押す度に、処理内容が変わっているのが分かります。

複数の条件で処理が同じ場合は「case」を並べて書く

switch文の複数の値(条件)で処理を同じにする場合は、「case」の値を並べて書くことで簡略化できます。

switch(変数・式)
{
    case Aの値:
    case Bの値:
        変数・式がAもしくはBの値の場合の処理内容
        break;
}

上記のように書くことで、5行目の処理は変数がAの値もしくはBの値のいずれかの際に、行われる処理となります。

例えば、先ほどのスクリプトを修正してみます。

using UnityEngine;

public class Test : MonoBehaviour
{
    int num = 0;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            num++;

            switch (num)
            {
                // 1と2の場合の処理
                case 1:
                case 2:
                    Debug.Log(num + ":攻撃する!");
                    break;

                // 3と4の場合の処理
                case 3:
                case 4:
                    Debug.Log(num + ":防御する!");
                    break;

                // 5の場合の処理
                case 5:
                    Debug.Log(num + ":逃げる!");
                    break;
            }
        }
    }
}

16行目から19行目で変数が「1」もしくは「2」の場合の処理、22行目から25行目で変数が「3」もしくは「4」の場合の処理、28行目から30行目で変数が「5」の場合の処理を記述しています。

実際に実行してみると、

指定した値同士で同じ処理が行われるようになりました。

「default」で条件に当てはまらない処理を行える

「case」には値を指定することになりますが、どの値にも当てはまらない場合の処理を作りたいということがあります。

if文で言えば「else」に当たりますが、switch文では「default:」と書いて処理内容を続けることで、当てはまらない場合の処理を作ることができます。

switch(変数・式)
{
    case Aの値:
        変数・式がAの値の場合の処理内容
        break;

    default:
        変数・式が当てはまらない場合の処理内容
        break;
}

上記のように書くことで、8行目の処理はどの値にも当てはまらない場合の処理となります。

例えば、先ほどのスクリプトは「1」から「5」までを指定していたので、値がそれ以外の場合の処理を作ってみます。

using UnityEngine;

public class Test : MonoBehaviour
{
    int num = 0;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            num++;

            switch (num)
            {
                case 1:
                case 2:
                    Debug.Log(num + ":攻撃する!");
                    break;

                case 3:
                case 4:
                    Debug.Log(num + ":防御する!");
                    break;

                case 5:
                    Debug.Log(num + ":逃げる!");
                    break;

                // それ以外の値の場合の処理
                default:
                    Debug.Log(num + ":なにもしない!");
                    break;
            }
        }
    }
}

30行目で「default:」を書いて、次の行でその処理内容を書いています。

なお、defaultの場合も「break;」が必要となるため、注意しておきましょう。

これで実行してみると、

値が「6」以上になると、当てはまらない処理が続けて行われているのが分かります。

まとめ

このページでは、UnityのC#で使えるswitch文について、どのようなものなのか、使い方や作り方までをまとめていきましたが、いかがでしたでしょうか?

switch文とは、ゲーム内の分岐処理を行う際のスクリプトの書き方で、条件分岐が多数に渡る場合に、便利に使うことができます。

switch文を使う際は、「case」で条件分岐を行って処理を記述した後に、「break;」でswitch文を抜ける処理を行う必要があります。

if文と同じようなことができますが、if文は条件分岐が少ない場合、switch文は条件分岐が多い場合、という使い分けが必要になってきます。

最後までお読みいただきまして、ありがとうございました!

コメント