下载地址:
https://download.youkuaiyun.com/download/qq_58804985/88184776
视频演示:
功能:
拖动物品在背包中自由移动,当物品拖动到其他物品上时,和其交换位置.基于EPPlus的背包数据与位置保存
原理:
给定一个道具池表格与一个背包表格
道具池表格负责存储所有道具的信息
背包表格负责存储将玩家背包的档案储存
当增删道具时,从道具池表格中检索对应的道具写入背包表格
优化方案拓展:当道具数量众多时,在增删物品时可以将物品分类存储到不同的道具池表格,根据Type检索对应表格的数据
效果:
代码:
背包系统核心
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OfficeOpenXml;
using System.IO;
using UnityEngine.Networking;
using UnityEngine.UI;
using Random = UnityEngine.Random;
public class BagSystem : MonoBehaviour
{
public static string ReadingExcel;//正在读取的表格
[Header("表格文件夹")]
public string URL = Application.streamingAssetsPath + $"\\Bag";
[Header("存放背包EXCEL的表格名称")]
public string BagExcelURL="Bag";
[Header("存放道具EXCEL的表格名称")]
public string ItemExcelURL="Item";
/// <summary>
/// 背包是否处于打开状态
/// </summary>
public static bool IsOpening;
[Header("存放Sprite的文件夹(依赖resource)")] public string SpriteURL ="Bag";
public static List<BagItem> MyBag= new List<BagItem>();//当前背包
public static List<BagItem> ItemPool= new List<BagItem>();//道具池
private static bool m_loaded;
public virtual void OnEnable()
{
initialization();
IsOpening = true;
}
//初始化
public void initialization()
{
if (!m_loaded)
{
LoadExcel();
m_loaded = true;
}
}
public class BagItem
{
public string Name;//物品名称
public string Num;//物品数量
public string Image;//图片地址
public string x;//位置X
public string y;//位置Y
}
//获取当前背包内的所有物品
public static List<BagItem> GetItemList()
{
return MyBag;
}
/// <summary>
/// 从玩家背包获取指定物品数量
/// </summary>
/// <param name="name">物品名称</param>
/// <returns></returns>
public static int GetItem(string name)
{
foreach (var VARIABLE in MyBag)
{
if (VARIABLE.Name==name)
{
return Convert.ToInt32(VARIABLE.Num);
}
}
Debug.LogWarning($"你试图找{name},但是没有找到");
return 0;
}
/// <summary>
/// 向背包添加指定物体
/// </summary>
/// <param name="name">物体名称</param>
/// <param name="num">物体数量</param>
/// <pa