首页 > 解决方案 > serializedObject FindProperty 返回 null

问题描述

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

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空了。

标签: c#unity3dserialization

解决方案


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

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

要实现您的结果,您应该将其设置为可序列化。

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

然后您的列表将变为:

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

推荐阅读