/// <summary>
        /// Create a Json text from Inventory EquipAreas and ItemManager Items
        /// </summary>
        /// <param name="itemManager">Target ItemManaget</param>
        /// <returns>Json file text</returns>
        public static string InventoryToJsonText(vItemManager itemManager)
        {
            if (!itemManager.inventory)
            {
                return(string.Empty);
            }
            InventoryData data = new InventoryData();

            vEquipArea[] equipAreas = itemManager.inventory.equipAreas;
            for (int i = 0; i < equipAreas.Length; i++)
            {
                EquipAreaData equipAreaData = new EquipAreaData();
                equipAreaData.indexOfSelectedSlot = equipAreas[i].indexOfEquippedItem;

                for (int e = 0; e < equipAreas[i].equipSlots.Count; e++)
                {
                    SlotData equipAreaSlotData = new SlotData();
                    equipAreaSlotData.hasItem = equipAreas[i].equipSlots[e].item != null;
                    if (equipAreaSlotData.hasItem)
                    {
                        equipAreaSlotData.indexOfItem = itemManager.items.IndexOf(equipAreas[i].equipSlots[e].item);
                    }
                    equipAreaData.slotsData.Add(equipAreaSlotData);
                }
                data.equipAreas.Add(equipAreaData);
            }

            for (int i = 0; i < itemManager.items.Count; i++)
            {
                data.itemReferences.Add(new ItemReference(itemManager.items[i]));
            }
            return(JsonUtility.ToJson(data, true));
        }
        /// <summary>
        /// Load inventory items and occupied equipSlots
        /// </summary>
        /// <param name="itemManager"></param>
        public static void LoadInventory(this vItemManager itemManager)
        {
            string json = LoadInventoryJasonText();

            if (!string.IsNullOrEmpty(json))
            {
                InventoryData data = new InventoryData();
                JsonUtility.FromJsonOverwrite(json, data);
                itemManager.items = data.GetItems(itemManager.itemListData);
                vEquipArea[] equipAreas = itemManager.inventory.equipAreas;

                for (int i = 0; i < equipAreas.Length; i++)
                {
                    if (i < data.equipAreas.Count)
                    {
                        vEquipArea    area     = equipAreas[i];
                        EquipAreaData areaData = data.equipAreas[i];

                        area.indexOfEquippedItem = areaData.indexOfSelectedSlot;

                        for (int e = 0; e < equipAreas[i].equipSlots.Count; e++)
                        {
                            if (e < areaData.slotsData.Count)
                            {
                                SlotData   slotData = areaData.slotsData[e];
                                vEquipSlot slot     = equipAreas[i].equipSlots[e];
                                itemManager.temporarilyIgnoreItemAnimation = true;
                                if (slotData.hasItem)
                                {
                                    area.AddItemToEquipSlot(e, itemManager.items[slotData.indexOfItem]);
                                }
                                else
                                {
                                    area.RemoveItemOfEquipSlot(e);
                                }
                            }
                        }
                    }
                }
            }
            itemManager.inventory.UpdateInventory();
            itemManager.temporarilyIgnoreItemAnimation = false;
            itemManager.onLoadItems.Invoke();
        }