0からスタート!ゲーム開発ブログ

ゲーム開発に関する様々な記事を更新します

【初心者向け】Unityで始めるC# - 変数とは?

はじめに

ゲームエンジンUnityでは、C#というプログラミング言語を使ってゲームを開発していきます。

今回はC#の基本中の基本である変数について解説をしていきます!

変数


 変数(へんすう)は、データを一時的に保存するための「箱」のようなものです。 例えば、ゲーム内で使われるプレイヤーの名前やお金、スコアなどのデータを保存するために使用します。

 変数を利用することによって、ゲーム内の様々な情報を管理し、更新することができます。



データ型


 変数は、箱の中に入るデータの種類に応じて、適切な種類を選択する必要があります。 以下に、よく使われる変数の種類を紹介します。


データ型の種類と役割

データ型名 保存できる情報と使用例
int(イント) 整数を保存する変数です。例えば、プレイヤーのスコアを保存する場合に使用します。
float(フロート) 小数点以下の数値を保存する変数です。例えば、プレイヤーの位置情報を保存する場合に使用します。
bool(ブール) 真偽値を保存する変数です。例えば、プレイヤーが生きているかどうかを保存する場合に使用します。
string(ストリング) 文字列を保存する変数です。例えば、プレイヤーの名前を保存する場合に使用します。


 非常に多くのデータ型が用意されていますので、少しずつ覚えていきましょう。



変数の宣言


 変数をプログラム内で使うためには、変数を宣言する必要があります。 変数を宣言する際には、データ型と変数名を1セットで指定します。

 例えば、int型のscoreという名前の変数を宣言する場合、以下のように記述します。


変数の宣言

int score;    // int の後に半角スペースを空けて、変数名を記述する


 これで変数の宣言が完了し、score という名前の変数をプログラム内で利用できる状態になります。

 宣言の最後にはセミコロン(;) を記述します。この ; の部分でプログラムは処理を区切って読み解いてくれます。 日本語の文章の文末にある 。 や、英文の文末にある . と同じような役割です。つけ忘れないようにしましょう。


 変数名は自由につけることが出来ます。変数の宣言は、その変数を使う目的や役割に合わせて行いますので、基本的には役割に即した名前をつけるようにします。 この例であれば score という変数名ですので、整数の情報を扱い、それを点数の値として管理する目的を持っている変数である、という意味付けになります。




 複数の変数を同時に宣言することもできます。 例えば、int型のscoreという名前の変数と、string型のplayerNameという名前の変数を宣言する場合、以下のように記述します。


複数の変数を同時に宣言する

int score;     // データ型名 半角スペース 変数名 セミコロン で1つの書式になっています。
string playerName;



値と変数の初期化


 変数を宣言しただけでは、まだその箱の中身に情報は格納されていません。つまり、空っぽの状態です。 この格納できる情報のことを総じて「値(あたい)」と呼びます。整数も文字列もすべて値という単位で管理しています。

 変数には、=(イコール)演算子を利用することで、数学式のように値を代入することが出来ます。(代入処理)

 変数に初期値を設定するには、以下のように記述します。特に変数の宣言に合わせて代入処理することを初期化(しょきか)と呼びます。


変数の初期化

int score = 0;


 上記の例では、scoreという名前のint型の変数に、初期値として 0 を代入処理することで値の設定し、初期化しています。


 複数の変数を同時に初期化することもできます。 例えば、以下のように各変数を初期化することで、それぞれの初期値を設定することができます。


複数の変数の初期化

int score = 0;
float playerXPosition = 0.0f;
bool isPlayerAlive = true;
string playerName = "Player";


 この例であれば、それぞれのイコールの右側にある値が代入処理されて変数に格納されている状態になります。



変数の使い方


 変数は、その名前を使って値を参照したり、変更することができます。


変数の使い方例

