はじめに
この記事はHamster Output Advent Calendar 2024の22日目の記事です!
今さらですが、継承をあまり使ったことが無かったので勉強したいと思います。
参考にしたリンク
継承って
1つのスクリプトを元に新しいスクリプトを作ることができる機能で、処理を再利用したい時に使う...ふむふむ何で今まで使って無かったんだ...自分は?
UnityだとMonoBehaivourとかまさにそうですね。StartとかUpdateを色んな場所で再利用してます。
試しに作ってみる
・継承元を作る
ここで、継承で使うprotectedというアクセス修飾子やvirtualというキーワードがでてきます。
using UnityEngine;
public class TestBase : MonoBehaviour
{
protected void TestMethod()
{
Debug.Log("TestBase TestMethod");
}
public virtual void Log()
{
Debug.Log("TestBase Log");
}
}
・protected
継承先ではpublicとして扱い、それ以外ではprivateとして扱われる
・virtual
継承先で上書き変更ができる
・継承先を作る
そして継承元を利用するクラスを作りました。Unity公式が出しているデザインパターンのサンプルでSingletonも継承でSingletonにすることができるというのもありました。
継承して面白いなと思ったのが継承元の継承先の内容が使える事ですかね...Testクラスが継承しているのはTestBase何ですが、MonoBehaviourのメソッドが使えるんですよね...
変数を継承元に用意しても、継承先で利用することも可能...だと...便利
public class Test : TestBase
{
private void Start()
{
// 継承元のメソッドを呼び出す
TestMethod();
Log();
}
private void Update()
{
}
// Baseのメソッドを上書きした
public override void Log()
{
Debug.Log("Test Log");
}
}
他クラスからの参照方法
TestBaseを元としているので、TestBaseを型にしてTestを取得することもできます。
public class Banana : MonoBehaviour
{
private void Start()
{
TestBase testBase = GetComponent<Test>();
}
}
まとめ
再利用したい時に継承は物凄く使いやすい。ただ、継承元を少し改良したいとなった時に、継承しているクラスが多いと変更が難しくなりそうだと感じた。