Unityで条件分岐する方法/If、Switch文の使い方

rail IT

他の言語でもおなじみ、条件分岐のIf、Switch文の使い方です。

スポンサーリンク

成果物

kg5
If文やSwitch文を使い、条件を満たすと、同じ行動をとっても別の処理が返るようにします。

If文の使い方

if (条件)
{
条件を満たす場合の処理
}
If文では、条件がTrueの場合に行う処理を指定することで条件分岐を行います。
if (条件)
{
条件がTrueの場合の処理
}
else
{
条件がFalseの場合の処理
}
elseを指定すると、条件を満たさない場合の挙動を追加することができ、
if (条件1)
{
条件1がTrueの場合の処理
}
else if (条件2)
{
条件2がTrueの場合の処理
}
else
{
すべての条件がFalseの場合の処理
}
else ifを追加することで、複数条件を指定することができます。条件3、4…と追加していくこともできます。
複数の条件を満たしていたとしても、実行されるのはそのうちで一番上に書いてある処理だけです。
int atai;
if (atai > 0)
{
Debug.log("値は0より大きい");
}
else
{
Debug.log("値は0以下");
}
具体的にはこんな感じの記述となります。

関係演算子


if (A > B)
{
Debug.log("AはBより大きい");
}
else if (A < B)
{
Debug.log("BはAより大きい");
}
ふたつの値を比較する演算子を関係演算子といいます。
A>BAはBより大きい(BはA未満)という意味になります。

if (A >= B)
{
Debug.log("AはB以上");
}
else if (A <= B)
{
Debug.log("AはB以下");
}
A>=BAはB以上という意味になります。

if (A == B)
{
Debug.log("AはBと等しい");
}
A==BAとBが等しいという意味になります。A=Bではない点に注意してください。
(A = Bは「AにBを代入する」という意味で、C#では明確に区別されます)
// ×
if (A == true)
{
}
TrueかFalseのどちらかしか値のない変数は、bool値と呼ばれます。
bool値の判定をこのように書く必要はありません。
// 〇
if (A)
{
}
AがTrueな場合に分岐したいのであれば、if(A)と書けば充分です。

If文実装例

kg4
現状、カギを選択しても引き出しを開けることができません。
if1
別の記事で作った部分ですが、「カギを選択している」時はselectという変数にオブジェクト名(kagi)が代入されるようになっています。
これをそのままフラグとして使えば、カギを選択している時だけカギを解除することができます。
if2
別のクラスからこの変数selectを参照したいので、publicを付けておきます。
if3
ところでこの棚の真ん中がカギのかかっている引き出しになりますが、棚自体は一枚のpngで作ってあって、その上にふたつ空のオブジェクトで当たり判定を作っています。
if4
当たり判定1,2と棚にはすべて同じスクリプトが貼ってあり、クリックしたオブジェクトの名前で処理を分岐させています。
つまり既にIf文があるので、
if5
真ん中の引き出しをクリックした時の処理の中に、さらにIf文を追加します。
kg5
ゲームを実行すると、二回If文が走り、「真ん中の段を」「カギを選択して」クリックしたときの処理が走ることが確認できます。

Switch文の使い方


switch(変数){
case "〇":
変数が〇の時の処理
break;
case "×":
変数が×の時の処理
break;
}
switch文の場合は、switch()に記入した変数の値によって結果を分岐させることができます。
基本的に結果ごとに最後にbreakを指定する必要があります。

switch(変数){
case "〇":
変数が〇の時の処理
break;
case "×":
変数が×の時の処理
break;
default:
上がどれも当てはまらない場合の処理
break;
}
また、ケースとしてdefaultを指定することで、どのケースにも当てはまらない場合の処理を記述することができます。
defaultはcaseの前に書くこともできますが、わかりづらくなるだけなので、最後に書くものだと思って支障ないです。

Switch文実装例

switch1
いくつかシーンを追加して、ビルド設定にも追加します。このシーンをそれぞれ「部屋」とし、
switch2
矢印を押した時に、別のシーンへ切り替えて、部屋をぐるっと一周できるようにしたいと思います。
switch3
左右の矢印はシーンごとに別々のオブジェクトとして独立し、値の異なる変数「ichi」を持っています。この値によって行き先を振り分けたいので、どの値がどのシーンに対応するかを決めて各矢印の「ichi」にその数値を割り当て、
switch4
Switch文の条件に「ichi」を指定し、その値によって処理を別々に記述します。
kg6
実行結果です。わかりやすいように適当なオブジェクトを置いていますが、押したオブジェクトの変数の値によって行き先が変更されていることが確認できます。
やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。

コメント