C#のIf文、Switch文をUnity付属のMonoDevelopを使って勉強する

C#のIf文、Switch文をざっくり勉強していきましょう!

C#のと言ってますが、ほとんどのプログラミング言語共通の書き方なので一度覚えてしまえば、他の言語で使う時も対応はすぐに可能ですね(^_^)v

今回もUnity付属のMonoDevelopを使用してスクリプトの記述をしていきます。

スポンサーリンク

If文

If文はその名のとおり「もし」を判定する条件文を記述出来るものです。

例えば、

  • 100円以下だったらお菓子を買うけど違ったら買わないとか
  • 100円以下だったらお菓子を買う、120円以下だったらジュースを買う、それ以外だったら何も買わない
  • と条件によって処理を分けたい時に使います。

    条件が成立した中でさらに条件を判定する。と言った事も出来ます。

    If文の書き方

    If文の書き方は

    ↑のように単一の条件が成立した時のやり方、ifとelseで最初の条件が成立したかしないかのやり方、if-else if-elseを使って一つ一つ条件が成立するかどうかを判定するやり方があります。

    条件式に何を記述するのか?

    条件式の部分には条件を書きますが、条件として判定するのはbool値(真偽値)でtrueかfalseの値を返す式を記述する必要があります。

    その為、条件式にtrueやfalseそのものを書くと言う事も出来ます。

    条件式にはbool値を指定すればいいので、式を指定する事が出来ます。

    ↑のように5 < 10という式は5は10より小さい為、bool値のtrueが得られるのでif文内の処理は実行されます。 2番目のif文では比較演算子を使い同じ値かどうかを判定しています。 メソッドでbool値を戻り値にしていれば、

    ↑のように条件式内にメソッド呼び出しも入れる事が出来ます。 メソッド呼び出しでint型の値を得られたとしたら、その値を使って式を作り条件に設定する事も出来ます。

    条件式を反転する時は!記号を使います。 さきほどの条件式を反転してみます。

    ↑でCheckメソッドを呼び出して1が返ってきて、その後(1 < 2)という条件式でtrueになりますが、その後!で反転しているので結果としてfalseになります。 ifの中を書き換えると、

    ↑のようにtrueを反転してfalseになっているのと同じなので、if文内の処理は実行しません。

    条件文のネスト

    条件式が成立した時にその中でさらに条件を絞ると言う事も出来ます。

    ただし、複雑にネスト(階層を深くする)をした条件文を作成すると、後で解析する時に大変になるので、なるべく深い階層は作らない方がいいです。

    文字を見ただけじゃわからないので実際に作ってみましょう。

    お金が200円以上あればケーキを買い、120円以上あればジュースを買う、100円より少なく50円以上あればお菓子を買い、なければ何も買わない

    という条件文を作ってみます。

    持っているお金をmoneyとし条件文を書きました。

    ↑を実行するとコンソールに『何も買わない』と表示されます。

    何も買わないって・・・( ノД`)シクシク…

    論理演算を使って複数条件を設定

    条件式には論理演算を使って複数の条件を設定する事が出来ます。

    If文でよく使うのは論理積(AND)と論理和(OR)ですね。

    論理積は全ての条件が真の時成立し、論理和の場合はどれかの条件が真の時成立します。

    論理積は&&記号、論理和は||記号で表す事が出来ます。

    ↑の例では1番目のIf文は実行され、2つ目のIf文は実行されません。

    intValueの値を10にすると、1番目のIf文は実行されず、2番目のIf文は実行されます。

    先ほどの持っているお金によって条件分岐をさせたIf文を&&を使って書き換えると

    となります。

    この&&と||ですが、最初の条件が成立されなかった場合次の条件判定をせずに終了します。

    ↑の例でいくと、Check1メソッドではfalseが返ってくる為、Check2メソッドは実行しないのでコンソールに「Check2」は表示されません。

    &と|を使えば条件が成立しなくても実行します。

    演算子に関しては

    で詳しく解説されていますので、参照してください。

    Switch文

    Switch文を使うと条件に合わせた処理を行う事が出来ます。

    ↑のように数値によって分岐させています。

    breakでその条件の実行を終了します。

    条件に合致した時の処理を記述しない時で、breakを記述しなければその下のケースを実行します。

    ↑の例では数値が2、3だった時は同じ処理が実行されることになります。

    実際にSwitch文を使ってみましょう。

    ↑の例ではintValueが2なので「2or3」をコンソールに出力します。

    C#のバージョンによっては数値以外で条件分岐をする事が出来るみたいです。

    その辺りは

    C#リファレンスを参照してください。

    わたくしのMonoDevelopはC#3.0バージョンかなぁ?

    おわりに

    最初はこの記事で、If、Switch、For、ForEach、Whileを全てまとめてやろうとしたんですが、例によってIf文だけで長くなってしまいましたのでIf文とSwitch文のみにしました・・・(^_^;)

    For、ForEach、Whileを長くなっても纏めてやってみようと思います。<(`^´)>

    スポンサーリンク

    記事をシェアして頂ける方はこちら

    フォローして頂くとやる気が出ます

    コメント

    1. Vabu より:

      お詳しいですね
      >いや、と言うよりこれまでのゲームのプレイから見た挙動に対する推測の域は出ていないんですけどね。実際は分からないことだらけ。組めと言われてもすぐには無理。
      おそらくこういう感じで作っているんだろうな?といったプログラムの流れを分解して挙動を近づけてズレをなくすトライエラーの繰り返し。

      蛇の道は蛇?
      車輪の再発明?結構じゃない。
      重要なのは理解するということ、それに近道なんてものはないって事ですわ。
      開発効率の悪さは理解すれば良くなるって事。
      継続は力なりってね。
      サイト作って2年ぐらいになるんじゃないの?

      • 2016年1月1日にブログ開設ですから、1年と10カ月と14日になります。

        Unityの本を初めて買ったのがその半年以上前ですから、2年以上はUnityを使ってますね。

        ブログ開設当初に比べるとUnityの使い方だけでなく、プログラミング、ゲームの作り方、Blenderの使い方、3DCG、アニメーションを作るにはどうすればいいか?、GIMPの使い方等、

        ゲーム全般に関わる知識は確実に増えてますね(まだ色々リンクしてない事も多いですが)。

        自作ゲームの制作は一向に始まっていませんが・・・(^_^;)

        自作ゲームを作り始める時には、このブログで作った内容が大いに役立ってくれるかもしれません。

    2. vabi より:

      ストゼロ2基準では
      ↓・・・ 1 / 60 ~ T以内に
      \・・・ 1 / 60 ~ T秒以内に
      →・・・  0 ~ T秒以内にボタンを(押す・離すの二段構え)
      概ねその通りです。

      ・途中違う方向キーが押されたらタイマーリセット
      >要は時間内に該当キーが入力されていれば途中に違うキーを入れてもリセットはされない。
      スト3はタメ技においてタメが完了するまではタメが数秒間解除されない分割タメというシステムもあります。

      コマンドの性質というのはいくつかあってジャンルによってはリアルタイムを必要としない(違うキーが押されない限りリセットされない)やり方もあります。
      FF6の夢幻闘舞がそれ。

      まあ、3Dゲームのアナログキーにおいてはコマンド入力とは縁がない代物だとは思いますけどね。
      3Dゲームに限って話をすれば、例えば走る以外に短い時間全力疾走出来るDashボタンがあって、じゃあJumpボタンと同時に入力されたらどちらを優先してしかるべきか。
      という時にelseの意味を理解したという事でございますわ。

      • お詳しいですね(^^)/

        if-elseをなかなか難しい問題で理解されていたんですね。(^_^;)

        わたくしの場合はゲームはただ楽しんでいるだけで、そこまで考えた事はありませんでした(今はたまに考える事もありますが)。

        市販ゲーム開発で使うようなゲーム開発のノウハウを知らないので、

        おそらくこういう感じで作っているんだろうな?といった想像をして実際にUnityで作ってみるのは楽しいです。

        これが独学の醍醐味といったところでしょうか(‘_’)

        開発効率は悪そうですけどね・・・。

    3. vabu より:

      ストリートファイターIIIのコマンド技には優先度があって、波動拳と昇龍拳のコマンド条件を同時に満たしてボタンを押せばかならず昇龍が発動するという条件式もif文で記述されている。かどうかは知らないけど、なるほどそういう使い方も出来るのか!というかアクションゲームにおいては当たり前のテクニックなんかなぁと気がついたわけで。
      プログラミング言語の説明においては、少々中身がマニアックでも実際のゲームを例に説明した方が意外と興味を持ってもらえるかもしれませんし、直感的に理解しやすくなるやもしれません。(ウソかホントかは分からない。)
      まあ、あれですわ。elseの意味を理解する上で引き合いに出てきたのがスト3の技の優先度や同時押し(jump・run)のボタン優先度だったという話ですわ。

      • C#の勉強記事にゲーム作りでどのように使うかという実例は必要かもしれませんね。

        わたくしもプログラミングを始めてやった時は、実際どんな時にどう使うか?なんの為にこの機能があるのか?どんな時に使うと便利なのか?

        というのが全然わかりませんでしたし(今でもよくわかってませんが)。

        単純に自分の勉強の意味合いが強いので、どのような時に使うかという話は組み込んでいませんでした。

        思いついたらちょくちょく入れてみます。(^^)/

        格ゲーのコマンドってどのように実装されてるんでしょうね?

        最初に↓キーを押したらタイマー起動し、時間内に右斜め下、→を押せば波動拳を発動、という感じでしょうか。

        途中違う方向キーが押されたらタイマーリセットみたいな。

        昇竜拳のコマンドは何だったか覚えていませんが・・・・(^_^;)