UGUI背包
Posted xiaomao21
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UGUI背包相关的知识,希望对你有一定的参考价值。
1格子的父亲需要持有所有格子
2.格子父亲返回还有没有空了的格子呢
3.背包UI的操作是背包管理脚本,保存,取得,扔掉
4.这儿赋值
GameObject itemPrefab = Resources.Load<GameObject>("Prefabs/Item"); itemPrefab.GetComponent<ItemUI>().UpdateItem(temp.Name); GameObject go = GameObject.Instantiate(itemPrefab);
5.创建个Model来保存数据。
6.以格子名称为key
private Dictionary<string, MyItem> GirdItem = new Dictionary<string, MyItem>();
方法有3种 储存,取得,删除
public class ItemModel { private Dictionary<string, MyItem> GirdItem = new Dictionary<string, MyItem>(); //储存 public void StoreItem(string name, MyItem item) { DeleteItem(name); GirdItem.Add(name, item); } //取出 public MyItem GetItem(string name) { if (GirdItem.ContainsKey(name)) { return GirdItem[name]; } return null; } //删除 public void DeleteItem(string name) { if (GirdItem.ContainsKey(name)) { GirdItem.Remove(name); } } }
做成静态的方法 和静态属性 方便访问 忘记了上面,还不是静态类哦
7.content Size fitter 组件自动识别 文字大小 提示框的大小,并选择最后一项 都是。
8.bg哪里设置为-10;
9.移入格子显示提示框,而非物品啊
10.既要实现IpointerEneter接口 又要有委托还要有射线检测是否碰到了网格啊,实际上 eventData.pointerEnter 就是射线检测 只是装备会挡住 所以装备取消raycastTarget就完美了。
11.由于委托是静态的所以方便了注册啊。
12.委托里面把自己的transform传进去实在是精妙啊
13.用脚本比对象好啊拖拽
14.stringbuilder频繁加字符串效率更高
15.
private string GetTooltipText(Item item) { if (item == null) return ""; StringBuilder sb = new StringBuilder(); sb.AppendFormat("<color=red>{0}</color> ", item.Name); switch (item.ItemType) { case "Armor": Armor armor = item as Armor; sb.AppendFormat("力量:{0} 防御:{1} 敏捷:{2} ", armor.Power, armor.Defend, armor.Agility); break; case "Consumable": Consumable consumable = item as Consumable; sb.AppendFormat("HP:{0} MP:{1} ", consumable.BackHp, consumable.BackMp); break; case "Weapon": Weapon weapon = item as Weapon; sb.AppendFormat("攻击:{0} ", weapon.Damage); break; default: break; } sb.AppendFormat("<size=25><color=white>购买价格:{0} 出售价格:{1}</color></size> <color=yellow><size=20>描述:{2}</size></color>", item.BuyPrice, item.SellPrice, item.Description); return sb.ToString(); }
16.跟随坐标 鼠标是屏幕坐标转换成世界坐标。RectTransform 坐标而且还是相对坐标。
17.直接设置中心点 哪里什么跟随代码啊。
18.
Vector2 position; RectTransformUtility.ScreenPointToLocalPointInRectangle(GameObject.Find("KnapsackUI").GetComponent<RectTransform>(), Input.mousePosition, null, out position); toolTipUI.Show(); toolTipUI.SetLocalPositon(position);
19
anchoredPosition和anchoredPositoin3D都可以认为是以像素为单位。
关于RectTransform的position和localPosition,它们的值根其所属的Canvas的渲染模式有关。
在Screen Space——Overlay的模式下,由于Canvas的世界尺寸与其像素尺寸在数值上相等,因此其rectTransform的position与其在屏幕空间的坐标在数值上也相等。这种模式下,要获取某个RectTransform的屏幕坐标,直接使用position就可以。
在Screen Space——Camera的模式和World Space下,RectTransform的渲染与摄像机有关,在获取其屏幕坐标时,需要利用canvas.worldCamera,或者transform.TransformPoint等坐标转换函数进行坐标转换。
20.eventData.button==PointerEventData.InputButton.Left左键 拖拽啊
21.先拖拽后显示提示框
22.enterpointer.是指UI元素 不是UI是游戏元素 传一个空进委托谢谢了
以上是关于UGUI背包的主要内容,如果未能解决你的问题,请参考以下文章
Unity UGUI有趣应用 -------------------- 背包系统(上)之简易单页背包系统及检索功能的实现