MRが楽しい

MRやVRについて学習したことを書き残す

UnityでMonoBehaviourを継承したabstractクラスを継承した場合の動作を試す

本日は Unity の小ネタ枠です。
以下の前回記事の追加で abstract 修飾子を設定したクラスを利用した場合を確認したので記事に残します。
bluebirdofoz.hatenablog.com

abstract修飾子

abstract 修飾子はその修飾対象の実装が不完全であることを示します。
例えば本修飾子をメソッドに指定すると、派生した継承クラス側での実装を強制することができます。
learn.microsoft.com

abstract修飾子を使った場合

前回記事のサンプルコードに abstract 修飾子を追加した以下のサンプルスクリプトを作成しました。
・BaseClass3.cs

using UnityEngine;

public abstract class BaseClass3 : MonoBehaviour
{
    void OnEnable()
    {
        OnEnableTask();
    }

    void Update()
    {
        UpdateTask();
    }
    
    void OnDisable()
    {
        OnDisableTask();
    }

    protected abstract void OnEnableTask();

    protected abstract void UpdateTask();

    protected abstract void OnDisableTask();

    protected void ShowDebugLog(string message)
    {
        Debug.Log(message);
    }
}

・InherClass3.cs

public class InherClass3 : BaseClass3
{
    protected override void OnEnableTask()
    {
        ShowDebugLog("InherClass : OnEnable");
    }
    
    protected override void UpdateTask()
    {
        ShowDebugLog("InherClass : Update");
    }
    
    protected override void OnDisableTask()
    {
        ShowDebugLog("InherClass : OnDisable");
    }
}

継承クラスをシーンにアタッチして動作を確認します。
以下の通り、継承クラスで Update, OnEnable, OnDisable などの Unity のライフサイクルのタイミングでオーバーライドした関数が呼び出されて動作しました。

abstract 修飾子を利用しているため、メソッドを実装していない場合はエラーが発生します。
このため、継承側での実装を強制できます。