NGUI实现一个背包功能

界面布局是这样的,一个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 (0, strName.Length);
        string name = strName [index];

        //判断如果一个格子有物品,判断捡起的物品是否和他名字一样。
        for (int i = 0; i < cells.Length; i++) {
            if(cells[i].transform.childCount>0)
            {
             if(cells[i].GetComponentInChildren<Sknap>().obj.GetComponent<UISprite>().spriteName == name)
                {
                    cells[i].GetComponentInChildren<Sknap>().AddCount(1);
                    isHaveSprite=true;
                    break;
                }
            }
        }
                //在某个位置没有图片的时候才添加图片
                if (isHaveSprite == false) {

                        for (int i=0; i<cells.Length; i++) {
                                if (cells [i].transform.childCount == 0) {
                                        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 ();
    }
}

挂在物品的脚本

时间: 2024-10-12 19:51:28

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

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

前话 在许多类型游戏中我们经常会使用到背包,利用背包来设置相应角色属性,多了背包也会让游戏增色拓展不少. 那在Unity3D游戏开发中该如何编写背包系统呢?因为有高人开发了NGUI插件,因此我们进行简单编写代码设置即可实现一个简单的背包功能了. 准备工作 新建一个工程PackageDemo 导入NGUI包(最新版3.9.8版的正版89刀) 准备好图片素材,使用NGUI将其打包成图集 背包 背包格子 物品 简单背包功能实现 第一步,添加NGUI控件,使用素材 项目目录以及场景列表如下: 要注意的是

不能因为为了添加一个新功能,影响到旧的功能

涉及到后台的, 一般都是要跟数据库打交道的大型数据量的处理问题.以类 client - server 为基础的架构, 或者变形后的架构. 客户端处理用户的输入和数据, 然后大量的客户端(多个客户端的多种数据) 反馈到服务端统一处理和协调, 然后服务端对客户端发出相应的指令.其中 后台程序 代表的就是服务端的程序. 包含以下几点:1. 网络通信,  要跟远程的client打交道,只能用网络2. 并发 和 并行处理.0.. 多个客户端可能在同一时间同时需要处理同一个类型的数据, 谁先谁后,谁的有效谁

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

上篇博文<为Pythonic论坛添加一个“专题”功能>,在模板的层次上对发帖进行了限制.也就是根据用户是否拥有权限来决定是否显示发帖框. 但是自从这么“投机取巧”的写完模板后,整夜辗转反侧,不知道用户能否通过其它节点在不能够发帖的节点本地添加发帖框实现发帖. 最终,我还是觉得不靠谱…需要在服务端也进行下验证.简单的处理,终于填了坑 翻看\apps\topic\views.py文件找到def topic_create(request, node_slug):函数定义. if node.categ

分享一个jquery功能强大的提示信息插件代码

代码属于提示文字特效,很好,使用有些复杂,请参demo使用 下载地址:jquery功能强大的提示信息插件代码 预览DEMO:DEMO 分享一个jquery功能强大的提示信息插件代码,布布扣,bubuko.com

轻量级web富文本框——wangEditor使用手册(2)——扩展一个“缩进”功能

1. 引言 上一节<轻量级web富文本框——wangEditor使用手册(1)——基本应用>中我们讲解了如何应用wangEditor创建最基本的富文本编辑器,本节继续讲如何扩展一个简单的按钮.本节是继续上一节的内容来的,所使用的代码也是接着上一节的来的,错过的朋友请先看上一节,再看本节. 下载地址:https://github.com/wangfupeng1988/wangEditor demo演示:http://www.cnblogs.com/wangfupeng1988/p/4185508

手机影音第七天 视频的播放下一个视频功能实现,视频进度、电量变化的实现

先看下效果图: 在这里,视频进度条会根据视频播放变化,下方的按钮中,播放下一个,上一个都已实现. 代码已经托管到码云上,想下载看的小伙伴可以从下方地址中获取 https://git.oschina.net/joy_yuan/MobilePlayer 1.在这张图上,自定义的显示电量的那一列已经被系统自带的状态栏遮盖,下面就说一下实现方法: 系统电量变化时,系统会发送一个广播,所有对这个广播感兴趣的activity都可以注册广播来接收这个广播.在这里接收系统电量变化,屏幕锁屏.开屏的广播,只能使用

通达OA 在工作流中增加根据流水号查询其他工作流的一个小功能

前段时间帮朋友实现的一个小功能,今天再整理一下.要实现的功能其实也很简单,就是在一个工作流里能查看到另一个管理的工作流里的内容.流程多了,各流程之间也会有些关联,原来朋友做的只是在表单里输入要查询的流水号,要查询的人需要按照这个流水号在工作流查询里打开这个功能再查询,点击.打开这些动作说来简单但是也是增加了一些麻烦.为了解决这个小小的问题,我在表单里简单改造了一些,增加了一个查询的链接,这样每次查询的时候点击一下就OK了,技术就是为人服务的么. 需要说明的是:这两个流程是有关联的,而不能任意查所

用JAVA写一个函数,功能如下: 任意给定一组数, 找出任意数相加之后的结果为35(任意设定)的情况

用JAVA写一个函数.功能如下:任意给定一组数,例如{12,60,-8,99,15,35,17,18},找出任意数相加之后的结果为35(任意设定)的情况. 可以递归算法来解: package test1; import java.util.Arrays; public class demo { public static void main(String[] args) { String str = "12,60,-8,99,15,35,17,18,8,10,11,12"; int s

图文详解-如何用Axure做一个倒计时功能按钮

本篇主要给大家讲一下如何用Axure巧妙简单的实现一个倒计时功能. demo地址: http://pan.baidu.com/s/1jI4IRzC 密码: 8ghd 需要更详细学习的同学可以看下面文章.偷懒的同学可以直接在demo里复制出想要的部分即可使用了. 1.把主要元素进行排版设计: 这里每个人有每个人的习惯,没有一个标准,只是将主要元素进行组织后加以排版.大家发现并没有获取验证码按钮,这是我们的关键.下一步开始进行添加 2.添加一个Dynamic Panel(动态面板)命名为getCod