zoukankan      html  css  js  c++  java
  • 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 ();
        }
    }
    挂在物品的脚本
  • 相关阅读:
    vivado操作基本问题
    IIC通信控制的AD5259------在调试过程中遇到的奇葩问题
    FPGA基础架构总结
    PLL到底是个啥么东西呢?
    CSS-3 Transform 的使用
    CSS-3 box-shadow 的使用
    一些CSS3的乐趣
    CSS-3 文字阴影—text-shadow 的使用
    Jquery 较好的效果
    如何关闭输入法
  • 原文地址:https://www.cnblogs.com/hometown/p/4066062.html
Copyright © 2011-2022 走看看