single.php

Unity 継承したクラスで親クラスのStart関数が実行されない場合の対処法

Unityで、親クラスを継承したクラスに Start 関数を実装した際に、親クラスの Start 関数が実行されなくなる現象にハマったので対処法を備忘録的に投稿します。

継承したクラスのStart関数

今回はハマったのは、Start関数を実装したクラスを継承したクラスを作ります。

例えば、こんな感じで[Class1]クラスを作ります。

using UnityEngine;

public class Class1 : MonoBehaviour
{
    protected void Start()
    {
        Func1();
    }

[Class1]を親クラスにして[Class2]を作ります。

using UnityEngine;

public class Class2 : Class1
{
    protected void Start()
    {
        Func2();
   }        
}

この状態で実行すると[Func2]は実行されますが、[Func1]は実行されません。

仮想化と親クラスの関数を呼び出し

親クラスの関数を上書きしてしまうのが原因のようです。

なので、親クラスの関数を仮想化して、子クラスから親クラスを呼び出します。

例えば、こんな感じで親クラスの[Start]を仮想関数にします。

using UnityEngine;

public class Class1 : MonoBehaviour
{
    protected virtual void Start()
    {
        Func1();
    }

[Class1]を継承した[Class2]で親クラスの Start 関数を呼び出します。

using UnityEngine;

public class Class2 : Class1
{
    protected void Start()
    {
        base.Start();
        Func2();
   }        
}

この状態で実行すると[Func1]は実行され[Func2]は実行されます。

まとめ

今回は短い記事ですが、親クラスを継承したクラスに Start 関数を実装した際に、親クラスの Start 関数が実行されなくなる現象の対処法について書きました。

継承したクラスで Start 関数を作ってしまうと、親クラスの関数を上書きしてしまうため実行されなくなるのが原因です。

親クラスの Start 関数を実行させるには、仮想関数にして継承したクラスの Start 関数から呼び出す形に変更します。

Unityで継承したクラスの Start 関数が実行されない人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です