はじめに
こんにちは。ShrineGate3544です。
今回はUnityにおけるクラスやインスタンスについての説明をします。
対象として「クラスってなに?全然わからん」といった方を想定していますが、Unityのコードに全く慣れていない方には少し難しいかもしれません。
分かりやすさを優先する都合上、一部省略している箇所がありますが、基本的な概念を理解するには十分だと思います。
クラスとは
では、実際にクラスとは何かについて見ていきましょう。
クラスがなかったら
クラスについて説明する前に、クラスが無かった時のことを考えてみましょう。
ゲームを作っていると、同じようなデータをたくさん作ることがあります。
ここでは、「敵キャラクターのデータ」を例にしましょう。ゴブリン、スライム、ドラゴン……それぞれにHPや攻撃力、守備力などの情報がありますよね。
でも、もしこれを全部一枚一枚スクリプトに書いていたら大変です。
// Goblin.cs
public class Goblin : MonoBehaviour { //ゴブリンのデータ
public int HP = 30;
public int Attack = 10;
}
// slime.cs
public class Slime : MonoBehaviour{ //スライムのデータ
public int HP = 2;
public int Attack = 3;
}
// Dragon.cs
public class Dragon : MonoBehaviour { //ドラゴンのデータ
public int HP = 200;
public int Attack = 50;
}
//以下、同じようなコードが続く...
こんなふうに敵ごとに新しいクラス(スクリプト)を作っていたら、似たようなコードがどんどん増えていきます。
「もう少し効率よくできないかな?」と思いますよね。
クラスの登場
そこで登場するのが クラス(class) です。
クラスはよく、「オブジェクト(実体)を作るための設計図」と表現されます。
この設計図には、オブジェクトが持つ様々な数値、関数を定義することができます。
先程の例で見てみましょう。
public class Enemy : MonoBehaviour //Enemyクラスの定義
{
public string Name;
public int HP;
public int Attack;
public void ShowStatus()
{
Debug.Log(Name + " のHPは " + HP + " です。");
}
}
上のコードでは、Enemyクラスを定義しました。
ここには敵の基本的な情報と、ステータスを表示する関数が書かれています。
このクラスは、敵キャラクターを実装する際の一種の「テンプレート」のようなものです。
ゴブリンのデータを作りたいなら、テンプレートとなるEnemyクラスに適切な名前、HP、攻撃力を代入すればいいわけです。
クラスの利点
クラスを使うメリットをまとめておきましょう。
メリットはたくさんあります。
①同じようなコードを何度も書かなくていい
→ 共通の部分を一箇所にまとめられる。
②変更が楽になる
→ もしHPの扱いを変えたいなら、Enemyクラスだけ直せばいい。
③整理しやすくなる
→ 敵、プレイヤー、アイテムなどをそれぞれのクラスで分けられる。
ゲーム開発では、プレイヤー・敵・アイテム・魔法など、多くの「モノ(オブジェクト)」が登場します。
それらを整理するために、クラスという「設計図」を使うのです。
インスタンスとは
クラスの次は、インスタンスについて説明します。
インスタンスはクラスと深い関係があります。
インスタンスの作成
クラスを作っただけでは、ゲーム上には何も出てきません。
クラスをもとに、実体(インスタンス) を作る必要があります。
PowerPointやWordで言うなら、テンプレートを参考にして自分なりのスライドや書類を作る工程のことです。
実際のコードで見てみましょう。
void Start()
{
Enemy goblin = new Enemy(); // <-goblinインスタンスを作成
goblin.Name = "ゴブリン";
goblin.HP = 30;
goblin.Attack = 10;
Enemy dragon = new Enemy(); // <-dragonインスタンスを作成
dragon.Name = "ドラゴン";
dragon.HP = 200;
dragon.Attack = 50;
goblin.ShowStatus();
dragon.ShowStatus();
}
上のコードでは、先程のEnemyクラスを元に「goblin」と「dragon」という2つのインスタンスを作成しました。
インスタンスを作成する際は、
A inst = new A(); //「A」にはクラス名、「inst」にはインスタンス名を書く
という書き方をします。
PowerPointで言うと、テンプレートを選択して自分のプレゼンテーションを作成する作業です。
インスタンスの数値を変える
先程のEnemyクラスには、Name・HP・Attackという3つの変数が定義されていました。
クラスというテンプレートをもとに作成されたインスタンスは、これらの変数を受け継いでいます。
それぞれの敵キャラをつくるには、これらの変数を適切なものに変更する必要があります。
そこで、このような書き方を使います。
goblin.Name = "ゴブリン"; //goblinインスタンスのNameという値を、「ゴブリン」に変更
この表記で、インスタンスの変数を適切なものに変更することができます。
インスタンスの関数を実行
関数の場合も、基本的には変数と同じです。
goblin.ShowStatus(); //goblinクラスのShowStatus関数を実行
goblinインスタンスは、Enemyクラスから受け継いだShowStatus関数を持っています。
この書き方をすることで、ShowStatus関数を実行することができます。
まとめ
今回は、クラスについて説明しました。
最初のうちはよく分からないかもしれませんが、Unityを使う上で非常に重要な概念となります。
実際にコードに触れてみたり、ネットで調べたりする中で少しずつ身につけていきましょう!
次回はクラスの継承についてです。