脚本编程:
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;