【Unity】クラスとは?変数とメソッドをまとめたもの

C#のクラスとは? Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「Unityを使っているけど、クラスってなに?」

「クラスはどうやって使えばいいの?」

というお悩みの方に向けた内容となっています。

C#では、関連する変数やメソッドをまとめたものクラスと呼びます。

このクラスを使って関連しているものをまとめてあげることで、プログラムを管理しやすくなります。

特に、大規模なゲームになるほど、プログラムが複雑化していくので、クラスを使ってしっかりと管理していくことが重要になっていきます。

そこで、このページでは、Unityでゲーム制作をする際に、クラスがどういうものなのか、またクラスの作り方と使い方についてまとめていきます。

なお、このページでは、

Windows11
Unity Hub3.11.1
Unity6

のバージョンで解説しています。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

クラスとは?関連する変数やメソッドをまとめている

まずは、クラスについて紹介していきます。

冒頭でも解説した通り、クラスとは関連している変数やメソッドをまとめているもののことです。

例えば、敵キャラクターを作る際に、HPや攻撃力などの数値(変数)や、攻撃したり逃げたりといったキャラクターの処理(メソッド)が必要になりますが、これらの敵キャラクターに関する変数メソッドをひとまとめにしたものをクラスといいます。

クラスは自分で作る以外にも、Unityで準備されているクラスとして、VectorクラスやDebugクラスなどがあります。

このようにクラスで管理しておくことで、それぞれに関係している変数やメソッドをまとめておくことができるので、ゲーム規模が大きくなっても管理しやすくなります。

なお、このクラスの中で使う変数をメンバ変数、メソッドをメンバメソッドと呼びます。

クラスの基本的な作り方・使い方

ここからは、実際にクラスをどのように作って使っていくのかをまとめていきます。

クラスの基本的な作り方

クラスを作る際は、

class クラス名
{
	メンバ変数の宣言
	メンバメソッドの定義
}

のように書いてあげることで、クラスを作ることができます。

このクラスの{}の中で、変数メソッドを書いてまとめていくことになります。

例えば、敵キャラクターに関するクラス(Enemy)を作る場合、

using UnityEngine;

public class Enemy  // 「Enemy」クラスを作成
{
    public int hp;  // 体力のメンバ変数
    public int damage;  // ダメージのメンバ変数

    public void attack()    // 攻撃する処理のメンバメソッド
    {
        Debug.Log("攻撃する");
    }

    public void runAway()   // 逃げる処理のメンバメソッド
    {
        Debug.Log("逃げる");
    }
}

のようにクラスを作成して、その中で変数やメソッドを定義しておきます。

なお、原則としてクラス1つにつき、C#ファイル1つとなるので、上記スクリプトは「Enemy.cs」というファイルで作っています。

別のクラスで呼び出す際は変数の宣言とインスタンス化を行う

クラスの中で定義した変数やメソッドを他のクラスで使う際は、以下のようにクラス型の変数を宣言して、中に実体を入れてあげる必要があります。

クラス名の型 変数 = new クラス名();

クラスは型のような使い方ができ、例えば先ほどのEnemyクラスを使う場合は、

Enemy enemy;

のように書いてあげることで、Enemy型enemy変数を宣言することができます。

ただ、このenemy変数には、中身が何も入っていないため、実体を入れておく必要があります。

この実体を入れる場合は、new演算子を使ってEnemyクラスの実体を入れてあげることになるので、

Enemy enemy = new Enemy();

と書いてあげることで、enemy変数にEnemyクラスのインスタンスを入れることができます。

これをインスタンス化と呼びます。

別のクラスでメンバ変数やメンバメソッドの呼び出し方

クラスの型の変数に実体を入れたら、以下のように書いてあげることで、クラス内のメンバ変数メンバメソッドを呼び出すことができます。

変数名.メンバ変数名
変数名.メンバメソッド名

例えば、先ほどのEnemyクラスの変数やメソッドを別のクラス(今回はTest1.cs)で呼び出す場合、

using UnityEngine;

public class Test1 : MonoBehaviour
{
    void Start()
    {
        Enemy enemy = new Enemy();  // Enemy型のインスタンスを作成

        enemy.hp = 100; // Enemyクラスのhp変数を呼び出している
        enemy.damage = 5;   // Enemyクラスのhp変数を呼び出している
        Debug.Log("敵のHPは" + enemy.hp);
        Debug.Log("敵の攻撃力は" + enemy.damage);

        enemy.attack(); // Enemyクラスのattackメソッドを呼び出している
        enemy.runAway();    // EnemyクラスのrunAwayメソッドを呼び出している
    }

}

のように書いてあげることで、変数やメソッドを呼び出すことができます。

以下は、実際にUnity上で表示されたコンソール結果です。

しっかりと別のクラスの変数やメソッドをつかうことができています。

アクセス修飾子でアクセス許可を決められる

先ほどのスクリプトでは、メンバ変数やメンバメソッドを宣言する際に、publicという修飾子を付けていました。

これはアクセス修飾子と呼ばれるもので、メンバ変数やメンバメソッドを他のクラスで呼び出すことができるかを指定する修飾子です。

public以外にも、以下のようなアクセス修飾子があります。

アクセス修飾子役割
public全てのクラスからアクセスできる
protected自分のクラスと継承した派生クラスからのみアクセスできる
private自分のクラスのみアクセスできる
internalプロジェクト内のクラスからアクセスできる

例えば、先ほどのスクリプト(Enemy.cs)のメンバ変数やメンバメソッドを「private」で宣言した場合、他のクラスでは呼び出すことができないので、エラー表示となってしまいます。

using UnityEngine;

public class Enemy  // 「Enemy」クラスを作成
{
    private int hp;  // 体力のメンバ変数
    private int damage;  // ダメージのメンバ変数

    private void attack()    // 攻撃する処理のメンバメソッド
    {
        Debug.Log("攻撃する");
    }

    private void runAway()   // 逃げる処理のメンバメソッド
    {
        Debug.Log("逃げる");
    }
}

このアクセス修飾子を使って制限を加えることで、想定していない値が代入されたりするのを防ぐことができます。

まとめ

このページでは、Unityでスクリプトを書いていく際のクラスについて、どんなものなのか、作り方や使い方を紹介していきましたが、いかがでしたでしょうか?

クラスとは、関連する変数やメソッドをまとめているもので、他のクラスで呼び出して使うことができます。

ただ、呼び出す際は、基本的にインスタンスを作成して呼び出す必要があります。

また、アクセス修飾子を付けておくことで、クラス外からのアクセスを禁止することができます。

最後までお読みいただきまして、ありがとうございました!

コメント