【Unity】if文の書き方とゲーム内での実際の使い方例

Unityでif文の書き方 Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「Unityで特定の時だけ処理したいけど、どうやるの?」

「if文の使い方が分からなくて困っている。」

というお悩みの方に向けた内容となっています。

Unityでは、スクリプトに書いた処理や動作は、基本的に上から順番に行われていくことになります。

ただ、ゲームを作っていると、

  • HPが0になったらゲームオーバーにする
  • Sキーを押したら右に移動する

など、特定の条件の時だけオブジェクトの処理を行いたいということは多いと思います。

この特定の条件の時にだけ処理を行うには、if文を使って書く必要があります。

そこで、このページでは、Unityでのゲーム制作において、if文を使ったスクリプトの書き方や使い方をまとめていきます。

なお、このページでは、

Windows11
Unity Hub3.11.0
Unity6

のバージョンで解説しています。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

if文とは?

まずは、if文がどういう仕組みになっているのか、また書き方や関係演算子というものを紹介していきます。

条件分岐するための制御文

if文とは、プログラムにおいて条件で分岐させるための制御文です。

もう少し簡単に言うと、特定の条件の時にだけプログラムを動かすためにif文があります。

ifと言えば、日本語で「もし」という意味ですが、プログラミングにおいても、「もし〇〇になったら処理を行う」という意味になるので、同じ意味で使われています。

冒頭でも紹介しましたが、ゲーム制作では「HPが減ったら」とか「敵が近づいたら」といった「もし〇〇だったら」という特定の条件下での処理の際に、if文が登場してきます。

if文の書き方と関係演算子

if文はいくつか書き方がありますが、その中で最も基本的な書き方をここでは紹介していきます。

if文の基本的な書き方

if文の基本的な書き方として、

if (条件式)
{
	条件が満たされたときの処理;
}

という書き方をします。

ifの後ろの()内が条件の部分となり、この箇所に関係演算子を使って、条件を特定させます。

つまり、「もし〇〇だったら」の部分が、この()内の条件式にあたります。

そして、{}内の中で、その条件になった時の処理を入力していきます。

例えば、「HPを回復する」「移動させる」などの実際のゲーム内での処理が、この{}内となります。

条件式で使う関係演算子

まずif文の()内の条件式を書く際は、左辺右辺を比較させる条件式を記述していきます。

例えば、「もしHPが1だったら」という条件を書く場合、変数をhpとした際に、

if (hp == 1)

となり、条件式のhp == 1は「何が(HPが)」の部分を「いくつ(1)」の部分をに入れていきます。

そして、真ん中に数学などで使う関係演算子で、比較して条件式を作っていきます。

関係演算子意味
==左と右が同じ
!=左と右が異なる
>左が右より大きい
>=左が右以上
<左が右より小さい
<=左が右以下

例えば、HPが10以下の場合は「hp <= 10」と書き、HPが100では無い場合は「hp != 100」と書きます。

複数の条件を指定することもできる

条件は一つだけでなく、複数の条件を記載することができます。

例えば、HPが5以下で座標の位置が6にいる場合、HPを示す変数をhp、座標の位置を示す変数をpositionとすると、

if (hp <= 5 && position == 6)

となります。

このそれぞれの条件式の間に入っている「&&」という演算子には、どちらの条件も満たした場合という意味があります。

また、この演算子には他に「||」というものもあり、これは全部ではなくてもどちらか一つの条件文を満たす場合という意味があります。

例えば、

if (hp > 5 || position == 3)

と書くと、HPが5より大きい、もしくは座標の位置が3にいる、といったどちらかの条件が満たされることで行われる処理を作ることができます。

なお、この演算子「&&」「||」を間に入れれば、いくつでも条件式を繋げていくことができます。

if-else文とは?

if文の基本的な書き方が分かってきたかと思いますが、ここからはその応用でif-else文というものを紹介していきます。

if-else文で条件以外の処理を指定できる

if文では、特定の条件を満たした場合だけの処理を行いますが、if-else文を使うと、反対に条件を満たさない場合の処理も行うことができます。

具体的には、

if (条件式)
{
	条件が満たされたときの処理;
}
else
{
	条件が満たされなかったときの処理;
}

という書き方をします。

条件式の書き方は、これまで説明した方法で書き、条件が満たされたときの処理を書いた{}の次に「else」を書くことで、条件が満たされないときの処理を続けて書いていくことができます。

例えば、

  • 砂漠のステージとそれ以外のステージでプレイヤーの速度を変えたい
  • HPが最大の時とそれ以外の時で表示方法を変えたい

などの場合でif-else文は使えます。

if-else文は追加して使える

先ほどのif-else文の応用的な使い方として、elseの後ろに再度if文を追加することで、条件の分岐を増やすことができます。

条件の分岐を増やすというのは、

  • 条件①の時は〇〇を行う
  • 条件②の時は△△を行う
  • 条件③の時は☆☆を行う
  • それ以外の時は××を行う

といったそれぞれの条件ごとの処理を指定していくことができます。

このように条件の分岐を増やす場合は、

