鼠标移动到每个slot的物体上肯定会显示当前物品的信息,因此创建一个ToolTip用来显示提示信息,只需要一个image一个text就够了,添加一个ToolTip用来更新信息。
效果如下:
ToolClip:
private Text toolTipText; private Text contentText; private CanvasGroup canvasGroup; private float targetAlpha = 0; public float smoothing = 0.1f;//渐变值 void Start() { toolTipText = GetComponent<Text>(); contentText = transform.Find("Content").GetComponent<Text>(); canvasGroup = GetComponent<CanvasGroup>(); } void Update() { if(canvasGroup.alpha!=targetAlpha) { canvasGroup.alpha = Mathf.Lerp(canvasGroup.alpha, targetAlpha, smoothing * Time.deltaTime); if(Mathf.Abs(canvasGroup.alpha-targetAlpha)<0.01f) { canvasGroup.alpha = targetAlpha; } } } public void Show(string text) { toolTipText.text = text; contentText.text = text; targetAlpha = 1; } public void Hide() { targetAlpha = 0; } public void SetLocalPosition(Vector3 position) { transform.localPosition = position; }接着就是添加鼠标移到格子,移出格子的事件,unity有三个事件IPointerEnterHandler,IPointerExitHandler,IPointerDownHandler
/// <summary> /// 鼠标进入 /// </summary> /// <param name="eventData"></param> public void OnPointerEnter(PointerEventData eventData) { //说明有子物体 if (transform.childCount > 0) { string toolTip = transform.GetChild(0).GetComponent<ItemUI>().Item.GetToolTipText(); InventoryManager.Instance.ShowToolTip(toolTip); } } /// <summary> /// 鼠标移出 /// </summary> /// <param name="eventData"></param> public void OnPointerExit(PointerEventData eventData) { InventoryManager.Instance.HideToolTip(); } /// <summary> ///鼠标按下 /// </summary> /// <param name="eventData"></param> public virtual void OnPointerDown(PointerEventData eventData) { if (eventData.button == PointerEventData.InputButton.Right) { if (transform.childCount > 0) { ItemUI currentItemUI = transform.GetChild(0).GetComponent<ItemUI>(); if (currentItemUI.Item is Equipment || currentItemUI.Item is Weapon) { //如果是装备或者是武器就装备 CharacterPanel.Instance.PutOn(currentItemUI); Destroy(currentItemUI.gameObject); } } } if (eventData.button == PointerEventData.InputButton.Left) { //自身是空物品 //picketItem !=NULL 把pickItem放到这个位置 //picke==NULL 不作处理 //自身不是空的 //picketItem !=NULL 交换处理 //picke ==NULL 把当前物品槽里面的物体放到鼠标上 if (transform.childCount > 0) { ItemUI thisItem = transform.GetChild(0).GetComponent<ItemUI>(); if (InventoryManager.Instance.IsPick == false) { //把当前物品槽的信息给pickItem(跟随鼠标移动) InventoryManager.Instance.PickUpItem(thisItem); Destroy(thisItem.gameObject); } else//自身不为空,并且捡起东西 { //id相同不做处理 if (thisItem.Item.ID == InventoryManager.Instance.PickItem.Item.ID) return; else//id不同两者交换 { Item item = thisItem.Item; int amount = thisItem.Amount; thisItem.SetItem(InventoryManager.Instance.PickItem.Item, InventoryManager.Instance.PickItem.Amount); InventoryManager.Instance.PickItem.SetItem(item); } } } else//自身为空的情况下 { if (InventoryManager.Instance.IsPick == true) { StoreItem(InventoryManager.Instance.PickItem.Item); InventoryManager.Instance.IsPick = false; } else { } } }