はじめに
「Serializable Interface」を Unity プロジェクトに導入することで
MonoBehaviour の参照を Interface で Inspector に設定できるようになります
使用例
public interface ICharacter { void Log(); }
たとえば ICharacter インタフェースが存在し、
using UnityEngine; public class Player : MonoBehaviour, ICharacter { public void Log() => Debug.Log( "Player" ); }
using UnityEngine; public class Enemy : MonoBehaviour, ICharacter { public void Log() => Debug.Log( "Enemy" ); }
ICharacter インタフェースを実装した
Player と Enemy という MonoBehaviour が存在し、
Player と Enemy がそれぞれアタッチされたゲームオブジェクトがシーンに存在しており
これらを ICharacter インタフェースで Inspector に設定できるようにしたい場合、
using TNRD; using UnityEngine; public class Example : MonoBehaviour { public SerializableInterface<ICharacter> m_character; private void Awake() { m_character.Value.Log(); } }
上記のように SerializableInterface<ICharacter>
という型でフィールドを定義します
すると ICharacter インタフェースを実装している MonoBehaviour を
Inspector で設定できるようになります
Player コンポーネントを設定した場合は Player.Log が、
Enemy コンポーネントを設定した場合は Enemy.Log が
ICharacter インタフェース経由で呼び出されることが確認できます