1.场景中鼠标对物体扫入扫出事件
这个方法适用于添加碰撞器的物体。
在这里创建个MouseEvent.cs脚本来举个例子:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MouseEvent : MonoBehaviour
{
private void OnMouseEnter()//鼠标扫入事件(扫入这个物体)
{
Debug.Log("鼠标扫入");
}
private void OnMouseDown()//鼠标点击事件(点击在这个物体上)
{
Debug.Log("鼠标单击");
}
private void OnMouseExit()//鼠标扫出事件(扫出这个物体)
{
Debug.Log("鼠标扫出");
}
}
这个脚本实现的是实时监测鼠标对该对象的响应。这个方法应该是内部使用射线判断的,但写法和碰撞器有点类似,通过将该脚本挂载到某个物体上后,运行就能看见:
在鼠标扫入摄像机当前所看到该物体区域的时,控制台会有显示“鼠标扫入”;鼠标单击该物体,则显示“鼠标单击”;将鼠标移开这个范围时,会显示“鼠标扫出”。这里的响应事件可以自行修改为所需要的。
同时可以发现,若鼠标不在该区域内,则不会相应单击事件。物体被部分遮挡,则遮挡部分不响应事件。可以说是很实用的。
2.菜单中鼠标对UI扫入扫出事件
在调出画布时,想用上面的方法就无法实现响应了。这时需要另一种方法,
在这里创建个UISlide.cs脚本来举个例子,代码示范如下:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;//注意添加这个
public class UISlide : MonoBehaviour, IPointerEnterHandler,IPointerDownHandler,IPointerClickHandler,IPointerUpHandler, IPointerExitHandler
//继承这类接口,可以选择自己需要的
{
public void OnPointerEnter(PointerEventData eventData)
{
Debug.Log("鼠标扫入UI");
}
public void OnPointerDown(PointerEventData eventData)
{
Debug.Log("鼠标点下UI");
}
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("鼠标点击UI");
}
public void OnPointerUp(PointerEventData eventData)
{
Debug.Log("鼠标点起UI");
}
public void OnPointerExit(PointerEventData eventData)
{
Debug.Log("鼠标扫出UI");
}
}
将其保存后挂载到UI上,此时运行,同理可以在控制台看见响应扫入点击扫出该UI的事件。
实现的前体是脚本的对象有UI实体在,不能仅仅一个空对象。
另外UI还有类似的拖拽事件IBeginDragHandler,IDragHandler,IEndDragHandler
这个方法适用于对UI界面搞点花里胡哨的东西或者提示,十分有帮助。