Skip to content

Commit d4dbe61

Browse files
committed
fix: 修复序列化List集合的问题
1 parent aa91397 commit d4dbe61

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

Assets/Scripts/SerializeExtension/Editor/SerializeExtensionDrawer.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,20 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten
2929
EditorGUI.BeginProperty(position, label, property);
3030
EditorGUI.BeginChangeCheck();
3131

32-
Type fieldType = fieldInfo.FieldType;
32+
Type fieldType = null;
33+
bool isUnityObject = typeof(UnityEngine.Object).IsAssignableFrom(fieldInfo.FieldType);
34+
if (isUnityObject || fieldInfo.FieldType.IsValueType || property.propertyType != SerializedPropertyType.ManagedReference) {
35+
fieldType = fieldInfo.FieldType;
36+
}
37+
else {
38+
string[] info = property.managedReferenceFieldTypename.Split();
39+
string asseblyName = info[0], typeName = info[1];
40+
Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(item => item.GetName().Name == asseblyName);
41+
fieldType = assembly.GetType(typeName);
42+
}
43+
3344
if (fieldType.IsAbstract || fieldType.IsInterface) {
34-
ShowPolymorphismField(position, property, label);
45+
ShowPolymorphismField(fieldType, position, property, label);
3546
}
3647
else {
3748
EditorGUI.PropertyField(position, property, label, true);
@@ -62,9 +73,8 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten
6273
#region Show Polymorphism Field
6374
private readonly static Dictionary<Type, List<Type>> _subTypeDict = new();
6475

65-
private void ShowPolymorphismField(Rect position, SerializedProperty property, GUIContent label) {
76+
private void ShowPolymorphismField(Type abstractType, Rect position, SerializedProperty property, GUIContent label) {
6677
// 绘制选择框
67-
Type abstractType = fieldInfo.FieldType;
6878
List<Type> subTypes = GetSubTypes(abstractType);
6979

7080
Rect labelRect = EditorGUI.IndentedRect(new(position) {

0 commit comments

Comments
 (0)