Unity3D自学笔记——UGUI背包系统(三)物品弹出提示框

来源:互联网 发布:淘宝50字万能好评 编辑:程序博客网 时间:2024/05/02 00:42

物品弹出提示框

效果图

这里写图片描述

这里写图片描述

利用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 {    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);    }}
0 0
原创粉丝点击