[Unity]Startイベントの継承の振る舞い

実装方法

Startイベントをそれぞれ実装

派生クラスだけゲームオブジェクトにアタッチします

基本クラス

プロジェクトウィンドウに置いたまま
サンプルの基本クラスは全て同じ

using UnityEngine;

public abstract class MobStatus : MonoBehaviour
{
    protected virtual void Start()
    {
        Debug.Log("基本クラス");
    }
}

派生クラス

ゲームオブジェクトにアタッチ
サンプルの派生クラスは全て同じ

using UnityEngine;

public class PlayerStatus : MobStatus
{
    private void Start()
    {
        Debug.Log("派生クラス");
    }
}

結果

派生クラス

Startイベントをそれぞれ実装、ただし派生クラスのStartイベントは空

基本クラス

using UnityEngine;

public abstract class MobStatus : MonoBehaviour
{
    protected virtual void Start()
    {
        Debug.Log("基本クラス");
    }
}

派生クラス

using UnityEngine;

public class PlayerStatus : MobStatus
{
    private void Start()
    {

    }
}

結果

表示なし

Startイベントをそれぞれに実装、派生クラスに基本クラスのStartイベントを呼ぶステートを記述

基本クラス

using UnityEngine;

public abstract class MobStatus : MonoBehaviour
{
    protected virtual void Start()
    {
        Debug.Log("基本クラス");
    }
}

派生クラス

using UnityEngine;

public class PlayerStatus : MobStatus
{
    private void Start()
    {
        base.Start();
        Debug.Log("派生クラス");
    }
}

結果

基本クラス
派生クラス

Startイベントを基本クラスに実装、派生クラスは空

基本クラス

using UnityEngine;

public abstract class MobStatus : MonoBehaviour
{
    protected virtual void Start()
    {
        Debug.Log("基本クラス");
    }
}

派生クラス

using UnityEngine;

public class PlayerStatus : MobStatus
{
}

結果

基本クラス

考察

派生クラスのStartイベントを空実装した時、基本クラスのStartイベントは実行されません

派生クラス自体を空とした場合、基本クラスのStartイベントは実行されます

C#,Unity

Posted by hidepon