鼠标移动到每个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
{
}
}
}