Unityのif文とswitch文
Unityのif文とswitch文を使うことで条件分岐が可能となる。C#でのスクリプトの開き方、基本的な構文の作り方、変数、演算子がわからない場合は先に以下の記事で確認してほしい。
UnityのC#の書き方
UnityのC#の変数・演算子
また、Unityの基礎知識や操作などがわからない場合は先に以下の記事を確認してほしい。
Unityの基礎まとめ
この記事ではif文とswitch文について詳しく解説していく。
UnityのC#のif文とswitch文目次
if文switch文
目次にもどる
if文
if文はもし~ならという意味を持つ。例文としては以下の通り。
クラス内メソッド外の記述(メソッド内でもOKだが一番上に記述)
int moshimo = 3;
Startメソッド内の記述
if (moshimo > 2)
{
Debug.Log("条件合致");
}
このスクリプトをゲームオブジェクトにアタッチして再生するとログに1回だけ「条件合致」と出る。
変数moshimoに入っている数は3であり、Startメソッドではif文により変数moshimoの数値が2以上なら中身の処理を行うためである。
なお、if文にも型がありbool型である。型については以下を確認してほしい。
UnityのC#の変数・演算子
bool型なので、()内の内容からtrueかfalseか判断し、trueなら{}内の処理が行われることになる。
次にStartメソッド内の記述を以下のように変えてみる。
Startメソッド内の記述
if (moshimo > 4)
{
Debug.Log("条件合致");
}
else
{
Debug.Log("合致しない");
}
再生するとログは「合致しない」となる。
変数moshimoに入っている数は3であり、Startメソッドではif文により変数moshimoの数値が4以上なら中身の処理を行うので条件から外れる。elseはifでの条件が外れた場合に行われる処理を記述できるため、「合致しない」のログが出る。
次にStartメソッド内の記述を以下のように変えてみる。
Startメソッド内の記述
if (moshimo > 4)
{
Debug.Log("条件合致");
}
else if (moshimo > 2)
{
Debug.Log("第2条件合致");
}
else
{
Debug.Log("合致しない");
}
前の文にelse if (moshimo > 2)の分岐を加えている。再生するとログは「第2条件合致」となる。
else ifを使うことでifでの条件が外れた場合の分岐に条件をつけることができる
ちなみに複数の分岐に当てはまる場合には上の分岐が処理される(メソッド内では上から下に処理が行われるため)。
今まではifの後に書く条件を簡単なものにしていたが、他の演算子を使えば、もっと複雑な条件を書くこともできる。
クラス内メソッド外の記述
int moshimo = 3;
int moshimo2 = 5;
Startメソッド内の記述を以下のように変えてみる。
if (moshimo > 3 && moshimo2 > 4)
{
Debug.Log("条件合致");
}
else if (moshimo >= 3 || moshimo2 > 5)
{
Debug.Log("第2条件合致");
}
else
{
Debug.Log("合致しない");
}
&&はかつという意味を持つ。ifの後の条件は、変数moshimo2は5で4より大きいが、変数moshimoは3で3より大きくはない。よってif条件からは外れる。
||はまたはという意味を持つ。else ifの後の条件は、変数moshimo2は5で5より大きいわけではないが、変数moshimoは3で3以上という条件を満たす。よって、else if内の処理が行われる。再生すると「第2条件合致」とログが流れる。
演算子については以下で紹介しているので、少しずつ覚えていこう。
UnityのC#の変数・演算子
ちなみにかっこの中にかっこを入れて、以下のようなif文を書くことも可能である(かっこを書かずともif文を書くことは可能だが読みづらくなるのでかっこをつけるのをおすすめする)。
if ((moshimo > 3 && moshimo2 > 4) && (moshimo > 2 || moshimo2 >= 3))
かっこの中のかっこから条件を満たすか考えていけば、最終的に条件を満たすか満たさないかがわかる。
目次にもどる
switch文
switch文は1つの物について様々な条件で分岐を行える。例文としては以下の通り。
Startメソッド内の記述
int rei = 3;
switch (rei)
{
case 1:
Debug.Log("reiは1");
break;
case 2:
Debug.Log("reiは2");
break;
case 3:
Debug.Log("reiは3");
break;
case 4:
Debug.Log("reiは4");
break;
default:
Debug.Log("reiはどれでもない");
break;
}
このスクリプトをゲームオブジェクトにアタッチして再生するとログに1回だけ「reiは3」と出る。
reiという変数に入っている値がcaseの後の値かどうか確かめ、合っているならcase内の処理を行い、合ってなければ次のcaseへ進む。case 3で条件を満たすので「reiは3」のログが出る。
caseと値を書いたら:を記述すること、case内の処理終了後はbreak;と記述することを忘れないように(breakにはcaseの中を抜けるという意味がある。ループ文でもよく使われる)。
ちなみにswitchの後に入れる値は一つに定まるなら式でも構わない。例えばswitch (x + y + z)という記述でもOKである。
defaultはcaseに当てはまらなかった場合に通る処理であり必ずしも書く必要はない。
ほとんどの場合はif文で十分であることが多いが、1つの値で何度も条件分岐する場合などはswitch文のほうがわかりやすい場合もあるので使っていこう。