この記事は「Unityでゲームを作るうえで必要なC#プログラミングの基礎知識」を解説するシリーズの第一弾で、今回は
- 変数
- 配列
の2つについてそれぞれ詳しくご説明するという内容になっています。
Unityでゲームを作る際にはC#によるプログラミングは避けて通れないので、プログラミングが苦手だなぁという方は本シリーズをご覧いただき基礎知識を学んで頂ければと思います。
変数とは?
では、はじめに変数についてご説明しようと思います。
プログラミングでいうところの変数とは「データを一時的に入れておく箱」のようなものです。変数を活用することで、例えば
- 計算結果を保持しておき、いちいち再計算しなくても結果を使いまわすことができる
- 変数の値(=箱の中身)が変わったとしても同じ計算式で対応できる
といったメリットを得ることができます。プログラミングでは欠かせない存在の一つです。
変数の宣言方法と使い方
変数を宣言してみよう
さて変数を使うには、まず変数を宣言して「こういう箱を使いますよ」ということを明確にしておく必要があります。C#での変数の宣言のやり方は次のソースコードのようになります(※ソースコードはUnityでよくある例となっています)。
using UnityEngine; public class SampleScript : MonoBehaviour { int hp = 100; void Start() { Debug.Log(hp); } void Update() { } }
変数の宣言部分は次のとおりです。
int hp = 100;
最初の「int」は型名、次の「hp」は変数名です。なお変数を宣言したときには初期値を入れておくこともできるので、ここでは初期値として「100」を代入しています。
変数の「型」について
変数には型というものを指定する必要があります。型とはデータの種類のようなもので、変数を宣言する際には「この箱にはこういうモノを入れるようにしましょう」と予め決めておくことになります。
変数の型として指定できるデータの種類は例えば次のようなものがあります。
型名 | データの種類 | データの例 |
---|---|---|
int | 整数 | 0, 1, 2, -1 |
float | 浮動小数点数 (※要は小数を含む数値) |
0.1, 1.0, -0.5 |
string | 文字列 | あいうえお, 本日は晴天なり |
bool | ブール値(真か偽か) | true, false |
なぜわざわざ型を指定しないといけないのかといえば、それはデータを正確に処理できるようにするためです。例えば「リンゴ」と書かれた箱に「みかん」が入っていたらちょっと混乱しますよね?このようなことから、基本的にある変数にはその変数と同じ型のデータしか入れることができません。
ただし「果物」と書かれた箱にリンゴが入っていてもみかんが入っていても違和感がないと思います。これと同じで例えばfloat型の変数にint型のデータを入れることは可能です。
変数名の決め方について
次に変数名の決め方についてですが、変数の名前はプログラマがある程度自由に決めることができます。ただし何でもいいわけではなく下記のようにルールや慣例のようなものが存在します。
変数名の決め方のルール
- 変数名に使用できる文字は英数字とアンダーバー(_)のみ
- 変数名の1文字目に数字は使用できない
- C#の文法で使用する単語(=予約語)も使用できない
変数名の大文字・小文字は区別されます。つまり「hp」と「HP」は別の変数として扱われますのでご注意ください。
分かりやすい変数名のつけ方
変数名は上記のルールに反しない限り自由に決めることができます。しかし、そうは言っても「そこにどんな値が入るのか?」が分かりにくい変数名を付けてしまうと、後々混乱のもとになるため分かりやすい変数名を付けることが重要です。
例えば、よい変数名と悪い変数名の例を挙げると次のような感じになります。
- よい変数名の例:「playerPosition」「maxBulletRange」
- 悪い変数名の例:「tempA」「enemy1」
よい例ではその変数に何が入るのかが明確になっていますよね(一つ目はプレイヤーの座標、二つ目は弾の最大射程)。ところが悪い例のほうは命名に具体性がなく、一目でどんな値が入るのかが分かりにくくなってしまっています。このような命名は避けるべきでしょう。
ちなみに変数の表記方法は色々ありますが、上の良い例のように
- 1文字目は小文字
- 2単語目以降は大文字で区切る
という表記法(キャメルケース)が一般的です。
変数に値を代入したり値を参照したりする方法
さて変数を宣言したら、あとは実際に値を代入したり・変数に入れた値を参照したりして使っていきましょう。使い方は簡単で、代入の場合は下記のように「=」を使います。
hp = 200;
また、値を参照したい場合は変数名をそのまま書きます(※1文字でも間違えると別の変数と見なされるので書き間違いに注意してください)。
先ほどの例では値を直接代入していましたが、下記のように計算結果を代入することもできます。
int maxHp = 100; hp = maxHp / 2;
配列とは?
さてここまで変数についてご説明したので、次は配列について解説します。
配列とは複数のデータをまとめて扱うことのできる変数のようなものです。イメージとしてはずらっと並んだロッカーのようなものだと思ってください。配列を使うと、似たようなデータを扱うときに変数を一つずつ宣言しなくてもよくなりますし、繰り返し処理を使えばデータを自動で処理できるようになるので便利です。
配列の宣言方法と使い方
配列を宣言してみよう
まず配列の宣言の仕方の例は次のとおりです。
int[] spendings = new int[7];
配列を宣言するときは「型名[] 配列名」のように書きます。
また配列は箱の集まりのようなものなので、何個の箱がつながっているかを指定する必要があります。そこで要素数(=配列内のデータの数)も宣言時に予め指定します。要素数の指定は「配列名 = new 型名[要素数]」と書くことで行えるので覚えておきましょう。
上の例では7日間の支出(=spending)を管理するための配列を宣言しました。ただこの段階では配列のそれぞれの要素には何のデータも入っていないので後で値を代入する必要があります。
しかし最初から値が分かっている場合は、次のように初期値を入れておくこともできます。
int[] spendings = {1000, 800, 1200, 900, 1300, 15000, 1000};
{}の中に初期値をカンマ区切りで書きます。なお、このとき配列の要素数は初期値の数と同じになります。
配列の要素にアクセスする方法
次は配列の要素にアクセスする方法です。変数の場合はそのまま変数名を書けば値を参照することができましたが、配列の場合は箱の集まりのようなものなので「何番目の箱の中身を見るか?」を指定しないといけません。そこで、例えば1番目の箱にアクセスしたい場合は
spendings[0]
と書きます。[]の中の数字はインデックスといって「何番目の箱か」を表すためのものです。1番目の箱にアクセスするのに「0」と書いてありますが、これは間違いではありません。なぜならインデックスは0番から始まると決められているからです。
初心者のうちはインデックスが0から始まることに違和感があると思いますし、プログラミングをしていると少し混乱するかもしれませんがこれは慣れるしかありません。
ちなみに余談ですが、配列の存在しない要素にアクセスしようとするとエラーになってしまいます。例えば上の例では
spendings[-1] spendings[8]
はエラーになります。
配列の要素に値を代入する方法
配列の各要素に値を代入するには、例えば
spendings[0] = 1000;
と書きます。配列の場合はインデックスを指定する必要があるだけで、扱い方は変数と同じだと思っていただいてOKです。
繰り返し処理を使って配列の全要素にアクセスする方法
では最後に、繰り返し処理を使って配列の全要素にアクセスする方法をご紹介します。
配列を使っているとすべての要素を一つ一つ調べていきたくなることがよくあるのですが、これを手動で一つ一つ見るのは面倒ですよね。そこで繰り返し処理を使うことで配列を効率よく調べることができます。
for文を使って配列を調べる方法
まずはfor文を使う方法です。サンプルコードは次のとおり。
void Start() { for(int i = 0; i < spendings.Length; i++) { Debug.Log(spendings[i]); } }
配列の要素数は「配列名.Length」で取得できます。そして配列のインデックスの範囲は「0~要素数-1」なので、繰り返し数の条件式は「i < 配列名.Length」となります。
こちらのやり方はインデックスの番号を取得できるので、「〇番目だけ別の処理をしたい」といった場合に便利です。
foreach文を使って配列を調べる方法
次はforeach文を使う方法です。サンプルコードは次のようになります。
void Start() { foreach (int spending in spendings) { Debug.Log(spending); } }
こちらの方がfor文を使った場合よりもシンプルに書くことができます。ただしこちらの場合はインデックスを取得することができないので、そのままでは「〇番目の時だけ別の処理をする」といったことはできません。
おわりに
以上、C#の変数・配列についてご説明しました。変数や配列はプログラミングを行う上で欠かせない概念の一つなので、ぜひ上記の内容を参考にしていただきご理解いただければと思います。