次の項目は別ページに分割しました。
関連ページ:
シリアライズドオブジェクト
SerializedObject
クラスは、シリアル化されたオブジェクトを操作し、そのプロパティやフィールドへのアクセスを提供するためにエディター拡張で使用する。
カスタムエディターを定義した場合、その内部では対象のシリアル化されたオブジェクトに対して serializedObject
プロパティを介してアクセスできる。オブジェクトのプロパティは FindProperty
メソッドにより得られる SerializedProperty
クラスを介してアクセスする。
ドキュメント:
UnityEditor.SerializedObject | Unity スクリプトリファレンス [公式]
導入
参考:
使い方
[CustomEditor(typeof(ExampleClass))]
class ExampleClassEditor : Editor
{
SerializedProperty prop;
void OnEnable() {
prop = serializedObject.FindProperty("propOfExampleClass");
}
public override void OnInspectorGUI() {
serializedObject.Update();
EditorGUILayout.PropertyField(prop);
serializedObject.ApplyModifiedProperties();
}
}
Code language: C# (cs)
参考:
Serialized Object の勘所をまとめてみる | LIGHT11
非 public リストの各要素に名前を付ける | ミドリ黄のプログラミングメモノート
object field getting serialized object in Custom Editor – Unity Answers
Custom Inspector for Scriptable Object not working – Stack Overflow
I can’t change the value of a serialized variable in Custom Inspector – Stack Overflow
FindProperty retuns null – Stack Overflow
Null Reference Exception when SerializedProperty has any accessor – Stack Overflow
全てのプロパティを表示する
参考:
Serialized Object のもつ全てのプロパティを描画する | LIGHT11
Serialized Object を使用して指定されたオブジェクトのすべてのプロパティのパス名を抽出するエディタ拡張 | コガネブログ
Editor Window で独自クラスの配列を行う | 万年素人から Hacker への道
シリアル化
フィールド
public
フィールド、または、SerializedField
属性が付与されたフィールドがシリアライズの対象となる。static
、const
、readonly
が指定されたフィールドはシリアライズされない。
タイプ
- プリミティブデータ型 (
int
、float
、double
、bool
、string
など) Enum
型- ビルトイン型
Vector2
、Vector3
、Vector4
、Rect
、Quaternion
、Matrix4x4
、Color
、Color32
、LayerMask
、AnimationCurve
、Gradient
、RectOffset
、GUIStyle
Object
から派生したクラスへの参照Serializable
属性が付与されたカスタムクラス、または、カスタム構造体- 抽象クラスはシリアライズされない
- ジェネリッククラスはシリアライズされない
- ポリモーフィズムはサポートされない
ドキュメント:
スクリプトのシリアル化 | Unity マニュアル [公式]
ビルトインのシリアル化 | Unity 2020.3 マニュアル [公式]
テキストシリアル化ファイルの形式 | Unity マニュアル [公式]
参考:
シリアライズされたフィールドの値はどこにあるの? | エクスプラボ
Custom Editor of List don’t show properties but a GameObject – Stack Overflow
シリアライズドプロパティ
メンバ変数
- displayName
- propertyType
- floatValue
- intValue
- boolValue
- stringValue
- vector2Value
- vector3Value
- colorValue
- arraySize
ドキュメント:
UnityEditor.SerializedProperty | Unity スクリプトリファレンス [公式]
SerializedObject.FindProperty | Unity スクリプトリファレンス [公式]
SerializedProperty.FindPropertyRelative | Unity スクリプトリファレンス [公式]
参考:
Why `SerializedProperty.Update` is called in the beginning? – Unity Answers
SerializedProperty doesn’t update displayed value in Editor – Unity Answers
Trying to access properties inside a class with SerializedProperty not working – Unity Forum
プロパティフィールド
ドキュメント:
EditorGUILayout.PropertyField | Unity スクリプトリファレンス [公式]
参考:
インスペクター拡張の基礎 | Unity でコードからGUIを作る (kumaS)
スクリプタブルオブジェクト
ドキュメント:
UnityEngine.ScriptableObject | Unity スクリプトリファレンス [公式]
参考:
エディタ拡張で自作クラスの Serialized Object 取得 – teratail
配列
参考:
シリアライズ化されたインスタンスを配列として扱う | ソフトライム
編集/保存
Undo.RegisterCompleteObjectUndo
: アンドゥ用にオブジェクトの状態を保存するEditorUtility.SetDirty
: 編集が未保存であることをマークするAssetDatabase.SaveAssets
: 未保存のアセット変更を全て保存するAssetDatabase.SaveAssetIfDirty
: 指定したアセットの未保存の変更を保存する (※ 2020.3.16 ~)
ドキュメント:
Undo.RegisterCompleteObjectUndo | Unity スクリプトリファレンス [公式]
EditorUtility.SetDirty | Unity スクリプトリファレンス [公式]
AssetDatabase.SaveAssets | Unity スクリプトリファレンス [公式]
AssetDatabase.SaveAssetIfDirty | Unity スクリプトリファレンス [公式]
参考:
AssetDatabase.SaveAssetIfDirty – 指定したアセットだけを保存する方法 – Qiita
シリアライズ対象の値を直接編集する際の挙動をちゃんと理解する | LIGHT11
Scriptable Object の変更した値が戻ってしまう場合の対処法 | kan のメモ帳
EditorUtility.SetDirty のなく頃に | 徳島ゲーム開発ごっこ技術ブログ
オブジェクト参照 (objectReferenceValue)
objectReferenceValue
から値を取得すると UnityEngine.Object
型を返すので本来の型にキャストして使用する。
ドキュメント:
SerializedProperty.objectReferenceValue | Unity スクリプトリファレンス [公式]
参考:
GameObject を Serialized Property へ設定する – Qiita
Missing があるアセットを検索する | WonderPlanet Developers’ Blog
Get a general object value from SerializedProperty? – Unity Forum
Trying to access properties inside a class with SerializedProperty not working – Unity Forum
After assigned to SerializedProperty.objectReferenceValue it is still null – Unity Forum
objectReferenceValue in SerializedProperty – Unity Answers
How to properly check serializedProperty.objectReferenceValue for null? – Unity Answers
SerializedProperty is null (Property Drawer) – Unity Answers
Help with SerializedProperty.ObjectReferenceValue – Unity Answers
SerializedProperty always null with Property Drawers – Stack Overflow
カスタムクラス
参考:
自作クラス型の Serialized Property に値をセットする | LIGHT11
隣の Serialized Property を知りたくて | 徳島ゲーム開発ごっこ 技術ブログ
Convert Serialized Property to Custom Class – Unity Answers
マネージド参照 (managedReferenceValue)
ドキュメント:
SerializedProperty.managedReferenceValue | Unity スクリプトリファレンス [公式]
参考:
SerializedProperty.managedReferenceValue の値を取得する – Qiita
boxedValue
※ 2022.1 ~
ドキュメント:
SerializedProperty.boxedValue | Unity 2022.1 スクリプトリファレンス [公式]
参考:
Null Reference when trying to retreive boxed value from Serialized Property – Unity Forum
Writing drawers for classes with properties that can’t be bound – Unity Forum
ジェネリッククラス (Generic)
ドキュメント:
カスタム製のシリアル化 | Unity 2020.3 マニュアル [公式]
参考:
Inspector で扱える Dictionary – Qiita
ジェネリッククラスを Inspector に表示するにはどうすればいいの? | ケットシーウェア
Unity 2020.1 で Generic な型がシリアライズ可能になりました | LIGHT11
Generic なクラスをシリアライズできた | テラシュールブログ
シリアライズ可能なコレクション | wizaman’s blog
自前のクラスをインスペクタから編集できるようにする | ftvlog
generics serialization – Unity Forum
serializable class using generics – Unity Answers
まとめ
インスペクター拡張の基礎 | Unity でコードから GUI を作る (kumaS)
Serialized Object の勘所をまとめてみる | LIGHT11
Serializable Dictionary (azixMcAze)
入手:
Serializable Dictionary | Unity Asset Store [Official]
リポジトリ:
azixMcAze/Unity-SerializableDictionary: Serializable Dictionary – GitHub
フォーラム:
Serializable Dictionary | Unity Forum
Serialized Dictionary (Prastiwar)
リポジトリ:
Prastiwar/UnitySerializedDictionary: Serialized Dictionary – GitHub
参考:
Serialized Dictionary – Inspector で編集できる Dictionary | コガネブログ
Serializable Dictionary (baba-s)
リポジトリ:
baba-s/UniSerializableDictionary: Dictionary を Inspector で設定できるようにするクラス – GitHub
Serializable Collections (neuecc)
リポジトリ:
参考:
Serializable Dictionary – 高速に辞書復元するためのライブラリ | neue cc
Scriptable Dictionary
動画:
入手: