1、首先在场景中创建格子,用来存放物体的

2、为每一个格子设置标签为Item,建议只做一个格子,然后创建预制体就可以了,然后为每一个格子附加Box Collider组件,要用于检测

3、接下来就是创建要实例出来的功能物体了,建议只创建一个,然后做成预制体就可以了,后面通过通过修改贴图就行了,减少步骤

4、为功能物品附加UIDragDropItem组件,这里对其OnDragDropRelease方法进行重写,有一定的好处:

5、接下来为物品添加一下脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class item_pag : UIDragDropItem
{ public UISprite temp_01;
public UILabel label_01; //显示数量的 private int number = ;
public void AddCount(int i=)
{
//默认一次加一
number += i;
label_01.text = number + ""; } protected override void OnDragDropRelease(GameObject surface)
{
base.OnDragDropRelease(surface); if(surface.tag=="Cell")
{
//当移到空的格子上的时候则直接移上去即可
this.transform.parent = surface.transform; //将物品附加到格子的下面
this.transform.localPosition = Vector3.zero; //使其的移动位置在其中心,不会需要精确的移动
}
else if(surface.tag=="Item")
{
//当格子上已经有物品了,则只能交换两个物品的位置信息了 Transform parent = surface.transform.parent; //将原来格子上的物品信息存储下来
surface.transform.parent = this.transform.parent; //将要被迫移的格子放到现在的位置
surface.transform.localPosition = Vector3.zero; this.transform.parent = parent; //将要移动的物体移动到玩家要拖动到的位置上去
this.transform.localPosition = Vector3.zero;
}
}
}

6、为用来放物品的格子添加一下脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class Bag : MonoBehaviour
{ public GameObject[] cells; //存放格子的数组
public string[] itemName; //这是捡到的物体名字
public GameObject itemPrefabs; //物体的预制体,可以通过名字对齐修改显示的外观
// private private void Update()
{
if(Input.GetKeyDown(KeyCode.X))
{
PickUp(); //当按下x键的时候随机获得一个技能wupin
}
}
private void PickUp()
{ bool IsItem = false; //用于判断是够有重复的物品的标志位
int index = Random.Range(, itemName.Length);
string temp = itemName[index]; //获得随机的物体名字
for (int i = ; i < cells.Length; i++)
{
if(cells[i].transform.childCount>)
{
//当该格子上有子物体的时候开始检测时候会出现重复的
item_pag itens = cells[i].GetComponentInChildren<item_pag>(); //获取该格子上的子物体,也就是物品,对重复的操作处理放在item_bag脚本中处理
if(itens.temp_01.spriteName==temp)
{ itens.AddCount(); //如果重名的话,给下标栏数量+1就行了
IsItem = true;
break;
}
}
}
if(IsItem==false)
{
for (int i = ; i < cells.Length; i++)
{
if (cells[i].transform.childCount <= )
{
//当格子上没有物体的时候则为其空格子添加物体
GameObject gg = NGUITools.AddChild(cells[i], itemPrefabs); //将物品添加到格子下面作为子物体
gg.transform.localPosition = Vector3.zero;
gg.GetComponent<UISprite>().spriteName = temp; //将随机获得的图片名字进行预制体的外观赋值
break; //当一次实例化出来一个技能物品后要进行返回
}
}
}
}
}

7、大概的思路就是这样了,其中有一些步骤没有详细的说明出来,留点琢磨的空间吧!

                                                                                                2018-03-31、10:21:03