if (条件式①)
{
	条件①が満たされたときの処理;
}
else if (条件式②)
{
	条件②が満たされたときの処理;
}
else if (条件式③)
{
	条件③が満たされたときの処理;
}
else
{
	どの条件にも満たされなかったときの処理;
}

のように記載していくことで、それぞれの条件下で処理が行われていきます。

例えば、

  • キャラクターのいるステージに応じて処理を変えたい
  • 敵からのダメージを敵ごとに変えたい

などの際に、使うことができる書き方です。

なお、最後のどの条件にも満たされなかったときの処理のelse以降は、省略して書くことができます。

このif-else文の注意点として、実際にプログラムで実行すると、このif-else文は上から条件に満たされるかどうかをチェックしていくことになります。

そしてこの条件式が緩いと、条件②と条件③どちらにも満たされることがありますが、上に書いた条件②で処理が行われると、条件③による処理は行われず、このif文の外側のコードが読み込まれていくことになります。

そのため、条件を満たしているのに処理がされていないという場合は、その前の条件式ですでに満たされていないかどうかを確認しておく必要があります。

Unityでif文の実際の使い方の例

ここまでif文の書き方、またif-else文の仕組みをまとめていきましたが、ここからは実際にUnityでif文を書いたスクリプトの使い方を紹介していきます。

例①スペースキーを押したらジャンプする

キーボードやコントローラーの入力があった時に、何かしらの処理を行う場合にif文は良く使われます。

例えば、

キーボードのスペースキーを押したらキャラクターがジャンプする

というのも、if文を使ってスクリプトを書くことができます。

using UnityEngine;

public class Test : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))    // スペースキーを押したら(条件式)
        {
            GetComponent<Rigidbody2D>().AddForce(transform.up * 400);   // 上にジャンプする(処理)
        }
    }
}

条件式では「スペースキーを押す」という条件を指定していて、この条件を満たした場合に「キャラクターをジャンプさせる」という処理を書いています。

今回はジャンプによる重力を付けたかったので、重力機能を持つ「Rigidbodyコンポーネント」のAddForceメソッドでキャラクターのジャンプ処理を書いています。

スペースキーを押したときにだけ、キャラクターがジャンプするという処理が行われているのが分かります。

ただし、この状態だとジャンプ中でも、再度ジャンプをすることができてしまうため、実際にはキャラクターと地面との接地判定を付けておく必要があります。

なお、接地判定については、また別の記事で紹介していきます。

例②座標によって色を変える

今度は、四角形のオブジェクトを使い、座標によって色を変えるという処理を作ってみます。

オブジェクトの座標を取得するには、transform.positionという変数を使い、

でそれぞれの座標を取得することができます。

using UnityEngine;

public class Test : MonoBehaviour
{
    void Update()
    {
        if (transform.position.x >= 2 && transform.position.y >= 2) // X座標が2以上かつY座標が2以上(条件1)
        {
            GetComponent<SpriteRenderer>().material.color = Color.green;    // 緑色に変える(条件1の処理)
        }
        else if (transform.position.x >= 2 && transform.position.y <= -2) // X座標が2以上かつY座標が-2以下(条件2)
        {
            GetComponent<SpriteRenderer>().material.color = Color.red;    // 赤色に変える(条件2の処理)
        }
        else if (transform.position.x <= -2 && transform.position.y >= 2) // X座標が-2以下かつY座標が2以上(条件3)
        {
            GetComponent<SpriteRenderer>().material.color = Color.yellow;    // 黄色に変える(条件3の処理)
        }
        else if (transform.position.x <= -2 && transform.position.y <= -2) // X座標が-2以下かつY座標が-2以下(条件4)
        {
            GetComponent<SpriteRenderer>().material.color = Color.blue;    // 青色に変える(条件4の処理)
        }
        else
        {
            GetComponent<SpriteRenderer>().material.color = Color.white;    // 白色に変える(条件を満たさない場合)
        }

    }
}

今回は2Dゲーム内で制作しているため、X座標とY座標のみで「&&」演算子を使って複数の条件を指定しています。

また、それぞれの座標による条件ごとで、色を変える処理を入れていきたいので、if-else文を使っています。

実際に色を変える処理は、SpriteRendererコンポーネントの中のcolor変数の値を変えています。

なお以下の実際の動画では、分かりやすく見せられるように、オブジェクトを動かせるスクリプトを追記しています。

これで、指定した座標の条件に合わせて色を変更することができました。

まとめ

このページでは、Unityでif文を使う際の、書き方や注意点、また実際の使い方までを紹介していきましたが、いかがでしたでしょうか?

if文とは、特定の条件を満たしたときにだけ処理を行うことができる制御文です。

また、if-else文を使うと、特定の条件だけでなく、それぞれの条件に合わせた処理を行っていくことができます。

さらに、条件は一つだけでなく、「&&」「||」を使うことで、複数の条件を満たした場合だけの処理などを作っていくことができます。

Unityなどのゲーム制作では、if文は非常に良く使われることになりますので、色んな使い方が出来るようにしておきましょう。

最後までお読みいただきまして、ありがとうございました!

コメント