SerializedProperty for Array not declared as an array (isArray = false)
I am making my own array type that inherits from List<> but when writing the PropertyDrawer for it, it is not listed as an array.
I have tried to recreate this issue in an empty project and it still is not working.
What makes a class classify as an array?
Has anyone been able to create a custom array and drawer in unity?
Unity Version 2020.3.18f1
Example Code TestArray.cs
[System.Serializable]
public class TestArray : List<string>
{
}
TestArrayDrawer.cs
[CustomPropertyDrawer(typeof(TestArray))]
public class TestArrayDrawer : PropertyDrawer
{
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
return EditorGUIUtility.singleLineHeight * 2;
}
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
int arraySize = property.arraySize;
//Setup rectHeight
position.height = EditorGUIUtility.singleLineHeight;
EditorGUI.LabelField(position, $"Path:{property.propertyPath},isArray:{property.isArray},Size:{arraySize}");
//Draw Decrease Size Button
Rect buttonRect = position;
buttonRect.y += buttonRect.height;
buttonRect.width = buttonRect.width / 2f;
EditorGUI.BeginDisabledGroup(arraySize < 1);
if (GUI.Button(buttonRect, "Remove"))
{
property.DeleteArrayElementAtIndex(arraySize - 1);
}
EditorGUI.EndDisabledGroup();
//Draw Increase Size button
buttonRect.x += buttonRect.width;
if(GUI.Button(buttonRect, "Add"))
{
property.InsertArrayElementAtIndex(Mathf.Max(arraySize - 1, 0));
}
}
}
ArrayTestComponent.cs
public class ArrayTestComponent : MonoBehaviour
{
public TestArray exampleArray;
}
This is what the label reads in the inspector of the ArrayTestComponent If I click add it does not change and fires an error of Invalid property to resize array
Your answer
Follow this Question
Related Questions
Load an array in editor while keeping unity running 0 Answers
[Simple question] Adding a new SerializedProperty to a SerializedObject 1 Answer
How do I copy UV variables? 2 Answers
The name 'HighScoreList' does not exist in the current context 1 Answer
assigning several positions and call array of raycasts 0 Answers