前提・実現したいこと
純粋なC#ではまた挙動が違うみたいなので、Unityでの質問です。
Serializable属性とはどういったものでしょうか?
調べたり、試したりした限りでは、以下のように認識しているのですが、合っていますか?
・Serializable属性を付与したクラスは、全てのフィールドにSerializeField属性を付与したように、 インスペクタで全てのフィールドを表示させることができる。ただし、フィールドはpublicにする必要がある。 ・MonoBehaviourを継承しないクラスに付与させる属性で、Serializable属性を付与したクラス自体も、 他のMonoBehaviour継承クラスのSerializeFieldで参照させる必要がある。
間違っている点や、補足する点などありましたら教えていただきたいです。
ご教示お願いします。
試したこと
以下のように実装することで、PickupObjクラスのインスペクタで、Itemクラスのフィールドが表示されることが確認できました。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5[System.Serializable] 6public class Item 7{ 8 public enum Type 9 { 10 Cube, 11 Ball 12 } 13 14 public Type type; 15 public Sprite sprite; 16}
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class PickupObj : MonoBehaviour 6{ 7 [SerializeField] Item item; 8}
また、ItemクラスにMonoBehaviourを継承させると、Itemクラスのフィールドがインスペクタで表示されなくなってしまいました。
Serializable属性は、MonoBehaviourを継承しないクラスに付与させる属性ということでしょうか?
そうすると、このItemクラスのフィールドを表示させるには、
他のMonoBehaviour継承クラスのSerializeFieldでこのItemクラス自体も参照させなければならなくなるということでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。