码迷,mamicode.com
首页 > 其他好文 > 详细

UGUI背包

时间:2018-08-03 22:41:01      阅读:307      评论:0      收藏:0      [点我收藏+]

标签:inpu   pen   build   nap   创建   add   red   自动   取出   

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>\n\n", item.Name);
        switch (item.ItemType)
        {
            case "Armor":
                Armor armor = item as Armor;
                sb.AppendFormat("力量:{0}\n防御:{1}\n敏捷:{2}\n\n", armor.Power, armor.Defend, armor.Agility);
                break;
            case "Consumable":
                Consumable consumable = item as Consumable;
                sb.AppendFormat("HP:{0}\nMP:{1}\n\n", consumable.BackHp, consumable.BackMp);
                break;
            case "Weapon":
                Weapon weapon = item as Weapon;
                sb.AppendFormat("攻击:{0}\n\n", weapon.Damage);
                break;
            default:
                break;
        }
        sb.AppendFormat("<size=25><color=white>购买价格:{0}\n出售价格:{1}</color></size>\n\n<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背包

标签:inpu   pen   build   nap   创建   add   red   自动   取出   

原文地址:https://www.cnblogs.com/xiaomao21/p/9416459.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!