构建System.Serializable类时不支持的类型

时间:2018-05-30 09:25:31

标签: unity3d build

当我将我的一个特定类转换为[System.Serializable]时,Unity突然抛出这个错误,没有堆栈跟踪,阻止我构建。

Unsupported type MyEnemy
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at ?)

我确实需要将这个类序列化,但我不能这样做。

一些类似的问题谈到重新附加组件来解决问题但我的班级不是一个组件。 (不会从MonoBehaviour继承)

我确实尝试过但没有成功:

#if UNITY_EDITOR
[System.Serializable]
#endif

我应该直接向Unity报告此错误吗?

编辑:根据要求:

[System.Serializable]
public class MyEnemy
{
    // Whatever I put in here, even if all [NonSerialized].
}

奇怪的是,我有其他[System.Serializable]课程正常工作,我无法弄清楚这个课程有什么不同。

使用(工作的和非工作的):

  • 作为其他班级的公共/私人会员
  • 作为List<MyEnemy>
  • 作为Dictionary<key, MyEnemy>

有什么想法吗?我一直在寻找并会更新这篇文章。

编辑2:哦,它也提升了4倍。哪个可能是领先?关于构建和场景保存。

编辑3:在编辑器日志中找到此额外行。

(Filename: C:\buildslave\unity\build\Editor/Src/Prefabs/PropertyModification.cpp Line: 118)

考虑向Unity报告此事。

1 个答案:

答案 0 :(得分:0)

您可以通过添加[NonSerialized]属性来排除不需要的字段。

某些类和结构不能序列化,例如Vector及其衍生物。

另一个例子是以下类的实例基本相同:

泛型类的实例无法序列化:

[Serializable]
public class Foo<T> { public List<T> stuff; }

此课程的实例可以:

[Serializable]
public class FooInt : Foo<int> { }

序列化属性可能不适用于非自动实现的属性

通常,与二进制格式化器统一的序列化并不是最好的选择。一个原因是向后兼容性。您可以将数据存储为纯文本或JSON。

Herehere您可以在Unity中找到保存和加载的教程。