//========== This is in one script called PlayerController ========================

public class PlayerController : MonoBehaviour
{    
    [SerializeField]
    private GameObject[] playerBodyParts;
}

//=================================================================================

//========== This is all in one script called PlayerControllerInspector ===========
[CustomEditor(typeof(PlayerController))]
public class PlayerControllerInspector : Editor
{
    public override void OnInspectorGUI()
    {
        serializedObject.Update();
        EditorList.Show(serializedObject.FindProperty("playerBodyParts"));
        EditorGUILayout.PropertyField(serializedObject.FindProperty("test"));
        serializedObject.ApplyModifiedProperties();
    }
    
}

public static class EditorList
{
	public static void Show (SerializedProperty list) {
	    EditorGUILayout.PropertyField(list, false);
	    list.FindPropertyRelative("Array.size").arraySize = 15;
	    
	    EditorGUI.indentLevel += 2;
	    if(list.isExpanded) 
		    for (int i = 0; i < list.arraySize; i++)
			    EditorGUILayout.PropertyField(list.GetArrayElementAtIndex(i));
	    EditorGUI.indentLevel -= 2;
	    
	}
}
//===================================================================================