[UnityUI]UGUI背包
来源:互联网 发布:nba常规赛数据 编辑:程序博客网 时间:2024/05/19 03:18
参考链接:
http://www.manew.com/thread-39589-1-1.html
http://www.manew.com/thread-89881-1-1.html
http://www.manew.com/thread-90065-1-1.html
效果图:
using UnityEngine;using System.Collections;using UnityEngine.UI;using System.Collections.Generic;[RequireComponent(typeof(GridLayoutGroup))]public class Bag : MonoBehaviour { private List<Transform> gridList = new List<Transform>(); private string gridPrefabName = "Prefab/Grid"; private string itemPrefabName = "Prefab/Item"; private int column = 5; private int row = 3;void Awake () { for (int i = 0; i < row; i++) { for (int j = 0; j < column; j++) { GameObject go = Instantiate(Resources.Load(gridPrefabName)) as GameObject; go.transform.SetParent(transform, false); gridList.Add(go.transform); } }} //添加物品 public void AddItem(string itemName, int count = 1) { //如果有相同的物品,则只是更改包里该物品的数量;否则实例化该物品,改数量 bool hasSameItem = false; for (int i = 0; i < gridList.Count; i++) { //如果有物品 if(gridList[i].childCount > 0) { Transform tra = gridList[i].GetChild(0); //如果有该物品 string name = itemName.Substring(itemName.LastIndexOf('/') + 1); if (tra.GetComponent<Image>().sprite.name.Equals(name)) { hasSameItem = true; ModifyCount(tra.GetChild(0).GetComponent<Text>(), count); break; } } } if(!hasSameItem) { for (int i = 0; i < gridList.Count; i++) { if(gridList[i].childCount == 0) { GameObject go = Instantiate(Resources.Load(itemPrefabName)) as GameObject; go.GetComponent<Image>().sprite = Resources.Load<Sprite>(itemName); go.transform.SetParent(gridList[i], false); ModifyCount(go.transform.GetChild(0).GetComponent<Text>(), count); break; } } } } private void ModifyCount(Text text, int count) { int temp = int.Parse(text.text); temp += count; text.text = temp.ToString(); } //整理 public void Tidy() { List<Transform> tempList = new List<Transform>(); for (int i = 0; i < gridList.Count; i++) { if (gridList[i].childCount > 0) tempList.Add(gridList[i].GetChild(0)); } for (int i = 0; i < tempList.Count; i++) { tempList[i].SetParent(gridList[i]); tempList[i].position = gridList[i].position; } }}
using UnityEngine;using System.Collections;using UnityEngine.UI;using UnityEngine.EventSystems;//ICanvasRaycastFilter可以控制射线是否穿透物品,也可以使用CanvasGroup的blocksRaycastspublic class Item : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, ICanvasRaycastFilter { private static Transform canvasTra; private Transform nowParent;//一般来说,物品是格子的子物体,nowParent记录的是当前物品属于哪个格子 private bool isRaycastLocationValid = true;//默认射线不能穿透物品 public void OnBeginDrag(PointerEventData eventData) { if (canvasTra == null) canvasTra = GameObject.Find("Canvas").transform; nowParent = transform.parent; transform.SetParent(canvasTra);//将当前拖拽的物品置前 isRaycastLocationValid = false; } public void OnDrag(PointerEventData eventData) { transform.position = Input.mousePosition; } public void OnEndDrag(PointerEventData eventData) { GameObject go = eventData.pointerCurrentRaycast.gameObject; if (go != null) { Debug.Log(go.name); if (go.tag.Equals("Grid"))//放置到空格子 { SetParentAndPosition(transform, go.transform); } else if (go.tag.Equals("Item"))//交换位置,注意可能需要把物品下的子物体的Raycast Target关掉 { SetParentAndPosition(transform, go.transform.parent); SetParentAndPosition(go.transform, nowParent); } else { SetParentAndPosition(transform, nowParent); } } else { SetParentAndPosition(transform, nowParent); } isRaycastLocationValid = true; } private void SetParentAndPosition(Transform child, Transform parent) { child.SetParent(parent); child.position = parent.position; } public bool IsRaycastLocationValid(Vector2 sp, Camera eventCamera) { return isRaycastLocationValid; }}
using UnityEngine;using System.Collections;public class TestBag : MonoBehaviour { public Bag bag;void Start () {}void Update () { if (Input.GetKeyDown(KeyCode.Q)) bag.AddItem("Sprite/a" + Random.Range(1, 5)); if (Input.GetKeyDown(KeyCode.W)) bag.Tidy();}}
0 0
- [UnityUI]UGUI背包
- [UnityUI]UGUI自适应
- [UnityUI]UGUI新手引导
- [UnityUI]UGUI射线检测
- [UnityUI]UGUI的事件系统
- [UnityUI]使用UGUI制作排行榜
- [UnityUI]UGUI中的遮挡(一)
- [UnityUI]UGUI中的遮挡(二)
- [UnityUI]UGUI按钮长按效果
- UGUI--背包系统
- 【UGUI】背包系统
- UGUI背包系统(初级)
- UGUI背包(对象池)
- UGUI--背包系统之一-------InventoryManager
- UGUI背包系统(中)
- UGUI背包系统(下)
- UGUI背包实现详解之一UGUI精准拖拽
- [UnityUI]RectTransform
- Leetcode题解 206. Reverse Linked List
- datanode节点超时时间设置
- jQuery选择器
- Tomcat Context reloadabled 与 OutOfMemory(PermSpace)
- linux内核分析笔记----上半部与下半部
- [UnityUI]UGUI背包
- Altium Designer 16 (AD16) 破解版下载 百度网盘分享 16.1.9 (Build 221) 更新
- java和c之间进行数据传递
- myBatis配置
- Android中生成xml文件小demo
- IIS6⇒IIS7网站注意点
- leetcode——Jump Game II
- hadoop2.x常用端口及定义方法
- STL源码剖析——stl_numeric.h