Unity 2D游戏开发:制作物品详情页 实现根据物品详情显示(32)

252 阅读1分钟

脚本编程:

1、创建ItemToolTip.cs文件

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.UI;
public class ItemToolTip : MonoBehaviour
{
    [SerializeField]private TextMeshProUGUI nameText;
    [SerializeField]private TextMeshProUGUI typeText; 
    [SerializeField]private TextMeshProUGUI descriptionText;
    [SerializeField]private Text valueText2;
    [SerializeField]private TextMeshProUGUI valueText1;
    [SerializeField]private GameObject bottomPart;

    public void SetupTooltip(ItemDetails itemDetails,SlotType slotType)
    {
        nameText.text = itemDetails.itemName;

        typeText.text = GetItemType(itemDetails.itemType);

        descriptionText.text = itemDetails.itemDescription;

        if (itemDetails.itemType == ItemType.Seed || itemDetails.itemType == ItemType.Commodity || itemDetails.itemType == ItemType.Furniture)
        { 
            bottomPart.SetActive(true);

            var price = itemDetails.itemPrice;

            if (slotType == SlotType.Bag || slotType == SlotType.Box)
            {
                price = (int)(price * itemDetails.sellPercentage);
            }

            valueText1.text = price.ToString();
            valueText2.text = price.ToString();
        }
        else
        { 
            bottomPart.SetActive(false);
        }
        LayoutRebuilder.ForceRebuildLayoutImmediate(GetComponent<RectTransform>());
    }

    private string GetItemType(ItemType itemType)
    {
        return itemType switch
        {
            ItemType.Seed => "种子",
            ItemType.Commodity => "商品",
            ItemType.Furniture => "家居",
            ItemType.ReadTool => "工具",
            ItemType.BreakTool => "工具",
            ItemType.HoeTool => "工具",
            ItemType.ChopTool => "工具",
            ItemType.CollectTool => "工具",
            ItemType.WaterTool => "工具",
            _=>"无"

        };
    }

}

2、创建ShowItemToolTip.cs文件

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

namespace MFarm.Inventory
{
    [RequireComponent(typeof(SlotUI))]
    public class ShowItemToolTip : MonoBehaviour,IPointerEnterHandler,IPointerExitHandler
    {
        private SlotUI slotUI;

        private InventoryUI inventoryUI => GetComponentInParent<InventoryUI>();


        private void Awake()
        {
            slotUI = GetComponent<SlotUI>();

        }

        public void OnPointerEnter(PointerEventData eventData)
        {
            if (slotUI.itemAmount != 0)
            {
                inventoryUI.itemTooltip.gameObject.SetActive(true);
                inventoryUI.itemTooltip.SetupTooltip(slotUI.itemDetails, slotUI.slotType);

                inventoryUI.itemTooltip.GetComponent<RectTransform>().pivot=new Vector2(0.5f, 0);
                inventoryUI.itemTooltip.transform.position = transform.position + Vector3.up * 60;
            }
            else
            {
                inventoryUI.itemTooltip.gameObject.SetActive(false);
            }
        }

        public void OnPointerExit(PointerEventData eventData)
        {
            inventoryUI.itemTooltip.gameObject.SetActive(false);
        }

    }
}

3、修改 InventoryUI.cs文件

        [Header("详情界面")]

        public ItemToolTip itemTooltip;

开发操作:

1、在Inventory上拿到变量值

image.png

2、可以利用Layout Element组件控制字体间距离

image.png