Unity:结构体内部类无法序列化显示的原因及解决办法
Unity Inspector中自定义结构体里的类无法显示的问题分析与解决
问题代码
public class TopClass { [System.Serializable] public struct WantToBeVisibleInInspector { public SomeEnum appearsInInspector; public SomeClass doesNOTAppearInInspector; } [SerializeField] private WantToBeVisibleInInspector[] meWant; }
问题现象
在Unity的Inspector面板中,SomeEnum可正常显示,但SomeClass对应的字段无法显示。
原因解析
- 枚举类型在C#里默认具备可序列化特性,Unity的序列化系统能直接识别,所以
SomeEnum字段能正常出现在Inspector里。 - 自定义的普通C#类(比如
SomeClass)默认不被Unity序列化系统识别,必须手动标记[System.Serializable]特性,否则即使放在可序列化的结构体里,也无法在Inspector中显示。
解决方法
给SomeClass添加[System.Serializable]特性即可,示例如下:
[System.Serializable] public class SomeClass { // 这里可以定义类的成员变量,比如: public int exampleInt; public string exampleString; }
注意:如果SomeClass是继承自MonoBehaviour、ScriptableObject这类Unity自带的可序列化基类,不需要额外加[Serializable],因为这些基类已经自带序列化支持。
内容的提问来源于stack exchange,提问作者IndividualGames
相关产品推荐
相关产品推荐

