夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Switch文で複数の条件を加える。 YubimoziHoloLensのアニメーション

本日はUnityC#枠です。

筆者はUnity歴は5年ほどになりますが、グラフィック側の興味が強いため積極的にC#を書いてはいませんでした。

今回は筆者のアプリ、Yubimozi HoloLensを開発する中でSwich文に関して新しい気づきがあったためまとめます。

redhologerbera.hatenablog.com

〇Switch文

Switch文はC#で使用できる条件分岐処理の一つです。

条件分岐では一般的にif文が有名ですが、Switch文はif文に比べ条件によっては可読性や処理の面で優れています。

今回のYubimoziHoloLensアプリではキーボードの入力による指文字のアニメーションの処理でSwitch文を使用しています。

IEnumerator AnimatoinSwitch()
    {
        int _textsize= _TextList.Length;//入力した文字列の大きさ
        int i;

        for (i = 0; i < _textsize; i++)//文字列を一文字ずつ分割して、それぞれのアニメーションを実行
        {
            string source = _TextList[i];
            Debug.Log(source);
            _HandText.text = source;
            switch (source)
            {
                   case "あ":
                       case "ア":
                       _anim.SetTrigger("A");
                    break;
                case "い":
                    case "イ":
                    _anim.SetTrigger("I");
                    break;
                case "う":
                  case "ウ":
                    _anim.SetTrigger("U");
                    break;
                case "え":
                 case "エ":
                    _anim.SetTrigger("E");
                    break;
                case "お":
                    case "オ":
                    _anim.SetTrigger("O");
                    break;
              ...
       }
   }
}

コメントアウトで説明していますが、YubimoziHoloLensでは日本語の50を超えるかな文字列を一文字ずつ分割して、アニメーション処理をさせています。

上記のコードでは_TextListが入力した文字列になります。

上記の例の場合if文を使用すると

   string source = _TextList[i];
if( source=="あ"|   source = "ア"){
    _anim.SetTrigger("A");
}

if( source=="い"|   source = "イ"){
    _anim.SetTrigger("I");
}

と記述することになりますが、これではif文が大量に発生し、非常にみにくいコードになります。

Switch文は主に条件対象が複数ある場合(2つ以上)の場合特に使用されます。

   switch (source)//条件式
            {
               case "あ" ://sourceが"あ"の場合
                  _anim.SetTrigger("A");
                break;
               ...
            }

またSwitch文ではif文同様複数の条件を与えることもできます。この場合は次のようにcaseを二重で記入します、

   switch (source)//条件式
            {
               case "あ" :
                 case "ア"://sourceが"あ"もしくは"ア"の場合
                  _anim.SetTrigger("A");
                break;
               ...
            }

筆者はこの複数条件のSwitch文の書き方を知らなかったため今回とても勉強になりました。