Unityでゲーム開発を始めると、必ず「条件分岐」を使う場面に出くわします。たとえば、プレイヤーのHPが0になったらゲームオーバーにする、スコアが一定以上ならボーナスを与える、といった処理です。
この記事では、C#の条件分岐(if文とswitch文)の基礎を、Unityのスクリプトでどのように使うのかを具体的に解説します。初心者でも理解しやすいように、コードの例を交えながら説明していきます。
条件分岐とは?
条件分岐とは、特定の条件に応じて処理を変えるプログラミングの仕組みです。「もし~なら」や「~の場合は」といった形で、プログラムの流れを制御します。
例えば、以下のような条件分岐が考えられます。
- HPが0以下ならゲームオーバーを表示する
- プレイヤーがアイテムを持っていたら、ドアを開ける
- 敵のタイプによって異なる攻撃方法を選択する
このような処理を実現するために、C#では主に次の2つの方法を使います。
条件分岐を用いる主な理由は、以下の通りです。
- 柔軟な処理の実行: ゲームの進行状況やユーザーの入力に合わせて、実行する処理を動的に変えることができる。
- コードの可読性向上: 複数の条件に基づいた処理を整理することで、コード全体の見通しが良くなり、保守性が向上する。
- 効率的なエラーチェック: 例外的な状況やエラー状態を早期に検出し、適切な対処が可能となる。
それでは、それぞれの文法と使い方を詳しく見ていきましょう。
if 文の基本
if文は「条件が真(true)の場合にのみ、指定した処理を実行する」という仕組みです。
if文の基本構文
if (条件)
{
// 条件が true のとき実行される処理
}
例1: プレイヤーのHPが0以下ならゲームオーバー
int playerHP = 0;
if (playerHP <= 0)
{
Debug.Log("ゲームオーバー");
}
➡ playerHP が 0 以下の場合、「ゲームオーバー」と表示されます。
else を使った分岐
if 文に else を加えると、条件が満たされなかった場合の処理も指定できます。
if (条件)
{
// 条件が true のとき実行される処理
}
else
{
// 条件が false のとき実行される処理
}
例2: プレイヤーのHPが0ならゲームオーバー、それ以外なら「まだ生きている」
int playerHP = 10;
if (playerHP <= 0)
{
Debug.Log("ゲームオーバー");
}
else
{
Debug.Log("まだ生きている");
}
else if を使った複数の条件
else if を使うと、さらに多くの条件を指定できます。
if (条件1)
{
// 条件1が true のときの処理
}
else if (条件2)
{
// 条件2が true のときの処理
}
else
{
// どちらの条件も満たさないときの処理
}
例3: スコアに応じたランク分け
int score = 85;
if (score >= 90)
{
Debug.Log("ランク: S");
}
else if (score >= 80)
{
Debug.Log("ランク: A");
}
else if (score >= 70)
{
Debug.Log("ランク: B");
}
else
{
Debug.Log("ランク: C");
}
➡ スコアが 85 なので、コンソールには 「ランク: A」 と表示されます。
switch 文の基本
switch文は、ある変数や値に対して複数のケースを用意し、その中から一致するケースの処理を実行するために使われます。if文と異なり、特定の値に対して処理を分岐させたい場合に便利です。
switch文の基本構文
switch (変数)
{
case 値1:
// 値1のときの処理
break;
case 値2:
// 値2のときの処理
break;
default:
// どれにも当てはまらないときの処理
break;
}
例4: キャラクターの職業に応じたメッセージ
string job = "戦士";
switch (job)
{
case "戦士":
Debug.Log("剣で戦う!");
break;
case "魔法使い":
Debug.Log("魔法で攻撃!");
break;
case "僧侶":
Debug.Log("回復魔法を使う!");
break;
default:
Debug.Log("職業不明");
break;
}
➡ job が “戦士” のため、コンソールには 「剣で戦う!」 と表示されます。
switch文の注意点
switch文を使用する際に注意すべき点は以下の通りです。
- break文の忘れ: 各caseの末尾にbreakを記述しないと、次のcaseに処理が流れてしまいます。意図しない動作となるため、必ずbreakを入れましょう。
- defaultの利用: 万一どのcaseにも該当しなかった場合の処理を、defaultで記述しておくと、プログラムの安定性が向上します。
Unityにおける実践例
Unityで実際に条件分岐を使用する例として、以下のシナリオを考えます。
ゲームオーバーの判定
プレイヤーの体力が0以下になった場合、ゲームオーバー画面に遷移する処理を実装します。if文を使用して簡単な判定を行い、条件を満たす場合はシーンの切り替えやメッセージの表示を行います。
public class GameManager : MonoBehaviour
{
public int playerHP = 100;
void Update()
{
if (playerHP <= 0)
{
Debug.Log("ゲームオーバー");
// ここにシーン切り替えなどの処理を追加
}
}
}
アイテム取得による効果発動
プレイヤーが特定のアイテムを取得した場合、switch文を使用してアイテムの種類ごとに異なる効果を発動させる例です。
public class ItemEffect : MonoBehaviour
{
public string itemType; // "回復", "加速", "防御"などの値が入る
void ApplyEffect()
{
switch (itemType)
{
case "回復":
Debug.Log("体力が回復した!");
break;
case "加速":
Debug.Log("移動速度がアップ!");
break;
case "防御":
Debug.Log("防御力がアップ!");
break;
default:
Debug.Log("効果なし");
break;
}
}
}
このように、if文とswitch文を適切に使い分けることで、複雑なゲームロジックもシンプルに記述することが可能です。
実践演習問題
📝 問題1: プレイヤーのレベルアップ判定
プレイヤーのレベル (level) に応じて、次のようなメッセージを表示するプログラムを作成してください。
- レベル10以上: 「上級者」
- レベル5以上: 「中級者」
- それ以下: 「初心者」
✏️ 解答例
int level = 7;
if (level >= 10)
{
Debug.Log("上級者");
}
else if (level >= 5)
{
Debug.Log("中級者");
}
else
{
Debug.Log("初心者");
}
➡ level = 7 なので、「中級者」と表示されます。
📝 問題2: 武器の種類による攻撃方法
武器 (weapon) の種類に応じて、次のようなメッセージを表示するプログラムを switch 文で作成してください。
- “剣” → 「斬る!」
- “弓” → 「射る!」
- “槍” → 「突く!」
- 上記以外 → 「攻撃できない!」
✏️ 解答例
string weapon = "弓";
switch (weapon)
{
case "剣":
Debug.Log("斬る!");
break;
case "弓":
Debug.Log("射る!");
break;
case "槍":
Debug.Log("突く!");
break;
default:
Debug.Log("攻撃できない!");
break;
}
➡ weapon = “弓” なので、「射る!」と表示されます。
まとめ
- if 文は条件を満たすかどうかで処理を分ける
- switch 文は複数の選択肢から1つを選ぶときに便利
- else if を使うと細かく条件を分けられる
UnityのC#スクリプトで条件分岐をうまく活用し、ゲームの挙動を制御してみましょう! 🚀