@@ -260,6 +260,25 @@ private void DoDraggingAndSelection()
260260 }
261261 }
262262
263+ protected bool TryGetNewValueOverride ( SerializedProperty property , int index , out object newValue )
264+ {
265+ if ( overrideNewElementCallback != null )
266+ {
267+ newValue = overrideNewElementCallback ( index ) ;
268+ return true ;
269+ }
270+
271+ if ( property . propertyType == SerializedPropertyType . ManagedReference ||
272+ property . propertyType == SerializedPropertyType . Generic )
273+ {
274+ newValue = null ;
275+ return true ;
276+ }
277+
278+ newValue = default ;
279+ return false ;
280+ }
281+
263282 protected abstract void DoListMiddle ( ) ;
264283
265284 protected abstract void DoListMiddle ( Rect middleRect ) ;
@@ -457,27 +476,24 @@ public void CutKeyboardFocus()
457476
458477 public void AppendElement ( )
459478 {
460- var newSize = Size . intValue + 1 ;
461- Size . intValue = newSize ;
479+ var newSize = List . arraySize + 1 ;
480+ List . arraySize = newSize ;
462481 Index = newSize - 1 ;
463482
464483 List . serializedObject . ApplyModifiedProperties ( ) ;
465484 var property = List . GetArrayElementAtIndex ( Index ) ;
466- var fieldInfo = property . GetFieldInfo ( ) ;
467- if ( fieldInfo == null )
485+ if ( ! TryGetNewValueOverride ( property , Index , out var newValue ) )
468486 {
469487 return ;
470488 }
471489
472- if ( overrideNewElementCallback != null )
473- {
474- var newValue = overrideNewElementCallback ( Index ) ;
475- property . SetProperValue ( fieldInfo , newValue , false ) ;
476- }
477- else
490+ var fieldInfo = property . GetFieldInfo ( ) ;
491+ if ( fieldInfo == null )
478492 {
479- property . SetProperValue ( fieldInfo , null , false ) ;
493+ return ;
480494 }
495+
496+ property . SetProperValue ( fieldInfo , newValue , false ) ;
481497 }
482498
483499 public void RemoveElement ( )
@@ -660,7 +676,7 @@ public virtual void DrawStandardHeader(Rect rect)
660676 sizeValue = Mathf . Max ( EditorGUI . DelayedIntField ( rect , sizeValue , Style . sizePropertyStyle ) , 0 ) ;
661677 if ( EditorGUI . EndChangeCheck ( ) )
662678 {
663- property . intValue = sizeValue ;
679+ List . arraySize = sizeValue ;
664680 }
665681
666682 EditorGUI . EndProperty ( ) ;
0 commit comments