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. 【BZOJ4818】【SDOI2017】序列计数 [矩阵乘法][DP]

    序列计数 Time Limit: 30 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Alice想要得到一个长度为n的序 ...

  2. 【NOIP】提高组2015 跳石头

    [算法]二分查找 [题解]最小值最大化问题. 从1..l内二分枚举答案,将每个答案最少移开的石头数与最大移开数m比较. 精简写法学自:https://vijos.org/p/1981/solution ...

  3. 基本控件文档-UISwitch属性---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

  4. MongoDB安装配置及使用

    1.安装配置:https://www.cnblogs.com/ymwangel/p/5859453.html 2.使用 from pymongo import MongoClient #连接 conn ...

  5. 深入理解javascript原型和闭包(2)——函数与对象的关系

    上文(理解javascript原型和作用域系列(1)——一切都是对象)已经提到,函数就是对象的一种,因为通过instanceof函数可以判断. var fn = function () { }; co ...

  6. Python 关于时间和日期函数使用 -- (转)

    python中关于时间和日期函数有time和datatime   1.获取当前时间的两种方法: import datetime,time now = time.strftime("%Y-%m ...

  7. java===java基础学习(3)---数据类型转换,运算符级别,枚举类型

    数据类型转换: 有的时候,程序需要将数据类型,比如 int + float ,结果是float, 这里的int就被转换为float类型,属于合法转换. Java中的合法转换如下图: 红色表示无信息丢失 ...

  8. mips64高精度时钟引起ktime_get时间不准,导致饿狗故障原因分析【转】

    转自:http://blog.csdn.net/chenyu105/article/details/7720162 重点关注关中断的情况.临时做了一个版本,在CPU 0上监控所有非0 CPU的时钟中断 ...

  9. x64dbg

    https://x64dbg.com/ https://github.com/x64dbg/x64dbg https://sourceforge.net/projects/x64dbg/files/s ...

  10. 【数位dp入门】【HDU4734】F(x)

    记录减的状态,表示还要凑多少才能达到当前值. 然后进行枚举即可.注意状态数不能重复. #include<bits/stdc++.h> #define N 10010 using names ...