学习游戏制作记录(制作提示框以及使用键盘切换UI)8.21

1.制作装备提示框

创建提示框,添加文本子对象,用来描述名称,类型以及属性加成

挂载垂直分配组件和文本大小适配组件,这样图像会根据文本大小来调整自己

创建UI_ItemTip脚本并挂载在文本框上:
 

    [SerializeField] private TextMeshProUGUI itemStringName;//三个文本
    [SerializeField] private TextMeshProUGUI itemTypeName;
    [SerializeField] private TextMeshProUGUI itemDescription;

    [SerializeField] private float defaultFontSize = 60;//默认文本大小
    void Start()
    {

    }

    public void ShowToolTip(ItemData_Equipment item)//提示函数
    {
        if (item == null) return;

        itemStringName.text = item.ItemName;
        itemTypeName.text = item.equipmentType.ToString();
        itemDescription.text = item.GetDescription();//获取相应的文本

        if(itemStringName.text.Length >13)//防止标题的字体大小过大
        {
            itemStringName.fontSize =itemStringName.fontSize*.7f ;
        }
        gameObject.SetActive(true);
    }

    public void HideToolTip()//关闭函数
    {
        itemStringName.fontSize = defaultFontSize;
        gameObject.SetActive(false);

    }

UI脚本:


[SerializeField]public UI_ItemTip tip;//获取提示框

UI_ItemSlot脚本:


实现IPointerEnterHandler,IPointerExitHandler接口

分别会在鼠标悬浮在物品槽和离开物品槽时调用

    public UI ui;//获取ui

    private void Start()
    {
        ui=GetComponentInParent<UI>();
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        if (Item == null) return;

        ui.tip.ShowToolTip(Item.data as ItemData_Equipment);//显示当前物品的数据
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        if(Item == null) return;

        ui.tip.HideToolTip();
    }

ItemData脚本:

    public StringBuilder sb = new StringBuilder();//字符串构建,用来创建属性的描述

    public virtual string GetDescription()
    {
        return " ";
    }

ItemData_Equipmen脚本:

 public int DescriptionLength;//记录文本的行数

    public override string GetDescription()
    {
        sb.Length = 0;
        DescriptionLength = 0;

        AddItemDescription(strength, "力量");//添加描述
        AddItemDescription(agility, "敏捷");
        AddItemDescription(intelligence, "智力");
        AddItemDescription(valitity, "活力");

        AddItemDescription(damage, "伤害");
        AddItemDescription(critChance, "暴击率");
        AddItemDescription(critPower, "暴击伤害");

        AddItemDescription(maxHealth, "最大生命");
        AddItemDescription(armor, "护甲");
        AddItemDescription(evasion, "闪避");
        AddItemDescription(magicResistence, "魔法抗性");

        AddItemDescription(fireDamage, "火焰伤害");
        AddItemDescription(iceDamage, "冰冻伤害");
        AddItemDescription(lightingDamage, "雷电伤害");

        if(DescriptionLength<5)//不足5行则填空,更加美观
        {
            for(int i = 0; i < 5-DescriptionLength; i++) 
            {
                sb.AppendLine();
                sb.Append(" ");
            }
        }

        return sb.ToString();
    }

    private void AddItemDescription(int value, string itemname)//添加属性描述
    {
        if (value != 0)
        {
            if(sb.Length > 0)
            {
                sb.AppendLine();//换行的作用
            }

            if(value>0)
            {
                sb.AppendLine("+"+value+" "+itemname);

            }

            DescriptionLength++;
        }
     }

2.制作属性提示框

创建一个类似上面的提示框,但是只需要一个描述文本即可

创建UI_StatToolTip脚本并挂载在提示框上:

    [SerializeField] private TextMeshProUGUI statDescription;//获取文本

    public void ShowStatToolTip(string _text)
    {
        statDescription.text = _text;//设置
        gameObject.SetActive(true);//激活提示框
    }

    public void HideStatToolTip()//关闭
    {
        statDescription.text = " ";
        gameObject.SetActive(false);
    }

UI脚本:


    [SerializeField] public UI_StatToolTip statTip;

UI_StatSlot脚本:


同样实现IPointerEnterHandler,IPointerExitHandler接口

    [TextArea]
    [SerializeField] private string statDescription;//该槽位对应的文本描述,自行设置

    private UI ui;

    public void OnPointerEnter(PointerEventData eventData)//调用即可
    {
        ui.statTip.ShowStatToolTip(statDescription);
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        ui.statTip.HideStatToolTip();
            }

3.实现键盘切换UI:

UI脚本:


    [SerializeField] private GameObject Character;//获取四大面板
    [SerializeField] private GameObject Craft;
    [SerializeField] private GameObject SkillTree;
    [SerializeField] private GameObject Options;

    void Start()//初始化默认不打开面板和提示框
    {
        SwithTo(null);

       ItemTip.gameObject.SetActive(false);
        statTip.gameObject.SetActive(false);
    }

    public void SwithWithKey(GameObject _menu)
    {
        if(_menu!=null&&_menu.activeSelf)//再次按下同样的按键则关闭面板
        {
            _menu.SetActive(false);
            return;
        }

        SwithTo(_menu);

    }

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.C))//四个面板以及对应的按键
        {
            SwithWithKey(Character);
        }
        if(Input .GetKeyDown(KeyCode.B))
        {
            SwithWithKey(Craft);
        }
        if(Input.GetKeyDown(KeyCode.K))
        {
            SwithWithKey(SkillTree);
        }
        if(Input.GetKeyDown(KeyCode.O))
        {
            SwithWithKey(Options);
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值