Unity C#の繰り返し処理の使い方 for文・while文・foreach文 | Unity入門の森 ゲームの作り方

Unity C#の繰り返し処理の使い方 for文・while文・foreach文

繰り返し式についての画像 Unity C#入門講座
繰り返し式にはwhiled while, for, foreach文と補助的にbreak, continueがある


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

今回の記事では繰り返し処理についてみていきます。

アプリ開発ではたくさんのデータに対して同じ処理を行いたい時があるのですが、その時に繰り返し処理を利用することになります。

前回の条件分岐の制御文と併せてプログラミングの超重要ポイントの一つです。

前回の記事:

Unity C#の条件分岐の使い方 if文・switch文
今回の記事では制御文について解説していきます。 制御文にはいくつか分類があるのですが、ここでは条件分岐と呼ばれるif文とswitch文について見ていきます。 前回の記事: 制御文と条件分岐について 制御文とはプログラムの処理を実行するかしな...

【Line登録者限定のプレゼントもあるよ!】

繰り返し処理(ループ、Loop)の制御文について

繰り返し処理(ループ、Loop)の制御文には次のものがあります。

  • while文
  • do while文
  • for文
  • foreach文

また、C#では次の補助的なキーワードも用意されています。

  • break
  • continue

while文とは

while文についての画像

while文は最も構造が簡単な繰り返し式になる

while文は最も単純な繰り返し処理になります。

while(<条件式>) { ... }

条件式には繰り返し処理の終了判定を比較演算子などを使用して書いてください。

while文は条件式がtrueになり続けるまで処理を繰り返し、falseになった時に終了します。

do while文とは

do while文についての画像

do while文は先に処理を実行する繰り返し式になる。

do while文は先に処理を実行してから条件式の結果を判断するwhile文になります。

do { ... } while(<条件式>);

こちらもwhile文と同じで、条件式がtrueなら繰り返し処理を続行し、falseになると終了します。

for文とは

for文についての画像

for文はテンプレート化された繰り返し式になる。

for文はテンプレート化された繰り返し処理になります。

for(<初期化>; <条件式>; <後処理>) { ... }

  • 初期化:繰り返し処理が始まる時、最初に実行される処理。
  • 条件式:繰り返し処理の終了判定。
  • 後処理:繰り返し処理を実行した後、最後に実行される処理。

for文を実行しますと、次のような順序で処理が実行されます。

  1. 初期化の実行
  2. 条件式の判定
  3. 繰り返し処理本体
  4. 後処理の実行
  5. 2.に戻る

for文でも条件式がtrueなら繰り返し処理を続け、falseになると終了します。

for文は主に配列(※1)の各要素に繰り返し処理を行う事を想定された作りになっています。

配列の要素を見ていく時は一般的にループカウンターと呼ばれる変数を用意し、それを繰り返し処理のたびに+1していくことが多いです。

なので、ループカウンターをfor文の初期化の中で宣言し、条件式ではループカウンターが配列の要素数より小さいか判定し、最後に実行される処理の中で+1するといった使い方がよく出てきます。

下のサンプルコードがそのような形になっています。

(※1 配列については次の記事で詳しく解説します。配列は同じ型の値の集まりを表すものになります。)

foreach文とは

foreach文についての画像

foreach文はデータの集まりであるコレクションの要素に適した繰り返し式になる。

foreach文はSystem.IEnumerableインターフェイスに対して繰り返し処理を行う時に利用されます(インターフェースなどわからなければひとまずこの文は無視してOKです)。

簡単に言うと、for文をさらに読みやすくした繰り返し処理になります。

foreach(<要素の宣言> in <コレクション>) { ... }

foreach文を実際に使用するにはまだまだ説明していないことが多くありますので、こんな繰り返し処理があるとだけ覚えていただければOKです(コレクションも今はわからなくてOK)

実際のプログラミングではforeach文を使った方がコーディングしやすくなっています。さらにSystem.Linqというコレクションに対する操作セットを組み合わせるとより効果が発揮します。

C#の中では高機能なものになりますがUnityC#講座を終える頃にはぜひともマスターしてほしい機能の一つになります。

繰り返し処理内を補助するキーワード

繰り返し式を補助するものの画像

ちょっと変わった繰り返しをしたい時に使用できるキーワード。