NGUI 简单的背包系统的更多相关文章

  1. NGUI简单背包系统的实现

    一.利用txt文件存储游戏物品信息 首先在asset下创建一个txt文件,这里我们命名为objectsInfoList.txt,并将其拖放到unity Project视图中. 其中txt中我们先存放一 ...

  2. Unity开发心路历程——制作画板

    有人说 编程是份很无聊的工作 因为整个工作时间面对的都是电脑这种机器 因为眼睛盯着的内容都是索然无味的代码 因为总是会有意想不到的bug让你怀疑自己的智商 而我认为 编程是件及其有意思的事情 可观的收 ...

  3. Unity3D使用NGUI实现简单背包功能

    前话 在许多类型游戏中我们经常会使用到背包,利用背包来设置相应角色属性,多了背包也会让游戏增色拓展不少. 那在Unity3D游戏开发中该如何编写背包系统呢?因为有高人开发了NGUI插件,因此我们进行简 ...

  4. NGUI之Slider,最简单的方法做进度条。

    既然标题是最简单的,那么很多东西就不需要我们自己做了,使用的是NGUI的示例,只针对初学者,接下来让我们来做一个最简单游戏设置里的声音控制. 1.导入NGUI: 2.找到NGUI的Menu示例Demo ...

  5. 使用泛型简单封装NGUI的ScrollView实现滑动列表

    懒,是老毛病了,周末跑了半马,跑完也是一通累,好久没锻炼了..也是懒的,有时都懒的写博客..最近看到项目中各种滑动列表框,本着要懒出水平来的原则,决定花点时间简单处理下(暂时未做列表太多时的优化):1 ...

  6. Unity NGUI 创建简单的按钮

    Unity版本:4.5.1 NGUI版本:3.6.5 注意NGUI版本,网上的大部分教程都是2.x版本的,在步骤上面略有不同,此文适合初学者. 示例: 通过NGUI创建一个背景和按钮. 1.首先创建一 ...

  7. Unity基于NGUI的简单并可直接使用的虚拟摇杆实现(一)

    可能大家都听说过大名鼎鼎的easytouch,然而easytouch是基于UGUI的,两种不同的UI混用,可能会造成项目管理的混乱,并且可能会出现各种幺蛾子,比如事件传递互相扰乱的问题. 于是就想找一 ...

  8. 【转】简单的虚拟摇杆控制移动(NGUI)

    http://www.cnblogs.com/zhangbaochong/p/4928688.html 一.用NGUI创建虚拟摇杆贴图 先创建一个sprite作为背景叫做JoyStick 并添加一个B ...

  9. 简单的虚拟摇杆控制移动(NGUI)

    一.用NGUI创建虚拟摇杆贴图 先创建一个sprite作为背景叫做JoyStick 并添加一个BoxCollider,再创建一个sprite child作为虚拟摇杆中间的按钮,叫做button 二.通 ...

随机推荐

  1. [LA3135]node形式的优先队列

    n个触发器,每个触发器每period秒就产生一个编号为qnum的事件,求前k个事件. n<=1000  k<=10000 node形式的优先队列 主要在于重载小于号,确定优先顺序. #in ...

  2. 【Luogu】 P3928 SAC E#1 - 一道简单题 Sequence2

    [题目]洛谷10月月赛R1 提高组 [算法]递推DP+树状数组 [题解]列出DP递推方程,然后用树状数组维护前后缀和. #include<cstdio> #include<cstri ...

  3. 表单元素(form、文本、按钮、选择)

    表单元素 一.form form代表表单,功能:用于申明表单,定义采集数据的范围,也就是<form>和</form>里面包含的数据将被提交到服务器或者电子邮件里.<for ...

  4. java 连接数据库报错:Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '

    1.解决方法: 报错信息为: Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server ti ...

  5. 4.0docker部署

    设置容器的端口映射 -P  :容器暴露的所有端口映射 -p :指定映射容器暴露的端口 Nginx部暑流程 docker run -p 80 --name web -t -i ubuntu /bin/b ...

  6. 主成分分析(PCA)及其在R里的实现

    主成分分析(principal component analysis,PCA)是一种降维技术,把多个变量化为能够反映原始变量大部分信息的少数几个主成分.设X有p个变量,为n*p阶矩阵,即n个样本的p维 ...

  7. Python模块学习 - psutil

    psutil模块介绍 psutil是一个开源切跨平台的库,其提供了便利的函数用来获取才做系统的信息,比如CPU,内存,磁盘,网络等.此外,psutil还可以用来进行进程管理,包括判断进程是否存在.获取 ...

  8. 【Python学习笔记】使用Python计算皮尔逊相关系数

    源代码不记得是哪里获取的了,侵删.此处博客仅作为自己笔记学习. def multipl(a,b): sumofab=0.0 for i in range(len(a)): temp=a[i]*b[i] ...

  9. nfs 文件共享 服务

    需要rpc服务: [root@xujiaxuan ftp]# service rpcbind start[root@xujiaxuan ftp]# chkconfig rpcbind on 设置开机自 ...

  10. 2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6154 CaoHaha's staff 思维

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6154 题意:在笛卡尔坐标系下,画一个面积至少为  n 的简单多边形,每次只能画一条边或者一个格子的对角 ...