开发平台:Unity 编程平台:Visual Studio 2017以上 使用语言:C# ?
问题描述
??SerializedObjectNotCreatableException: Object at index 0 is null ?
问题剖析
- 该问题报错以为程序序列化过程中出现空值无法处理与赋值造成的。
具体案例如下:
[Tooltip("X轴向最大数")] private int maxXCount = 64;
[Tooltip("X轴向文本内容")] public static string xCount;
private void OnGUI()
{
xCount = EditorGUILayout.TextField("X轴大小", xCount);
this.maxXCount = Convert.ToInt32(xCount);
...
}
??这是一个拓展编辑器脚本的部分代码内容。其中EditorGUILayout.TextField(Title, String) 用于在EditorWindow 上绘制文本输入框。【可参考继承Monobehaviour 的public string str; 在Inspector下的公开】。脚本经历一下步骤:
- 建立 TextField 窗口
- 将 TextFiled 文本内容转换为 Int 数据类型并存储于
maxXCount 中
??值得注意的是,OnGUI() 是固定时间刷新EditorWindow上的数值。在初次打开EditorWindow 面板时,TextField 窗口内的数据时为空(string.Empyty ),对这种数据无法使用Convert.ToInt32() 进行转换。
解决手段:
一、直接解决(根据实际逻辑情况处理,不一定有效解决)
??检查代码是否出现类似赋值于转置情况。预先赋值。例如:在 xCount = EditorGUILayout.TextField("X轴大小", xCount); 前添加 xCount = maxXCount.ToString(); 进行赋值。
二、替换代码逻辑思路(同上)
??修改EditorGUILayout.TextField(Title, String) 为EditorGUILayout.TextField(String) 或如下:
this.maxXCount = Convert.ToInt32(GUILayout.TextField(this.maxXCount.ToString()));
备注:该方法在EditorWindow 上可使用,但无法添加文本标题。仅使用GUILayout.Label(Title) 来完成排版。对排版界面上友强迫性的人不会很友好。
|