コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】【Odin Inspector】interface を Inspector でアタッチできるようにする方法

はじめに

 
Odin Inspector を Unity プロジェクトに導入することで
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 コンポーネントを用意して、
これらを Inspector でアタッチできるようにしたい場合、

using Sirenix.OdinInspector;

public class Example : SerializedMonoBehaviour
{
    public ICharacter m_character;

    private void Awake() => m_character.Log();
}

MonoBehaviour ではなく SerializedMonoBehaviour を継承したコンポーネントを作成して
public や SerializeField で ICharacter の変数を用意すると

f:id:baba_s:20191003193948g:plain

f:id:baba_s:20191003193956g:plain

Player コンポーネントや Enemy コンポーネントを Inspector でアタッチできるようになります

このように Odin Inspector を Unity プロジェクトに導入することで
interface を Inspector でアタッチできるようになります