Unityに関連する記事です

 Unityで使うC#の基本中の基本、「変数(へんすう)」について、わかりやすいサンプルコードを使って説明します。



変数の定義と種類


 プログラミングにおける「変数」は、特定のデータを保持して名前をつけることで、それを後から利用できるようにしたものを指します。
変数はデータの入れ物であり、データを一時的に保存するための「箱」のようなものです。

 変数に名前をつける(これを「変数の宣言」と言います)ことで、データにアクセスしたり、新しいデータに更新したりできます。



 C#には様々な種類の変数がありますが、これは変数が保持できるデータの「」によります。

 以下に、C#の主なデータ型を紹介します。

 int: 整数型で、整数値を保持します。例:int age = 20;
 float: 浮動小数点型で、小数値を保持します。ただし、floatを使うときは数字の後にfを付ける必要があります。例:float weight = 70.5f;
 string: 文字列型で、文字列(テキスト)を保持します。例:string name = "Taro";
 bool: 真偽値型で、true(真)またはfalse(偽)の二つの値しか取らない型です。例:bool isAdult = true;

 これらは一部の例ですが、C#にはこれら以外にも多くのデータ型が存在します。
そのため、何をどのように表現したいかによって適切なデータ型を選ぶことが重要となります。

 特に Unity で使用する機会の多い種類は上記のようなものです。
まずはこれらを覚えていくようにしましょう。


メンバ変数の説明と宣言方法、代入方法


 メンバ変数とは、クラス内で宣言された変数のことを指します。
これはクラスの一部として存在し、クラス内のメソッドからアクセスすることができます。

 宣言方法は以下の通りです。

public class MemberVariableSample : MonoBehaviour {

    // メンバ変数の宣言
    int health;

}

 そして、代入方法はこのようになります。

public class MemberVariableSample : MonoBehaviour {

    // メンバ変数の宣言
    int health;

    void Start() {

        // メンバ変数に値を代入
        health = 100;
    }
}

 この例では、healthというメンバ変数を作成し、Startメソッドで初期値100を代入しています。


メンバ変数の初期化


 メンバ変数は宣言と同時に値を代入することもできます。
これを初期化といいます。

 これは特に初期値が決まっている場合に便利で、コードもすっきりとします。

 以下に、メンバ変数の宣言と同時の初期化の例を示します。

public class MemberVariableSample : MonoBehaviour {

    // メンバ変数の宣言と同時の初期化
    int health = 100;


    void Start() {

        // ここではすでに health は 100 に初期化されています
        Debug.Log(health); // 100が出力されます
    }
}

 この例では、healthというメンバ変数を宣言と同時に100で初期化しています。
その後Startメソッド内でその値をログとして出力しています。
こうすることで、明示的にStartメソッドで初期化する必要がなくなります。

 ただし、この初期化はクラスの新しいインスタンスが作られる度に行われることに注意してください。
つまり、新しいオブジェクトが生成されるたびに、そのhealth変数は100に設定されます。

 このような初期化の方法は、変数がその初期値で始まることを保証するので、特にゲーム開発では非常に役立ちます。


ローカル変数の説明と宣言方法、代入方法


 ローカル変数とは、特定のブロック(コードの一部)内でのみ使われる変数のことを指します。
ブロックとは { } の部分です。

 その各ブロックが終わると、ローカル変数は消えてしまいます
このブロックはメソッドでもif文でもfor文でもあり得ます。

 以下に、各ブロックにおける、ローカル変数の宣言と代入の例を示します。



<メソッド内のローカル変数>
public class LocalVariableSample_Method : MonoBehaviour {

    void Start() {

        int localNumber; // ローカル変数の宣言
        localNumber = 20; // ローカル変数への代入
    }
}



<if文内のローカル変数>
public class LocalVariableSample_if_statement : MonoBehaviour {

    void Start() {

        int health = 100;

        if (health > 50) {  // ← ここから

            string status = "Healthy"; // ifブロック内のローカル変数
            Debug.Log(status);

        }           // ← ここまでが if 文のブロック

        // Debug.Log(status); // この行はエラーになる
    }
}



<for文内のローカル変数>
public class LocalVariableSample_for_statement : MonoBehaviour {

    void Start() {

        for(int i = 0; i < 10; i++) {    // ← ここから

            Debug.Log(i);  // int i は、forブロック内のローカル変数

        }                  // ← ここまでが for 文のブロック

        // Debug.Log(i); // この行で i 変数を利用すると、エラーになる
    }
}

 これらの例でわかるように、ローカル変数はそのブロック内でのみ有効で、そのブロックを出るとアクセスできなくなります。
これにより、変数のスコープ(有効範囲)を限定することで、変数の使いどころを明確にし、バグの発生を防ぐことが可能になります


ローカル変数の初期化


 ローカル変数も宣言と同時に初期化することが可能です。
これは、その変数が特定のブロック内でしか使わない場合や、初期値が明らかである場合にとても便利です。

 以下に、ローカル変数の宣言と同時の初期化の例を示します。

public class LocalVariableSample : MonoBehaviour {

    void Start() {

        // ローカル変数の宣言と同時の初期化
        int score = 50;

        Debug.Log(score); // 50が出力されます
    }
}

 この例では、scoreというローカル変数を宣言と同時に50で初期化しています。
そしてすぐにその値をログとして出力しています。

 ローカル変数の初期化はそのブロックが実行されるたびに行われます。
つまり、Startメソッドが呼ばれるたびに、score変数は50に設定されます。

 このようにローカル変数を初期化することで、その変数がどのような値で始まるのかを明示的に示すことができ、コードの読みやすさを向上させます。



 これらの理解を深めるために、Unityでいくつかのスクリプトを作成してみてください
記事を読むだけではなく、実際に自分で手を動かしてソースコードを書き、どのように動作するかを理解していくことが学習になります。

 そして、メンバ変数とローカル変数、それぞれがどのように動作するかを観察してみてください。


変数のスコープ


 「スコープ」とは、変数がアクセス可能な範囲のことを指します。
メンバ変数はそのクラス全体から、ローカル変数はそのブロック内からのみアクセスすることができます。

 上記の例の、if 文や for 文のブロック内で宣言した変数を、ブロック外で利用しようとするとエラーが出るのは
このスコープによるものです。


メンバ変数とローカル変数の使い分け方の考え方


 では、メンバ変数とローカル変数、どのように使い分ければよいのでしょうか。
その基本的な考え方を説明します。



 メンバ変数は、クラス全体で共有する必要がある情報を格納します。
クラスの異なるメソッド間で共有する情報、または状態を保持する情報(例えばゲームキャラクターの体力)などに用います。

class GameCharacter {

    int health = 100; // 体力を保持するメンバ変数

    void Damage(int damageAmount) {
        health -= damageAmount; // 体力を減らす
    }
}



 ローカル変数は、特定のブロック内だけで必要な一時的な情報を格納します。
計算の途中結果や、メソッドの入力値を一時的に保持するために使います。

void CalculateDamage(int baseDamage, int bonusDamage) {

    int totalDamage = baseDamage + bonusDamage; // 合計ダメージを計算するためのローカル変数

    Damage(totalDamage); // ダメージを適用
}

 これらの使い分け方を覚えることで、プログラムを書く上での理解が深まり、効率的にコードを書くことができます。


まとめ


 以上が、UnityでC#を使う上での変数の基本的な知識となります。
変数はプログラミングの基本中の基本です。

 この記事を通じて、変数の使い方と役割について理解を深めてください。

 また演習問題を用意してありますので、そちらも活用してください。

   => 変数の基礎から使い方まで

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます