本日は Unity の小ネタ枠です。
以前調査を行った以下の記事から更に Inspector ビューの動作について確認したかったことがあったので記事に残します。
bluebirdofoz.hatenablog.com
今回は abstract 修飾子で継承先で共通のメソッドの実装を強制する MonoBeheviour クラスを Inspector の SerializeField で指定すれば、共通のメソッド呼び出しで異なる MonoBehaviour クラスの処理を呼び出せるかどうか確認しました。
サンプルコード
以下のような abstract 修飾子で継承先で共通のメソッドの実装を強制する MonoBeheviour クラスと、実際にそれを継承した2つのクラスを作成しました。
・BaseClass4.csp
using UnityEngine; public abstract class BaseClass4 : MonoBehaviour { /// <summary> /// ログ表示 /// </summary> public abstract void ShowLogMessage(); }
・InherClass4Hello.cs
using UnityEngine; public class InherClass4Hello : BaseClass4 { public override void ShowLogMessage() { Debug.Log("HelloWorld!"); } }
・InherClass4Goodbye.cs
using UnityEngine; public class InherClass4Goodbye : BaseClass4 { public override void ShowLogMessage() { Debug.Log("GoodbyeWorld!"); } }
更に、上記のベースクラスを Inspector の SerializeField で指定してメソッドを実行する以下のテスト用クラスを用意しました。
・TestInherClass4.cs
using UnityEngine; public class TestInherClass4 : MonoBehaviour { [SerializeField] private BaseClass4 greetingCompoonent; void Start() { greetingCompoonent.ShowLogMessage(); } }
動作確認
以下のサンプルシーンを作成しました。
異なる継承クラスをそれぞれアタッチしたゲームオブジェクトを用意し、テスト用クラスで参照先を切り替えてみます。
参照先を切り替えてシーンを再生して見ました。
それぞれの実装メソッドの処理が呼ばれていることが確認できます。
このように abstract と継承を利用すれば Inspector ビューで参照先を切り替えて異なる処理を持つコンポーネントを差し替えて利用することができました。