Hi Foxy dude !
Thank you for this detailed reply.
Actually, I already get how inherited classes works ( or at least I know a bit about that ) but your examples did clarify how to implement it 
Now about : “public List Items; // this can have anything that derives from BaseItem. Eg Consumable and Structure”
I actually did make it work, it’s just that in Inspector the list elements are not displayed (which is kind of annoying when you want to actually create and edit your “derived” items.)
Anyway, here is the solution I think I’ll come up with :
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[CreateAssetMenu (menuName=("InventorySystem/InventoryItemList"))]
public class InventoryItemList : ScriptableObject {
public string listName;
public List<InventoryItem> itemList = new List<InventoryItem>(); // InventoryItem is the base class
public List<Potion> potionList = new List<Potion>(); // potion inherit from Consumable which inherit from base class InventoryItem
public List<Bomb> bombList=new List<Bomb>(); //same for bomb
}
Here is my SO containing all the items of the game, I create a List of each type so I can create/edit my different items in the inspector.
Now I need to build a script to attach to an actual game object that represent an actual item in the game, this script contain a reference to an item in the database ( I get that item following your GetItem methods ).
I think to create another SO to be my actual PlayerInventory.
Now when I pick up any loot, let say a potion, I just add the corresponding item from the database into this Inventory (in this case, I should create another instance of the item and not just add the item from the database, right ??)
Now if I want to open my Inventory, I just have to loop through my items list and check the derived class to construct new lists : “consumable, weapons, armors” and display them in different panels.
Does this whole setup sounds ok to you ?
Again, thank you for your patience, you’re my Santa !
[EDIT] : just realized that your ItemBase class derives from ScriptableObject !
What benefits would you get from it ?
So far my base class looks like this :
using UnityEngine;
using System.Collections;
[System.Serializable]
public abstract class InventoryItem {
public string itemName = "New Item";
public int itemID = 0;
public Sprite itemIcon = null;
public Rigidbody2D itemBody2D = null;
public bool isStackable;
public int maxStack;
public bool destroyOnUse;
public int cost = 0;
public ItemType type;
public enum ItemType{
usable,
weapon,
equip,
}
}