serializedObject FindProperty调整为null

时间:2019-07-10 06:51:10

标签: c# unity3d serialization

我试图在编辑器中获取通用列表属性,但是尽管我已经在目标脚本中对其进行了初始化,但我却获得了空值。

public class GameManager : MonoBehaviour
{
   [SerializeField]
   public List<Bot<BotType1>> Bots = new List<BotCar<BotType1>>();
}

[CustomEditor(typeof(GameManager))]
GameManagerEditor : Editor
{
   private SerializedProperty botsProperty;

   void OnEnable()
   {
      botsProperty = serializedObject.FindProperty("Bots");
   }
}

我得到botsProperty为空。

1 个答案:

答案 0 :(得分:1)

Unity只能序列化可序列化类型的列表-来自Manual

您的列表公共List<Bot<BotType1>> Bots源自具有通用参数的Bot<T>,这意味着它不可序列化。这意味着列表Bot<BotType1>中的类未在任何地方设置为可序列化。

要获得结果,您应该将其设置为Serializable。

[Serializable] public class BotOfType1 : Bot<BotType1>{}

然后您的列表将变为:

public class GameManager : MonoBehaviour
{
   [SerializeField]
   public List<BotOfType1> Bots = new List<BotOfType1>();
}