c# - serializedObject FindProperty 返回 null

标签 c# unity3d serialization

我试图在编辑器中获取通用列表属性,但我得到的是 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 设置为 null。

最佳答案

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

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

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

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

那么你的列表会变成:

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

关于c# - serializedObject FindProperty 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56964880/

相关文章:

c# - 如何使用 python 和 selenium 查找 div 内的按钮

c# - 如何获取DeleteUrlCacheEntry()错误代码? (或者有关为什么特定删除不起作用的其他信息)?

c# - 全变色算法

c# - 将对象返回到池中

c - 如何在网络上对 float 进行序列化?

c# - 在单个 LINQ 语句中使用 .Select 和 .Where

c# - Cassandra 与 C#

c# - 同步从 Unet/Unity 5 中的另一个可交互对象更改的非玩家对象转换?

c# - 将对象保存到没有序列化属性的文件的最简单方法是什么?

javascript - 在 Node.js 套接字中写入和 'data' 事件