public override void OnInspectorGUI() { serializedObject.Update(); _target_object.OnAfterDeserialize(); bool dirty = false; string pre_name = _script_name_property.stringValue; EditorGUILayout.DelayedTextField(_script_name_property); if (pre_name != _script_name_property.stringValue || _current_file_name != _script_name_property.stringValue) { if (GetFieldList(_script_name_property.stringValue)) { dirty = true; } else { _script_name_property.stringValue = pre_name; } _current_file_name = _script_name_property.stringValue; } UpdateValidate(); EditorGUI.BeginChangeCheck(); foreach (var item in lst_test) { FiledData data = _lst_info.Find(m => m.filed_name == item.field_name); if (!item.is_arry) { data.obj = EditorGUILayout.ObjectField(item.field_name, data.obj, item.type, true); } else { data.arr = data.arr ?? new List <Object>(); if (!_dic_list_editor.TryGetValue(item.field_name, out ListEditor list)) { list = new ListEditor(data.arr, item.type, item.field_name); _dic_list_editor[item.field_name] = list; } list.DoLayoutList(); } } if (EditorGUI.EndChangeCheck() || dirty) { ApplyModifycation(); } }
public void OnAfterDeserialize() { if (_field_names == null) { return; } int value_index = 0; int array_index = 0; foreach (var item in _field_names) { FiledData info = ListFiledInfo.Find(m => m.filed_name == item); if (info == null) { info = new FiledData() { filed_name = item }; ListFiledInfo.Add(info); } if (_field_arrays.Length > array_index && _field_arrays[array_index].Next == value_index) { if (info.arr == null) { info.arr = new List <Object>(); } else { info.arr.Clear(); } info.arr.AddRange(_field_values.ToList().GetRange(value_index, _field_arrays[array_index].Count)); value_index += _field_arrays[array_index].Count; array_index++; } else { info.obj = _field_values[value_index]; value_index++; } } ListFiledInfo.RemoveAll(m => !_field_names.Contains(m.filed_name)); }