界面布局是这样的,一个400*400的背景,然后在其上是16张小图片,每个小图片格子可以用来放置拾取的物品。
有两个预制体,一个是可放置的小格子,一个是拾取的物品(包含一个此物品有多少的Label)。

如下图:

需要的脚本:

using UnityEngine;
using System.Collections; //ci此脚本挂在背景上
public class SknapBg : MonoBehaviour { public GameObject[] cells; //可捡起物品所能移动的框格。 public GameObject obj; //捡起的那个物品
public string[] strName; //能捡起的所有物品的图片名称 private bool isHaveSprite=false; //这个框格是否有物品了 //
void Update()
{
if (Input.GetKeyDown (KeyCode.P)) {
PickUP();
}
} public void PickUP()
{
int index = Random.Range (, strName.Length);
string name = strName [index]; //判断如果一个格子有物品,判断捡起的物品是否和他名字一样。
for (int i = ; i < cells.Length; i++) {
if(cells[i].transform.childCount>)
{
if(cells[i].GetComponentInChildren<Sknap>().obj.GetComponent<UISprite>().spriteName == name)
{
cells[i].GetComponentInChildren<Sknap>().AddCount();
isHaveSprite=true;
break;
}
}
}
//在某个位置没有图片的时候才添加图片
if (isHaveSprite == false) { for (int i=; i<cells.Length; i++) {
if (cells [i].transform.childCount == ) {
GameObject go = NGUITools.AddChild (cells [i], obj); //NGUITools.AddChild
go.GetComponent<UISprite> ().spriteName = name;
go.transform.localPosition = Vector3.zero;
break;
}
}
}
}
}

挂在背景的脚本

using UnityEngine;
using System.Collections; //挂在可捡起的物品上
public class Sknap :UIDragDropItem {
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 == "Sknap") {
Transform trans=surface.transform.parent;
surface.transform.parent=this.transform.parent;
surface.transform.localPosition=Vector3.zero; this.transform.parent=trans;
this.transform.localPosition=Vector3.zero;
}
} public GameObject obj;
public UILabel label;
private int count; public void AddCount(int num)
{
count += num;
label.text = count.ToString ();
}
}

挂在物品的脚本

NGUI实现一个背包功能的更多相关文章

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

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

  2. OpenResty 是一个全功能的 Web 应用服务器

    OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器.它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项. 通过众多进行良好设计的 ...

  3. php大力力 [042节] 今天做了一个删除功能

    php大力力 [042节] 今天做了一个删除功能 if(isset($_GET['action'])){ if($_GET['action']=="del"){ $sql = &q ...

  4. 为Pythonic论坛添加一个“专题”功能(续)

    上篇博文<为Pythonic论坛添加一个“专题”功能>,在模板的层次上对发帖进行了限制.也就是根据用户是否拥有权限来决定是否显示发帖框. 但是自从这么“投机取巧”的写完模板后,整夜辗转反侧 ...

  5. Office365开发系列——开发一个全功能的Word Add-In

    2016年10月我参加了在北京举行的DevDays Asia 2016 - Office 365应用开发”48小时黑客马拉松“,我开发的一个Word Add-In Demo——WordTemplate ...

  6. CustomDialog——一个多功能、通用、可自定义的Dialog

    CustomDialog--一个多功能.通用.可自定义的Dialog  依赖 compile 'com.github.SiberiaDante:CustomDialog:v1.0.1'  说明[Cus ...

  7. Spring Boot 2.2 增加了一个新功能,启动飞起~

    前几天栈长分享了一个好玩的框架:一个比Spring Boot快44倍的Java框架!,是不是感觉 Spring Boot 略慢?今天讲一下 Spring Boot 添加的这个新特性,可以大大提升 Sp ...

  8. PHP操作实现一个多功能购物网站

    PHP操作实现一个多功能购物网站 一.需要实现的页面: Index.aspx:浏览商品页面,显示商品列表,用户可以点击“加入购物车“. ViewCart.aspx:查看购物车页面,显示已购买的商品信息 ...

  9. Android Studio 通过一个登录功能介绍SQLite数据库的使用

    前言: SQLite简介:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在 ...

随机推荐

  1. 如何在IIS8.5上面部署php

    一.开启,设置win8.1自带的IIS 8.5组件服务器. 进入控制面板,选择程序和功能,打开或关闭Windows 功能,找到Internet information services,分别开启FTP ...

  2. for clean

    static(修饰变量方,法:静态块:静态内部类:静态导包) final transient 作用foreach 原理 volatile底层原理实现 集合LIST MAP SET 实现类的底层原理优, ...

  3. curl 使用

    1.cURL介绍 cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的一些高级特性 ...

  4. sql 根据字段查询不同表

    SELECT snFundType,snBusinessType, THEN (select vcPaySerialNo from aa where vcSerialNo=a.vcRelationSe ...

  5. vim全局替换命令

    vim全局替换命令   语法为 :[addr]s/源字符串/目的字符串/[option]全局替换命令为::%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行.如:“1,20” ...

  6. intellij idea 12 搭建maven web项目

    原来公司一直使用eclipse,突然使用这个intellij还真有点不习惯,等用了一段时间才发现的确好用,因为也是刚开始用,所以很多不理解的地方,搭建一个项目从头好好了解下intellij 最开始的m ...

  7. 在Windows上安装MySQL(免安装ZIP版)

    在 Windows 上安装MySQL(免安装ZIP版) 因为一些原因,重新安装了MySQL数据库,重装时习惯性使用最新版下载 此过程中发现MySQL 5.7.12 和MySQL 5.6的安装有些区别: ...

  8. selenium webdriver学习-怎么等待页面元素加载完成

    http://blog.csdn.net/aerchi/article/details/8055913 WebDriverWait类和ExpectedCondition

  9. SOCKET的一些注意事项

    1. 如果采用同步处理,其实,是可以多次接受数据的, MemoryStream ms = new MemoryStream();    while (true)   {     Console.Wri ...

  10. 第九十八节,JavaScript语法、关键保留字及变量

    JavaScript语法.关键保留字及变量 学习要点: 1.语法构成 2.关键字保留字 3.变量 任何语言的核心都必然会描述这门语言最基本的工作原理.而JavaScript的语言核心就是ECMAScr ...