码迷,mamicode.com
首页 > 编程语言 > 详细

unity背包系统(摘抄)

时间:2018-11-07 21:40:23      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:源文件   按钮   mono   继承   作者   版权   eric   one   com   

新的背包系统包括:

1、一个用于表示背包系统的按钮:

 

该按钮上添加了EventListener事件,该事件经过改写,可用于实现点击一次展示,点击第二次消失的效果。

代码比较简单,主要是在EventListener本身的事件代码上进行了一定的修改:


public GameObject item;
public GameObject tip;
public int count = 0;

其中Item用于表示监听的物体,tip表示受到监听后发生动作的物体,count用于计数,以便于实现点击两次后tip物体消失的效果。

具体的点击代码如下所示,比较简单,不再进行解释:


void ButtonClick(GameObject button)
{
count++;
if(count==1)
tip.SetActive(true);
if (count == 2) {
tip.SetActive(false);
count = 0;
}
2、物品的显示:

因为此处涉及到与后台端数据的传输,所以我在这里暂且先将物品的信息用一个TXT文件保存起来:

 

这些信息分别对应 物品的id 物品的名称 物品的图片表示 (暂且需要这么多,更多的信息以后丰富内容的时候进行添加)

为了读取TXT文件中物品的信息,我们需要创建一个空物体,并在该物体上挂上读取的脚本:

我们需要把TXT的文件读取到一个String中,根据‘\n’和‘,’来分割字符串,取得相应的物品信息,保存到之后我们需要在点击物品是显示的Dictionary中去。

具体代码如下,比较简单:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class ObjectsInfo : MonoBehaviour
{

public static ObjectsInfo _instance;
public TextAsset objectsInfoListText;

private Dictionary<int, ObjectInfo> objectInfoDictionary =
new Dictionary<int, ObjectInfo>();

void Awake()
{
_instance = this;
ReadInfo();
}

public ObjectInfo GetObjectInfoById(int key)
{
ObjectInfo info = new ObjectInfo();
objectInfoDictionary.TryGetValue(key, out info);
return info;
}
private void ReadInfo()
{
string text = objectsInfoListText.text;
string[] strArray = text.Split(‘\n‘);
foreach (string str in strArray)
{
string[] proArray = str.Split(‘,‘);

ObjectInfo info = new ObjectInfo();

int id = int.Parse(proArray[0]);
string name = proArray[1];
string iconName = proArray[2];
string typeStr = proArray[3];

info.id = id;
info.name = name;
info.iconName = iconName;
//添加到字典上,id为key,方便根据id查找
objectInfoDictionary.Add(id, info);
}
}
}

//id,名称,icon名称,类型
public class ObjectInfo
{
public int id;
public string name;
public string iconName;

}


要让背包内的物品正确显示出来,还需要对物品添加一个SetId的方法,对于每个物品来说,id对应的图片是不同的,最后进行使用时对应的效果也是不同的。

public void SetId(int id)
{
ObjectInfo info = ObjectsInfo._instance.GetObjectInfoById(id);
sprite.spriteName = info.iconName;
this.id = id;
}


除此之外,物品和其他不同,还需要相应拖拽事件,这里比较简单,为物品添加一个 Box Collider,然后让物品对应的脚本继承于Unity原生的拖拽事件即可。

3、一个用于表示背包的Sprite:

 

 


加入一个Sprite,然后对Sprite进行图片添加的操作。

此处需要注意的是,如果在NGUI中想要添加自己的图片背景,和在Unity原生的添加是不一样的。此处需要自己创建一个图集Atlas。

点选你需要的图片,点击右键,选择NGUI->Open Atlas Maker,会弹出以下对话框:

 

加入你需要的图片后点击画面中的“添加/更新”按钮即可。这样可以被用于Sprite组件的属于你自己的图集就建立好了。之后只需要在对应的Sprite组件的 UI Sprite面板中,点击Atlas,选择图集,在点击Sprite,就可以了。

 

 

4、背包中的格子Cell:

 

首先分析一下,可以发现,背包需要一个Sprite,但背包中还有许多网格,所以在背包中创建一系列的Sprite,用于表示物品存放的格子。如图中的Cell。

 

为了方便起见,这里可以将Cell进行Prefab的处理。

所谓的Prefab,就是将一个你自己定义好的资源打包,以便下次使用的时候,可以直接从资源文件里拖出来使用。有点类似于图形学里的显示列表(不知道这么比喻对不对)。

操作也非常简单,对你需要进行Prefab处理的资源点击右键,选择Create -> Prefab即可。

 

因为背包系统中,背包本身面板需要存放一些Cell,也就格子,格子中再存放物体。所以对于背包面板来说,需要对格子Cell进行管理。需要创建一个List用于存放格子。为了方便格子的管理,最好在面板中给格子进行编号,如图,从Cell01开始编号。

 

 

 

格子还需要对物体有一定的管理作用,在格子中定义变量id为物品的编号,num为物品的数量,添加一个Label用于在物品的右下角显示该物品的数量。

 

using UnityEngine;
using System.Collections;

public class InventoryItemGrid : MonoBehaviour {

public int id = 0;
public int num = 0;
private ObjectInfo info = null;
private UILabel numLabel;

void Start()
{
numLabel = this.GetComponentInChildren<UILabel>();
}

public void SetId(int id, int num = 1)
{
this.id = id;
info = ObjectsInfo._instance.GetObjectInfoById(id);
InventoryItem item = this.GetComponentInChildren<InventoryItem>();
this.num = num;
numLabel.text = this.num.ToString();
numLabel.enabled = true;

item.SetId(id);
}

public void PlusNum(int num = 1)
{
this.num += num;
numLabel.text = this.num.ToString();
}
public void ClearInfo()
{
id = 0;
num = 0;
info = null;
numLabel.enabled = false;
}
}


至此我们对背包系统进行了拆分,分成了按钮、物品、背包面板和格子几部分。并初步实现了每一部分的功能,下面我们将要把这些分离开的功能整合到一起,实现一个完整的背包系统。
---------------------
作者:okurusT
来源:CSDN
原文:https://blog.csdn.net/zxycs1996/article/details/72995868
版权声明:本文为博主原创文章,转载请附上博文链接!

unity背包系统(摘抄)

标签:源文件   按钮   mono   继承   作者   版权   eric   one   com   

原文地址:https://www.cnblogs.com/hpu001/p/9925724.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!