unity3d制作背包系统(0)--整体结构

unity3d制作背包系统(0)–整体结构

序言

在这篇文章写下的时候,距离我开始设计这个背包系统的时间已经过去将近一年了。这个背包系统是属于我的一个正在开发的小游戏的,之所以当时没有写下这篇文章而是现在来完成的原因,一是当时我并没有很积极写博客记录的意愿,二是临近毕业找工作,一些博客可以作为具有开发经验的证明。
现在看起来这个系统还是有些多余和缺漏的地方,这一方面是项目初期的个人想法太多变,走了一些弯路,另一方面一年来个人开发经验也逐渐增多,旧设计自然看不顺眼。
废话不多说,开始正文。

背包系统对多数游戏的重要性不言而喻,在最开始设计背包系统的时候我也查过大佬的实现方案,奈何当时太过年轻,看不懂大佬的思路,只能自己慢慢摸索着做了一个。

效果图

下面先上效果图

右边部分相当于《我的世界》的创造模式物品栏,只是背包系统的一个延伸,在这里不需要过多关心,只用看左边背包部分。
背包演示

总的来说,UI上的基本功能就是
当鼠标空时:左击格子拿取全部,右击拿取一半
当鼠标有物品时:
左击空的格子将鼠标的物品放入格子,右击空格子则将鼠标上的物品放一个到格子中;
左击有物品的格子互换格子内容和鼠标内容,右击有物品的格子与左击相同。
跟《我的世界》背包的UI逻辑很像。

0.背包系统的整体架构

结合我自己的开发过程和观摩了一些别人的博客,我认为背包系统分为四个部分:定义物品,物品存储,UI显示,数据读取

提示:以下是伪代码

其中定义物品是指定义物品的数据形式,像这样

public class itemunit  
{
	 public int id=0;//物品ID
	 public int num=0;//个数
	 public string name="item"; //物品的真实名称
//可以自行添加更多数据
 }

物品存储,指的是将上面定义的物品用数组或其他什么形式存储起来的功能,实现此功能的脚本应该放在玩家的GameObject上而不是UI上,像这样

public class backpackbase : MonoBehaviour{//挂载于玩家GameObject之上
    public itemunit[] backpack = new itemunit[9];
    //...围绕上面这个数组添加各种处理方法
    public virtual int additem(itemunit item){}
    public virtual int subitem(itemunit item){}
    public event delegate itemchange changeEvent;//背包存储区物品改变事件
    public virtual void OnUIChange(UIevent e){}//对UI改变事件作出反应
    }

UI显示,顾名思义就是将物品的图片显示在UI上,以及响应玩家操作,把这些操作的结果传给物品存储部分,像这样

public class uicontroller : MonoBehaviour {//挂载于显示物品图片的UI上
    public slotbutton[] slots;//单个显示物品的UI格子
    public event delegate UIevent UIchangeEvent;//UI改变事件,通常由玩家操作造成
     public virtual void OnBackpackChange(itemchange e){}//对背包存储区改变事件作出反应
    }
public class slotbutton : MonoBehaviour//显示单个物品的UI格子
	{
		public itemunit holding;//格子中显示着的物品
		public uicontroller uicon;//隶属的ui
		
		public void leftevent(){}//被鼠标左击的反应
		public void rightevent(){}//被鼠标右击的反应
	}

数据读取负责将物品数据从文件中读取出来并提供物品id和物品图片的映射,以及物品id和完整itemunit的映射,像这样

public class idtoitemunit : MonoBehaviour//读取物品数据
{
	public static delegate getitem idtoitem;//提供物品id,返回物品的itemunit
	public List<itemunit> itemdict = new List<itemunit>();//加载成功的物品
	void loadItemData(){}//从存储物品信息的文件中读取数据生成itemunit
}

public class idtotexture : MonoBehaviour //读取物品图片
{
    public static delegate totexture itemtotexture;//提供id返回物品图片
    public Dictionary<int, Texture> itemTextureList = new Dictionary<int, Texture>();
    
	void loadItemTexture(){}//从文件加载某id对应的texture名,并根据此名获取texture,与id一并加入字典
}

以下是各个部分的较详细说明

1.物品类

背包系统操作的“基本数据类型”

物品

2.存储类

将物品存储到玩家的游戏GameObject上。
存储

3.显示类(UI)

实现玩家鼠标拿起放下物品的功能,以及使点选的物品图片跟随鼠标的功能,玩家能真正看见的背包。
正在编写…

4.背包系统辅助类(数据读取)

一些从文件中读取物品数据和对应物品图片的静态类,以及帮助显示类和存储类通信的“适配器类”。
正在编写…

有空的话会单独做一个DEMO来演示这个背包系统

猜你喜欢

转载自blog.csdn.net/ardepomy/article/details/88137719