NGUI 简单的背包系统
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 简单的背包系统的更多相关文章
- NGUI简单背包系统的实现
一.利用txt文件存储游戏物品信息 首先在asset下创建一个txt文件,这里我们命名为objectsInfoList.txt,并将其拖放到unity Project视图中. 其中txt中我们先存放一 ...
- Unity开发心路历程——制作画板
有人说 编程是份很无聊的工作 因为整个工作时间面对的都是电脑这种机器 因为眼睛盯着的内容都是索然无味的代码 因为总是会有意想不到的bug让你怀疑自己的智商 而我认为 编程是件及其有意思的事情 可观的收 ...
- Unity3D使用NGUI实现简单背包功能
前话 在许多类型游戏中我们经常会使用到背包,利用背包来设置相应角色属性,多了背包也会让游戏增色拓展不少. 那在Unity3D游戏开发中该如何编写背包系统呢?因为有高人开发了NGUI插件,因此我们进行简 ...
- NGUI之Slider,最简单的方法做进度条。
既然标题是最简单的,那么很多东西就不需要我们自己做了,使用的是NGUI的示例,只针对初学者,接下来让我们来做一个最简单游戏设置里的声音控制. 1.导入NGUI: 2.找到NGUI的Menu示例Demo ...
- 使用泛型简单封装NGUI的ScrollView实现滑动列表
懒,是老毛病了,周末跑了半马,跑完也是一通累,好久没锻炼了..也是懒的,有时都懒的写博客..最近看到项目中各种滑动列表框,本着要懒出水平来的原则,决定花点时间简单处理下(暂时未做列表太多时的优化):1 ...
- Unity NGUI 创建简单的按钮
Unity版本:4.5.1 NGUI版本:3.6.5 注意NGUI版本,网上的大部分教程都是2.x版本的,在步骤上面略有不同,此文适合初学者. 示例: 通过NGUI创建一个背景和按钮. 1.首先创建一 ...
- Unity基于NGUI的简单并可直接使用的虚拟摇杆实现(一)
可能大家都听说过大名鼎鼎的easytouch,然而easytouch是基于UGUI的,两种不同的UI混用,可能会造成项目管理的混乱,并且可能会出现各种幺蛾子,比如事件传递互相扰乱的问题. 于是就想找一 ...
- 【转】简单的虚拟摇杆控制移动(NGUI)
http://www.cnblogs.com/zhangbaochong/p/4928688.html 一.用NGUI创建虚拟摇杆贴图 先创建一个sprite作为背景叫做JoyStick 并添加一个B ...
- 简单的虚拟摇杆控制移动(NGUI)
一.用NGUI创建虚拟摇杆贴图 先创建一个sprite作为背景叫做JoyStick 并添加一个BoxCollider,再创建一个sprite child作为虚拟摇杆中间的按钮,叫做button 二.通 ...
随机推荐
- MyBatis框架的使用及源码分析(十) CacheExecutor,SimpleExecutor,BatchExecutor ,ReuseExecutor
Executor分成两大类,一类是CacheExecutor,另一类是普通Executor. 普通类又分为: ExecutorType.SIMPLE: 这个执行器类型不做特殊的事情.它为每个语句的执行 ...
- lambda表达式的应用例子和JavaSE 8特性
在JavaSE 8 引入了lambda表达式,lambda表达式的引入带来的好处是:通过语法上的改进,减少开发人员需要编写和维护的代码数量.这个在下面使用和不使用lambda的对比中可以清晰看出来. ...
- 【POJ】1830 开关问题(高斯消元)
http://poj.org/problem?id=1830 高斯消元无解的条件:当存在非法的左式=0而右式不等于0的情况,即为非法.这个可以在消元后,对没有使用过的方程验证是否右式不等于0(此时因为 ...
- Spring归纳小结(山东数漫江湖)
前言 如果说有什么框架是Java程序员必然会学习.使用到的,那么Spring肯定是其中之一.本篇博客,将根据博主在日常工作中对Spring的使用做一个系统的归纳小结. Spring的一些概念和思想 S ...
- centos 挂载数据盘
第一.检查硬盘设备是否有数据盘 fdisk -l 第二.数据硬盘分区 fdisk /dev/vdb 第三.ext3格式化分区 mkfs.ext3 /dev/vdb1 第四.挂载新分区 A - 新建目录 ...
- 增大dma的分配
前言 项目中需要通过驱动与fpga通讯,获取fpga往内存里写的数据.因为数据量比较大,需要驱动分配600多M的内存给fpga来写数据,且因为是与fpga通讯,需要连续的内存,还得是uncached的 ...
- java===java基础学习(2)---运算符,三元操作符,数学函数
主要介绍运算符,和数学函数以及三元运算符: package testbotoo; public class test1 { public static void main(String[] args) ...
- perl操作MongoDB
perl操作MongoDB http://blog.csdn.net/jophyyao/article/details/8223190 Mongodb 的C语言操作 http://blog.csdn. ...
- sicily 4699. 简单哈希
Description 使用线性探测法(Linear Probing)可以解决哈希中的冲突问题,其基本思想是:设哈希函数为h(key) = d, 并且假定哈希的存储结构是循环数组, 则当冲突发生时, ...
- git学习笔记二-branch分支
1.刚创建好的空仓库的分支是空的,即使是master分支也是不存在的.master分支是不能通过git branch 来创建的,只有在完成第一次提交才会自动创建,有git自动完成master分子的创建 ...