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之背包物品拖放

Unity UGUI有趣应用 -------------------- 背包系统(上)之简易单页背包系统及检索功能的实现

unity_UGUI养成之路02

慎用Outline ,UGUI Outline实现原理分析

慎用Outline ,UGUI Outline实现原理分析

Unity2017.1官方UGUI文档翻译——Text