Unity3D自学笔记——UGUI背包系统(三)物品弹出提示框
2016-11-07 15:37
781 查看
物品弹出提示框
效果图
利用Toggle实现物品选中效果
向背包里层pnlGrid添加一个Toggle Group修改Item预制体,将其修改为Toggle
向Item添加Toggle组件
默认Is On不选中
其余的设置不变,多了一个Checkmark,即IsOn为True时会显示该图片,所以设置一张图片。
预制体里不能设置Toggle的ToggleGroup,需要在代码里控制,修改UIItem脚本
public class UIItem : MonoBehaviour, IPointerClickHandler { private Image m_Icon; private Text m_TxtName; private Text m_TxtCount; private ItemEntity m_Item; private Toggle m_Toggle; private ToggleGroup m_ToggleGroup; public event Action<ItemEntity> PointerClick; void Awake() { this.m_Icon = UIHelper.FindChild<Image>(transform, "imgIcon"); this.m_TxtName = UIHelper.FindChild<Text>(transform, "imgName/Text"); this.m_TxtCount = UIHelper.FindChild<Text>(transform, "imgCount/Text"); this.m_Toggle = transform.GetComponent<Toggle>(); } public void SetInfo(ItemEntity item) { this.m_Item = item; this.m_TxtName.text = item.Name; this.m_Icon.overrideSprite = Resources.Load<Sprite>(item.IconPath); this.m_ToggleGroup = transform.parent.parent.GetComponent<ToggleGroup>(); this.m_Toggle.group = this.m_ToggleGroup; //For Test this.m_TxtCount.text = item.StackCount.ToString(); } public void OnPointerClick(PointerEventData eventData) { if (PointerClick != null) PointerClick(m_Item); } }
这里将控件都改为在Awake里获取了,界面赋值,不知道为什么老会丢失。
弹出界面
其他控件不描述了,其中在基础属性里面用了滚动效果,如果属性太多就会出现滚动条,可以进行滑动。
主要是Show方法,其余都是显示的判断拼接。
调用过程:
1.添加UIItem的时候,会将UIItem对应的ItemEntity存储到每一个UIItem中
2. UIInventory注册了UIItem的PointerClick事件,当UIItem被点击后,就会通知UIInventory,并把自己的ItemEntity传给UIInventory
3. 当UIInventory接到通知后,就会调用事件参数里的ItemEntity信息
public class UIItemToolTip : UIScene { ec63 private Image m_Icon; private Text m_NameText; private Text m_LvText; private Text m_TypeText; private Text m_DescriptionText; private Text m_AttributeText; private Text m_BtnDressOnText; private Text m_BtnDropText; private UISceneWidget m_BtnClose; private UISceneWidget m_BtnDressOn; private UISceneWidget m_BtnDrop; private ItemEntity m_Item; void Awake() { this.m_Icon = UIHelper.FindChild<Image>(transform, "imgIcon/Image"); this.m_NameText = UIHelper.FindChild<Text>(transform, "txtName"); this.m_LvText = UIHelper.FindChild<Text>(transform, "txtLv"); this.m_TypeText = UIHelper.FindChild<Text>(transform, "txtType"); this.m_DescriptionText = UIHelper.FindChild<Text>(transform, "txtDescription"); this.m_AttributeText = UIHelper.FindChild<Text>(transform, "imgAttribute/txtAttribute"); this.m_BtnDressOnText = UIHelper.FindChild<Text>(transform, "btnDressOn/Text"); this.m_BtnDropText = UIHelper.FindChild<Text>(transform, "btnDrop/Text"); } protected override void Start() { base.Start(); m_BtnClose = this.GetWidget("btnClose"); if(m_BtnClose != null) m_BtnClose.PointerClick += BtnClosePointerClick; m_BtnDressOn = this.GetWidget("btnDressOn"); if(m_BtnDressOn != null) m_BtnDressOn.PointerClick += BtnDressOnPointerClick; m_BtnDrop = this.GetWidget("btnDrop"); if(m_BtnDrop != null) m_BtnDrop.PointerClick += BtnDropPointerClick; } public void Show(ItemEntity item, bool isLeft) { this.SetVisible(true); this.m_Item = item; this.m_Icon.overrideSprite = Resources.Load<Sprite>(item.IconPath); this.m_NameText.text = item.Name; this.m_DescriptionText.text = item.Description; this.m_LvText.text = string.Format("等级: {0}", item.Lv); this.m_TypeText.text = GetTypeString(item.ItemType); this.m_AttributeText.text = GetAttributeString(item); this.m_BtnDressOnText.text = GetButtonDressonText(item); this.m_BtnDropText.text = "丢弃"; Vector3 pos = transform.localPosition; if (isLeft) { transform.localPosition = new Vector3(-Mathf.Abs(pos.x), pos.y, pos.z); } else { transform.localPosition = new Vector3(Mathf.Abs(pos.x), pos.y, pos.z); } } private void BtnClosePointerClick(PointerEventData obj) { this.SetVisible(false); } private void BtnDropPointerClick(PointerEventData obj) { } private void BtnDressOnPointerClick(PointerEventData obj) { } private string GetTypeString(ItemType type) { string typeString = "类型: {0}"; switch (type) { case ItemType.Potion: typeString = string.Format(typeString, ""); break; case ItemType.Armor: typeString = string.Format(typeString, "防具"); break; case ItemType.Necklace: typeString = string.Format(typeString, "项链"); break; case ItemType.Ring: typeString = string.Format(typeString, "戒指"); break; case ItemType.Weapon: typeString = string.Format(typeString, "武器"); break; } return typeString; } private string GetAttributeString(ItemEntity item) { StringBuilder sbAttribute = new StringBuilder(); if(item.Hp != 0) { sbAttribute.AppendLine("体力 +" + item.Hp); } if(item.Mp != 0) { sbAttribute.AppendLine("魔力 +" + item.Mp); } if(item.Atk != 0) { sbAttribute.AppendLine("攻击 +" + item.Atk); } if(item.Def != 0) { sbAttribute.AppendLine("防御 +" + item.Def); } if(item.Spd != 0) { sbAttribute.AppendLine("速度 +" + item.Spd); } if(item.AtkRange != 0) { sbAttribute.AppendLine("攻击范围 +" + item.AtkRange); } if(item.AtkSpd != 0) { sbAttribute.AppendLine("攻击速度 +" + item.AtkSpd); } if(item.CriticalRate != 0) { sbAttribute.AppendFormat("暴击率 +" + item.CriticalRate); } return sbAttribute.ToString(); } private string GetButtonDressonText(ItemEntity item) { string result = string.Empty; switch (item.ItemType) { case ItemType.Armor: case ItemType.Weapon: case ItemType.Ring: case ItemType.Necklace: result = "装备"; break; case ItemType.Potion: result = "使用"; break; } return result; } }
UIInventory
public class UIInventory : UIScene { public static int gridCount = 40; //背包格子数量 private GameObject m_GridPrefab; //格子预制体 private GameObject m_ItemPrefab; //物品预制体 private Transform m_PnlGrid; //背包里层 private RectTransform m_PnlGridRectTransfom; //背包里层的RectTransform,用于动态调整它的大小 private List<Transform> m_GridList = new List<Transform>(); //所有格子 private Dictionary<int, IEntity> m_ItemList; //从缓存里取出的ItemList private UIItemToolTip m_EquipToolTip; protected override void Start() { base.Start(); InitWidget(); InitGrid(); LoadData(); } protected override void Update() { base.Update(); //For Test 随机从物品中取一个物品出来,目前物品只有2个 if (Input.GetMouseButtonDown(1)) { int[] temp = new int[m_ItemList.Count]; for (int i = 0; i < m_ItemList.Count; i++) { temp[i] = m_ItemList.ToList()[i].Key; } int rd = Random.Range(0, m_ItemList.Count); AddItem(temp[rd]); } } private void InitWidget() { this.m_GridPrefab = (GameObject)Resources.Load("Inventory/Grid"); this.m_ItemPrefab = (GameObject)Resources.Load("Inventory/Item"); this.m_PnlGrid = this.transform.Find("pnlScrowView/pnlGrid"); this.m_PnlGridRectTransfom = m_PnlGrid.GetComponent<RectTransform>(); this.m_EquipToolTip = UIManager.Instance.GetUI<UIItemToolTip>(UIName.UIItemToolTip); } private void InitGrid() { //动态创建Grid for (int i = 0; i < gridCount; i++) { GameObject grid = GameObject.Instantiate(this.m_GridPrefab); grid.transform.SetParent(m_PnlGrid); m_GridList.Add(grid.transform); } } private void LoadData() { m_ItemList = PhotonDataCache.GetAll(PhotonCacheType.ItemList); } public Transform GetEnmptyGrid() { return m_GridList.Find(x => x.childCount == 0); } public void AddItem(int id) { Transform grid = GetEnmptyGrid(); if (grid == null) return; if (!m_ItemList.ContainsKey(id)) return; ItemEntity item = m_ItemList[id] as ItemEntity; GameObject go = GameObject.Instantiate(this.m_ItemPrefab); go.transform.SetParent(grid); go.GetComponent<UIItem>().SetInfo(item); go.transform.localPosition = Vector3.zero; go.transform.localScale = Vector3.one; go.GetComponent<UIItem>().PointerClick += OnUIItemPointerClick; } private void OnUIItemPointerClick(ItemEntity item) { m_EquipToolTip.Show(item, true); } }
考虑到大家都在找我要源代码,目前已将源码上传至百度云,又需要的自行下载
http://pan.baidu.com/s/1dF1VT4X
相关文章推荐
- Unity3D自学笔记——UGUI背包系统(七)物品的装备与卸下
- Unity3D自学笔记——UGUI背包系统(五)沿用Attribute设计实现物品等级
- Unity3D自学笔记——UGUI背包系统(一)ItemData
- Unity3D自学笔记——UGUI背包系统(二)UI设计实现及数据绑定
- Unity3D自学笔记——UGUI背包系统(九)装备对HP影响的逻辑及使用药品
- Unity3D自学笔记——UGUI背包系统(六)角色换装及属性动态改变
- Unity3D自学笔记——UGUI前台架构
- Unity3d背包系统(四)—— 设计物品管理类——InventoryManager
- Unity3D——UGUI实现背包系统
- Unity3D系统实现背包里物品的各种功能
- Unity3d背包系统(三)—— 设计物品类的JSON文件
- 基于Unity3D(UGUI)的背包系统(装备系统,锻造系统,购买系统)
- Unity3D自学笔记——星际2技能系统分析(二)Ability(Move, Stop, Attack)
- Unity3D 学习笔记8 —— UGUI控制和按钮的监听系统
- Unity3D自学笔记——星际2技能系统分析(四)Ability(Behavior)
- Unity3D自学笔记——星际2技能系统分析(五)Effect(Damage)
- 基于Unity3D(UGUI)的背包系统<四>完结篇
- 基于Unity3D(UGUI)的背包系统<三>
- Unity3D自学笔记——星际2技能系统分析(三)Ability(Effect)
- 【Unity3d】UGUI 之 Animator, Animation 动画系统学习笔记