【Unity】インターフェースをシリアライズ可能にするSerializeReferenceを便利にするSubclassSelector改
そもそもSerializeReference
属性って?
Unity 2019.3から使用できるようになったSerializeReference
属性によって、インターフェースや抽象クラスの参照がシリアライズできるようになりました。
Unityのエディターでインターフェースを編集できるようになる革命が起きたのです。
インターフェースを実装した型を選択するための SubclassSelector
属性
とはいってもSerializeReference
単体では、あまり使い勝手が良くありませんでした。
そこで、@tsukimi_nekoさんが作ってくださったSubclassSelector
属性によって、エディターのポップアップからインターフェースを実装したクラスを指定できるようになりました。
こんな感じでインターフェースに対してSerializeReferenceとSubclassSelectorを付与することで、
using UnityEngine;
public class CommandTestClass : MonoBehaviour {
[SerializeReference, SubclassSelector]
ICommand command;
}
そのインターフェースを実装したクラスがポップアップで表示され、指定できるようになります。
https://qiita.com/tsukimi_neko/items/7922b2433ed4d8616cce
これがメチャクチャ便利!
SubclassSelector
を改良しました
実際にプロジェクトでSubclassSelector
を使用している中で、細かい使い勝手が気になったので、いくつかの改良を行いました。
型検索機能
ザックリとした型検索ができるようになりました。型が多くなってくると便利。
ついでにGameObjectのAddComponentメニュー準拠のUIになりました。
AddTypePopup
属性による表示名の上書き機能
/
をセパレータとして使用できるので、型をグループ分けして整理することができます。
UnityコンポーネントのAddComponentMenu
属性に相当します。
// メニューを設定
[AddTypeMenu("Example/Add Type Menu Command")]
[Serializable]
public class AddTypeMenuCommand : ICommand {
public void Execute () {
Debug.Log("Execute AddTypeMenuCommand");
}
}
GitHub
GitHubにリポジトリとして公開してあります。
Author And Source
この問題について(【Unity】インターフェースをシリアライズ可能にするSerializeReferenceを便利にするSubclassSelector改), 我々は、より多くの情報をここで見つけました https://qiita.com/makihiro_dev/items/26daeb3e5f176934bf0a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .