以下の内容はhttps://bluebirdofoz.hatenablog.com/entry/2024/12/25/232314より取得しました。


SerializableInterfaceを使ってInspectorでインタフェースを指定する

本日はUnityの小ネタ枠です。
SerializableInterfaceを使ってInspectorでインタフェースを指定する方法です。

Unity3D-SerializableInterface

Unity3D-SerializableInterfaceは個人の方が公開しているインターフェイスをシリアル化できるようにするパッケージです。
本パッケージを利用するとInspectorからインタフェースを指定してコンポーネントの参照を設定できます。
github.com

本パッケージをインポートして以下のようにSerializableInterfaceでインタフェースを指定したプロパティを作成します。

[SerializeField]
private SerializableInterface<IMyInterface> mySerializableInterface;

SerializableInterfaceのインポート

SerializableInterfaceはOpenUPMで公開されているのでそこからダウンロード可能です。
メニューから[Edit -> Project Settings..]を開き、[Package Manager]タブを開きます。

[New Scope Registry]にOpenUPMの参照先のURLとSerializableInterfaceのScopeを設定して[Save]します。

Name:任意の名前
URL:https://package.openupm.com
Scope:net.tnrd.serializableinterface

次にメニューから[Window -> PackageManager]を選択して PackageManager ウィンドウを開きます。

[Packages]から[My Registries]を選択します。

SerializableInterfaceのパッケージが表示されるので選択して[install]を実行します。

これでSerializableInterfaceをインポートできました。

サンプルスクリプト

試しに以下の同じインタフェースを持つ2つのコンポーネントとそれをInspectorから指定するコンポーネントを作成しました。

共通インタフェース
public interface IDebugMessage
{
    void ShowDebugMessage();
}
インタフェースを持つコンポーネント
using UnityEngine;
public class DebugMessageEn : MonoBehaviour, IDebugMessage
{
    public void ShowDebugMessage()
    {
        Debug.Log("Hello, World!");
    }
}
using UnityEngine;
public class DebugMessageJa : MonoBehaviour, IDebugMessage
{
    public void ShowDebugMessage()
    {
        Debug.Log("こんにちは、世界!");
    }
}
SerializableInterfaceを利用するコンポーネント
using TNRD;
using UnityEngine;
public class SerializableInterfaceTest : MonoBehaviour
{
    [SerializeField]
    // SerializableInterface<T>を使ってインターフェースをシリアライズする
    private SerializableInterface<IDebugMessage> debugMessage;

    void Start()
    {
        // インスタンス.Valueでインターフェースの実装を取得できる
        debugMessage.Value.ShowDebugMessage();
    }
}

以下のようにシーンにコンポーネントを配置しました。

以下の通りInspectorから共通のインタフェースでコンポーネントの参照を設定できます。




以上の内容はhttps://bluebirdofoz.hatenablog.com/entry/2024/12/25/232314より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14