Show scriptable objects parameter into an array

Hi guys,
I was tring to make a custom inspector for my project. but i encounter a problem in disposition of the fields.

What i have :

What i wanted :
I have an array with scriptable objects, each of them have propeties, and i whant to show them just below the array field.
Just like that :


Sry for the draw it’s not verry pretty but i hope you will understand what i’ve in my mind.

Thanks for help.

create an struct with the parameters and serialize that struct in the inspector and reference the struct from code

first you create your scriptable object classs

[Serializable]
[CreateAssetMenu(fileName = "Data", menuName = "ScriptableObjects/SpawnManagerScriptableObject", order = 1)]
public class MyPlantScriptable : ScriptableObject
{
    //fill your scriptableobject
}

then your struct with the data and that scriptable object

[System.Serializable]
public struct Plant
{
    public MyPlantScriptable plant;
    public string name;
    public int number;
}

the final result
164660-captura.png

Yup, it’s done but i don’t have the result i wanted.
[164657-capture.png|164657]

is there a way to have each struc below the fiels in the array (it’s not very important but better for lisibility) ?

Following the awnser of @xxmariofer i’ve made a struct who contains the scriptable object and then created a custom editor to show the properties of the scriptable object inside the array.
But i can’t access to the properties inside the scriptable object.

my editor script :

public override void OnInspectorGUI()
    {

        // base.OnInspectorGUI();
        serializedObject.Update();

        BuildManager buildManager = (BuildManager)target;

        var shopSlotP = serializedObject.FindProperty("shopSlot");
        shopSlotP.objectReferenceValue = EditorGUILayout.ObjectField("Shop slot prefab", shopSlotP.objectReferenceValue, typeof(object), true);

        var slotContent = serializedObject.FindProperty("slotsContent");
        slotContent.objectReferenceValue = EditorGUILayout.ObjectField("Shop slot content", slotContent.objectReferenceValue, typeof(object), true);

        var plantsData = serializedObject.FindProperty("plantsData");
        EditorGUILayout.PropertyField(plantsData, true);

        for (int i = 0; i < plantsData.arraySize; i++)
        {
            var cost = serializedObject.FindProperty("plantsData").GetArrayElementAtIndex(i).FindPropertyRelative("cost");
            EditorGUILayout.PropertyField(cost);
        }


        serializedObject.ApplyModifiedProperties();

        //base.DrawDefaultInspector();

    }