繰り返し処理の中では次のキーワードを使用することができます。これらを使うことで繰り返し処理の途中でループを中断したり、次の繰り返し処理にジャンプすることができます。

これらはC#では式として扱われています。

  • break
  • continue

break

breakキーワードを使用すると繰り返し処理を途中で中断することができます。

continue

continueキーワードを使用すると現在の繰り返し処理を中断し、次の繰り返し処理へジャンプすることができます。

【Unityで実践】 繰り返し式を使ってみよう!

ここまでC#にある繰り返し処理について解説してきました。

アプリ作成中にはfor文かforeach文を使用することが多くなります。

ホントは配列を使用すると繰り返し処理の効果が実感しやすのですが、それについては他の記事で扱います。

繰り返し式を使ってみようの画像

サンプルコードをコンパイルするとLoopCountに設定した回数、ColorにAddColorを足している。AddColorの色が暗いのにColorは明るい色になっているところに注意。

今回のサンプルコードではInspectorからLoopCountとAddColorを設定することで、ColorとMeshの色を自動的に設定するものになっています。

LoopCount分、AddColorをColorに足し合わせる処理になっていて、その部分にfor文を使用しています。ただし、Colorの赤色が1以上になったらbreakキーワードを使用しそこで繰り返し処理を中断するようにしています。

また、繰り返し処理を行う前にLoopCountの値が0以上になるようにしていますが、一般的にループ中ではループカウンターは0から始まるようになっているからです。(配列の性質に関連しています。)

ちなみに今回の処理はAddColorにLoopCountを掛けた値をColorに設定するようにしても同じことができます。

余談:無限ループについて

繰り返し処理を使う際に一つだけ注意してほしいことがあります。

それは、書き方によって繰り返し処理が永久に終わらなくなってしまうことです。

これをプログラミングの世界では無限ループといいます。

GUIアプリケーションのメッセージループなど、実装上意図的に無限ループになるようにすることはありますが、Unityでは基本的に無限ループを書くことはありません。

無限ループ的な処理はMoneBehaviour.Update()やコルーチンなどで処理を作っていくことになります。

アプリ実行中に意図しない無限ループが発生すると、アプリの挙動が停止(フリーズ)したように見えます。一度そのような状態になりますとアプリを強制終了する他なくなります。

Unityでも開発途中でうっかり無限ループになってしまうコードを書いてしまうとUnityが停止してしまいます。もしそうなった時は強制終了した後に必ず無限ループになってしまった部分の修正を行ってください。

一応無限ループのサンプルを書きますが決して実行しないようにしてください。

まとめ

今回の記事をまとめると次のようになります。

  • 繰り返し処理は条件を満たすまで何らかの処理を繰り返し実行する時に用いる。
  • 配列などのデータの集まり(コレクション)を操作する際にも使われる。
  • while文は条件式がtrueになるまで処理を繰り返す。
  • do while文は先に処理を実行してから処理を繰り返すかどうか判断するwhile文。
  • for文は初期値、条件式、繰り返し処理の最後に行う処理をまとめて書くことができる繰り返し処理。
  • foreach文はSystem.IEnumerableに対応したデータの集まり(コレクション)を全て見ることができる繰り返し処理

一つ注意点として、繰り返し処理では指定した時間処理を繰り返すといった時間を跨ぐような処理は扱えません。繰り返し処理は常に同じタイミングで処理が順に実行されます。なので、あまりに長く処理を繰り返すとアプリの実行が停止したように見えることがあります。しばらく待つとまた動くようになりますが、現在のコンピュータでは大体1万回以上の繰り返し処理は重い処理になりますので注意しましょう。

そのような場合はUnityのMonoBehaviour.Update()やコルーチン(※)を使用してください。もちろんC#にもSystem.Time.Interval()など似た機能はあります。

(※まだ紹介していないUnityの機能になります。System.IEnumeartorと関係しています。)

以上になります。それでは次の記事に行ってみましょう!

次の記事:

UnityC#の配列の使い方 一次元配列・多次元配列・ジャグ配列
今回の記事では配列について解説していきます。 配列を使用することでたくさんのデータを一つの変数にまとめられます。 前回の記事: 配列(Array)とは 配列とは同じ型を持つ値を一つの変数にまとめた参照型の値になります。 C#では配列のように...

初心者向けUnityC#入門講座に戻る>>



Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

タイトルとURLをコピーしました