【Unity入門】継承について基礎から説明する
この記事の目次
継承とは
継承とはクラスのメンバー変数やメソッドを引き継いで新しいクラスを作ることをいいます。
例えば『Monster』というクラスがあって、
そのメンバー変数として『kind = “モンスター”』
メソッドとして『bodyBrow』という
『たいあたり』をするものがあったとします。
この『Monster』というクラスを継承して
『Dragon』というクラスを作った場合、
Dragonは『Monster』の
メンバー変数とメソッドを引き継ぎます。
今回だと『kind = “モンスター”』というメンバー変数と
『bodyBrow』というメソッドを
引き継ぎます。
引き継がれたメンバー変数とメソッドは、引き継がれたクラスでも使うことができます。
また、クラスは複数回引き継ぐことができます。
例えば、『Monster』というクラスは
『Dragon』の他に『Slime』というクラスにも
継承することができます。
この場合、『Slime』も『Dragon』と同じように『Monster』の
『kind = “モンスター”』というメンバー変数と
『bodyBrow』というメソッドを
継承します。
『Monster』のように継承元となるクラスを『基底クラス』
『Dragon』や『Slime』のように継承する方のクラスを『派生クラス』と呼びます。
継承は
class クラス名: 派生クラス { } |
と記述します。
実際に使ってみる
準備
それでは、継承を使ってみましょう。
まずは、以前作成した、『C# Basics』というプロジェクトを開いてください。
『C# Basics』を開いたら、継承を使うシーンを作りましょう。
Scenesフォルダの中に作成します。
ProjectウィンドウでScenesフォルダを選択しましょう。
選択した状態で『+』ボタンを押します。
色々と出てくるので、『Scene』をクリックしましょう。
すると、Scenesフォルダの中に新しくSceneが作成されます。
Sceneの名前を『Inheritance』に変更しておきましょう。
今回は『Inheritance』の中でクラスを作りたいので、Sceneを移動します。
『Inheritance』をダブルクリックしましょう。
すると、Sceceを移動することができます。
Hierarchyウィンドウを見ると、現在のSceneが『Inheritance』に変わっていますね。
次に継承を使うためのスクリプトを作っておきましょう。
Scriptsフォルダを選択してください。
選択した状態で『+』ボタンを押しましょう。
色々と出てくるので『C# Scripts』を選択します。
すると、新しくスクリプトが作成されます。
名前が確定してしまう前に『InheritanceScript』と変更します。
名前を変更したら、スクリプトを編集していきましょう。
InheritanceScriptをダブルクリックしてください。
すると、VIsual Studioが起動して、InheritanceScriptを編集できるようになります。
スクリプトはScene上にあるオブジェクトに追加することで呼び出されるので、適当に追加しておきましょう。
InheritanceScriptをMain Cameraにドラッグ&ドロップします。
すると、Main CameraにInheritanceScriptが追加されます。
継承を使ってみる
それでは、実際に継承を使ってみましょう。
今回は、先ほど説明に使った、『Monster』、『Dragon』、『Slime』という三つのクラスを作って、使ってみようと思います。
まずは、継承元となる、『Monster』クラスを作ってみましょう。
InheritanceScriptクラスの上に
class Monster { public string kind = “モンスター”; public void bodyBlow() { Debug.Log(“たいあたり”); } } |
と記述しましょう。
コードについて説明していきます。
まず、『Monster』という名前でクラスを作っています。
クラスの中には『kind』というメンバー変数があり、
その中にはString型で『モンスター』という値が格納されています。
また、メソッドとして『bodyBrow』というものがあり、
コンソールに『たいあたり』と出力するといった内容です。
次にこの『Monster』というクラスを継承した『Dragon』というクラスと『Slime』というクラスを作ってみましょう。
Monsterクラスを作った記述の下に
class Dragon : Monster { public void fireBreath() { Debug.Log(“火の息を吐く”); } } class Slime : Monster { public void recovery() { Debug.Log(“回復する”); } } |
と記述しましょう。
これらのクラスは先ほど作った『Monster』というクラスを
継承しているので、
クラス『Monster』の『kind』プロパティと
『bodyBlow』メソッドを
保持しています。
また、それぞれのクラスで独自にメソッドを持たせています。
『Dragon』の方は『fireBreath』という名前の
コンソールに『火の息を吐く』と表示させるメソッドです。
『Slime』の方は『recover』という名前の
コンソールに『回復する』と表示させるメソッドです。
それでは、DragonとSlimeのインスタンスを作って、それぞれのメンバー変数とメソッドを使ってみましょう。
まずは、Dragonの方からやっていきます。
InheritanceScriptクラスのStart関数の中に、
Dragon dragon = new Dragon(); Debug.Log(dragon.kind);dragon.bodyBlow();dragon.fireBreath(); |
と記述しましょう。
コードについて説明していきます。
まず、
Dragon dragon = new Dragon(); |
という記述では、Dragonというクラスのインスタンスを作っています。
次に
Debug.Log(dragon.kind); |
という記述ではdragonのメンバー変数、kindの値を出力します。
kindはMonsterクラスから引き継いだので『モンスター』という値が格納されています。
次に
dragon.bodyBlow(); |
という記述では、dragonのbodyBlowというメソッドを使います。
bodyBlowはMonsterクラスから引き継いだもので、
コンソールに『たいあたり』と出力します。
次に
dragon.fireBreath(); |
という記述ではDragonクラスで記述した『fireBreath』というメソッドを使います。
このメソッドではコンソールに『火の息を吐く』と出力します。
それでは、再生してみましょう。
この状態で再生したら、コンソールには、『モンスター』、『たいあたり』、『火の息を吐く』と出力されるはずです。
スクリプトを保存し、Unityエディタに戻り、再生ボタンを押しましょう。
コンソールが小さい場合は、クリックして拡大しましょう。
すると、予想通り、コンソールには『モンスター』、『たいあたり』、『火の息を吐く』と出力されているのがわかりますね。
次にSlimeクラスでも同じことをやってみましょう。
先ほどの記述の下に
Slime slime = new Slime(); Debug.Log(slime.kind); slime.bodyBlow(); slime.recovery(); |
と記述しましょう。
先ほどと同じような処理なので、説明は割愛します。
この状態で再生すると、『モンスター』、『たいあたり』、『回復する』とコンソールに表示されるはずです。
スクリプトを保存して、Unityエディタに戻り、再生ボタンを押しましょう。
コンソールを拡大してみると、予想通り『モンスター』、『たいあたり』、『回復する』とコンソールに出力されているのがわかりますね。
このように、継承を使えば、クラスのメンバー変数やメソッドを引き継いだ新しいクラスを作ることができます。
継承を扱ったついでに、今まで触れてこなかった『MonoBehaviour』について扱っておきましょう。
MonobehaviourはUnityで使うメンバー変数やメソッドが含まれたクラスです。
C# Scriptを作った時に最初から継承されています。
Start関数やUpdate関数、スクリプトをコンポーネントとしてオブジェクトに追加する仕組みなど、様々なUnityで使われる機能がこのクラスを継承することで使えるようになります。