int score = 0;
score = score + 10;    // scoreの値を10増やす
Debug.Log(score);     // scoreの値を Console ビューにログ表示する




 このように変数に対して代入処理を行うことで、変数の値を変更できます。 例えば、プレイヤーのHP を増減させたり、お金を増減させたり、名前を変えたりすることが出来ます。




 以上が変数の基本的な説明です。 まずは変数に利用できるデータ型の種類と初期値の設定方法(初期化)を覚えることが大切です。 また、変数を使って簡単な計算を行ってみたり、値を変更してみたりすることで、理解を深めることができます。



変数の宣言場所とスコープの概念


 さて、変数の宣言はクラス内のどこに書けばいいのでしょうか?

 変数は宣言を書いた場所によって使える範囲が自動的に設定されて、変数のタイプと呼び方が決まります

 主に大きく分けて2つに分類されます。(今回は静的フィールドの説明は省いています。)



1.メンバ変数

 1つはクラスのフィールドです。(宣言フィールド)

 クラスのフィールドとは、クラスのブロック { } 内であるが、メソッドのブロック { } の外部を指します。 ここに書いた変数はメンバ変数と呼ばれるタイプの変数になります。


メンバ変数の宣言

public class SampleClass {

    // ここに書くものはメンバ変数
    GameObjcet obj;

    private void Start () {

    }
}


 変数には使える範囲があり、それをスコープと呼びます。

 メンバ変数はクラス内のどのメソッドでも利用できる変数になります。 プログラムがずっと覚えておいて管理したい情報は、このメンバ変数として宣言を行います。 例えば、プレイヤーのお金や経験値といった情報はメンバ変数で管理するとよいでしょう。



2.ローカル変数

 もう1つの宣言場所は、メソッドの { } 中や、メソッドの引数に受け取った引数の変数です。 この中で宣言した変数をローカル変数とよび、これらは宣言したブロック { } 内でしか使えません


ローカル変数の宣言

public class SampleClass {

    private void SampleMethod (int amount) {   // amount 変数もローカル変数

        // ここは SampleMethod 内なので、ここに書くものは SampleMethod の { } 内でのみ使えるローカル変数
        int x = 10;

    } // ここまできたら、この SampleMethod の中で宣言されたローカル変数は使えなくなる。
}


 一時的に利用し、その後、忘れてしまっても問題ないような場合にはローカル変数を利用します。

 これからネットの記事などを見たときに、なぜ、ここで変数を宣言しているのか? という疑問を持ってみてください。 そういった視点を持っていただくと、プログラムへの理解が深まり、変数のスコープへの考え方が少しずつ分かってきます



3.ローカル変数のスコープの補足

 ローカル変数は、ブロックごとに使用範囲が変わります。 例えばメソッド内で for 文を作ったときのものは、さらにそのブロック内でしか使えません。

スコープの考え方

public class SampleClass {


    private void SampleMethod (int amount) {   // amount 変数もローカル変数

        //  ここは SampleMethod 内なので、ここに書くものは SampleMethod の { } 内でのみ使えるローカル変数
        int x = 10;

        // i 変数もローカル変数
        for (int i = 0; i < 10; i++) { 
            // この for 文の {  } 中では i 変数が使える
        }
        // ここで for 文で宣言した i 変数は使えなくなる

        // この i 変数は、上の for 文の i 変数ではなく、新しくここで宣言されたものなので、別の変数として処理される
        for(int i = 0; i < 5; i++) {
             // この変数は、for 文内の { } で宣言しているので、for 文内でしか使えないし、ループを繰り返すたびに新しく初期化される
             bool isCheck = false;
        }
     // ここで i 変数は使えなくなる
    }
 // ここまできたら、ここまできたら、この SampleMethod の中で宣言されたローカル変数は使えなくなる。
}



まとめ

 変数の宣言は、宣言場所によって変数のタイプとスコープが決まります。 特に変数の宣言場所によるスコープの違いを理解することがとても大切です。

 変数への理解が深まると、よりよい変数の使い方のアイディアも浮かび、読みやすく、効率のよいコーディングが出来るようになっていきます。