Unityでゲームを作りたいけれど、「コードの書き方がわからない」「思った通りにキャラクターが動かない」と悩んでいませんか?
実は、ゲームのルールのほとんどは「制御文」という仕組みで作られています。
この記事では、C#の制御文(if, switch, for, foreach, while)について、丁寧に解説します。
これらをマスターすれば、「HPが0になったらゲームオーバー」「敵を10体出現させる」といった動きが自由に作れるようになりますよ!
変数のおさらい
制御文に入る前に、少しだけ「変数」のおさらいをしておきましょう。
変数は、「データを入れる箱」のことです。
ゲームの中では、スコアやプレイヤーの名前、HPなどの数字や文字を一時的に保存しておく場所が必要です。
変数の例
int hp = 100; // 整数を入れる箱(HPなど)
float speed = 5.5f; // 小数を入れる箱(スピードなど)
string name = "Unity"; // 文字を入れる箱(名前など)
変数について詳しく知りたい方は下記の記事を参照してください。
1. if文(もし〜なら)
条件によって動きを変える基本の形
if文は、プログラミングで最もよく使う命令です。「もし〇〇なら、△△する」という条件分岐を作ります。
また、条件に合わない時の「もし○○なら、△△する。でなければ、□□する」という条件分岐を作ることができます。
条件に合っている場合のパターン
if (条件式)
{
// 条件が合っている(True)時の処理
}
条件に合っている場合と間違っている場合のパターン
if (条件式)
{
// 条件が合っている(True)時の処理
}
else
{
// 条件が違っている(False)時の処理
}
プレイヤーのHPが0以下になったら、プレイヤーを消滅(破壊)させるコードです。
void Update()
{
// hpという変数が0以下(<= 0)かどうかチェック
if (hp <= 0)
{
// 0以下ならプレイヤーを破壊する
Destroy(gameObject);
Debug.Log("ゲームオーバー!");
}
else
{
// まだHPがある場合
Debug.Log("まだ戦える!");
}
}
2. switch文(条件がたくさんある時)
状態をきれいに切り替える
if文でも条件分岐はできますが、「武器の種類」や「ゲームの状態」など、選択肢がたくさんある場合はswitch文を使うとコードがスッキリ読みやすくなります。
switch文を書くときチェックする変数の値をcaseを使って判別します。
条件に合った処理が行われた後は必ずbreakで終わらせなければいけません。
switch (チェックする変数)
{
case 値1:
// 変数が値1の時の処理
break;
case 値2:
// 変数が値2の時の処理
break;
default:
// どれにも当てはまらない時の処理
break;
}
取得したアイテムIDによって、効果を変えるコードです。
int itemId = 1; // 1:回復薬, 2:爆弾, 3:コイン
switch (itemId)
{
case 1:
Debug.Log("HPが回復した!");
break; // breakを忘れないように注意!
case 2:
Debug.Log("ダメージを受けた!");
break;
case 3:
Debug.Log("お金が増えた!");
break;
default:
Debug.Log("何も起こらなかった");
break;
}
3. for文(回数が決まっている繰り返し)
指定した回数だけ同じことを繰り返す
「敵を10体出す」「ブロックを横に5個並べる」など、回数が決まっている繰り返し処理にはfor文を使います。
for文の条件は初期値、条件式、更新処理の順番に条件を設定しましょう。
for (初期化; 条件式; 更新処理)
{
// 繰り返したい処理
}
同じプレハブ(敵キャラ)を少しずつ場所をずらして5回生成するコードです。
public GameObject enemyPrefab; // 敵のプレハブ
void Start()
{
// iが0から始まり、5未満の間(0,1,2,3,4の計5回)繰り返す
for (int i = 0; i < 5; i++)
{
// X座標を i * 2.0f ずつずらして生成
Instantiate(enemyPrefab, new Vector3(i * 2.0f, 0, 0), Quaternion.identity);
Debug.Log(i + "体目の敵が出現!");
}
}
4. foreach文(リストの中身を全部処理)
まとめてあるデータを順番に取り出す
Unityでは、複数の敵やアイテムを「リスト(List)」や「配列(Array)」に入れて管理することがよくあります。その中身を「全部まとめて処理したい」時は、for文よりもforeach文が便利です。
まだ配列やリストについて知らない場合は下記の記事を参照してください。
リストや配列を一時的に変数に格納して処理を行う。
foreach (中身の型 変数名 in リストや配列)
{
// 1つずつ取り出して処理
}
リストに登録されている敵全員の色を一括で変更するコードです。
// 敵のリスト
public List<GameObject> enemies;
void ChangeAllEnemiesColor()
{
// enemiesリストから1つずつ取り出して enemy という名前で使う
foreach (GameObject enemy in enemies)
{
// 敵の色を赤に変更
enemy.GetComponent<Renderer>().material.color = Color.red;
}
}
5. while文(条件が合う間ずっと繰り返す)
ゴールするまで繰り返す
for文は回数が決まっていましたが、while文は「条件が合っている間はずっと繰り返す」命令です。
⚠️ 注意点:無限ループに気をつけよう! 条件がいつまでも「合っている(True)」ままだと、プログラムが永遠に止まらず、Unityがフリーズしてしまいます。必ず「いつか終わる処理」を入れるようにしましょう。
必ずいつかループが終わる条件式を使いましょう
while (条件式)
{
// 繰り返したい処理
}
例えば、レアアイテムが出るまでガチャを回し続けるシミュレーション(※実際のゲームプレイ中はフリーズの原因になるので、計算処理などで使います)。
void Start()
{
int coin = 0;
// コインが100枚未満の間、ずっと繰り返す
while (coin < 100)
{
coin += Random.Range(1, 10); // 1〜9枚のコインをランダムで足す
Debug.Log("現在コイン: " + coin + "枚");
}
Debug.Log("100枚貯まりました!ループ終了");
}
まとめ
いかがでしたか?今回はUnity C#の基本となる5つの制御文を紹介しました。
- if: もし〜なら(分岐)
- switch: たくさんの選択肢から選ぶ(整理された分岐)
- for: 回数を指定して繰り返す
- foreach: リストの中身を全部処理する
- while: 条件が合う間繰り返す(無限ループに注意)
これらの制御文は、パズルのピースのようなものです。これらを組み合わせることで、複雑なゲームのルールや敵の動きなど、あなたが想像するあらゆる挙動を作ることができるようになります。

