[Unityで学ぶC#] 9 クラス


クラスとは

一言でいうと設計図です.

クラスは主に2つの要素でできています.
1. クラスの保持するデータ
2. データを処理するコード


一旦説明

後ほど「実践」で一からクラスの作り方を示すので序盤は流し読みしてください.

モンスターのクラスを作ります.

モンスターは名前を持っています.


クラスのサンプル

このように作ることができます.

public class Monster
{
    public string name;
    public Monster(string name){
        this.name = name;
    }
}

サンプルの解説

public class Monster
{
    // クラスの中身
}

classという単語がある行の次にある{}がクラスの範囲を示しています.

public class クラス名
{
    // クラスの中身
}

サンプルの解説

public string name; // クラスが保持するデータ

public Monster(string name){ // クラスの初期化処理
    this.name = name;
}

上のnameはモンスターの持つデータであり,名前を示す部分です.

下の部分はコンストラクタといい,データを初期化するために使います.

public Monster(string name){
    this.name = name;
}

コンストラクタの書き方は関数の帰り値なし、名前がクラス名と同じバージョンいうと少しわかりやすいでしょうか..?


コンストラクタ

public クラス名()
{
}

初期化するパラメータがないときはこのように中には何も書きません.省略も可能です。


コンストラクタ

public クラス名(型 変数名)
{
    初期化処理
}

初期化するためのパラメータをわたしたいときはこのようにします.詳しくは後で説明します.


実践


まずはクラスを作る


まずはクラスを作る

public class Monster
{

}

public class Example9 : MonoBehaviour {

    void Start () {
    }
}

データとコンストラクタを書く

public class Monster
{
    public string name;
    public Monster(string name){
        this.name = name;
    }
}

public class Example9 : MonoBehaviour {

    void Start () {
    }
}

nameがややこしい


色のついた部分が対応しています.
this.nameがMonsterクラスのデータ.
青いnameが渡されたパラメータです.

これらは同じ名前である必要がなく,むしろ普通は別の名前にすると思いますが,
僕は名前をつけるのが面倒なので,同じ名前にしてしまっています.

public string name;
public Monster(string n){
    name = n; // これでも問題無し
}

設計図から実体を作る

new演算子を使うことで,実体を作ることができます.
インスタンスともいいます.


とりあえず再生してみよう

Debug.Log(monster.name)

スライムと表示されました.

何をしたのか?

まず「Monsterとはnameというパラメータを持っているものである」という定義をしました(クラスを作る)
その後、新しくスライムを生成しました。(new Monster("スライム"))
スライムに「君はMonsterだからあだ名monsterな!」とあだ名をつけました Monster monster = new Monster("スライム") (理解しやすいように無理やりこじつけています)
最後にmonsterの名前をLogに出力しました。


データの流れ


.(ドット)の意味


参考

備考

Unityでスクリプトを作成すると、クラス名の横に: MonoBehaviourとついたスクリプトができます。
これがついたクラスではコンストラクタは使いません。
なぜならMonoBehavourのついたスクリプトはnewを使って生成しないからです。


おわり