UGUI中普通的事件触发方法已经了解了,现在讲一下另一种触发事件的方法,这种方法不仅可以让2D的UGUI触发还可以让一个3D物体来触发某个方法。
首先写一个脚本用来写一个触发事件的log方法,如下:
publicclassBtnEventTriggerTest : MonoBehaviour
{
voidStart ()
{
//获取或添加EventTrigger组件
EventTrigger trigger= transform.GetComponent<EventTrigger>();
if (trigger == null)
{
trigger=transform.gameObject.AddComponent<EventTrigger>();
}
//初始化EventTrigger.Entry的数组
trigger.triggers = newList<EventTrigger.Entry>();
//创建各种 EventTrigger.Entry 的类型
EventTrigger.Entry entry = newEventTrigger.Entry();
//设置Entry的eventID类型 即EventTriggerType的各种枚举(比如鼠标点击,滑动,拖动等)
entry.eventID = EventTriggerType.PointerEnter;
//注册代理
UnityAction<BaseEventData> callback = newUnityAction<BaseEventData>(OnEventTrigger);
//添加代理事件到EventTrigger.Entry
entry.callback.AddListener(callback);
EventTrigger.Entry entry2 = newEventTrigger.Entry();
entry2.eventID = EventTriggerType.PointerDown;
UnityAction<BaseEventData> callback1 = newUnityAction<BaseEventData>(OnMouseDown);
entry2.callback.AddListener(callback1);
//在EventTrigger.Entry的数组添加EventTrigger.Entry
trigger.triggers.Add(entry);
trigger.triggers.Add(entry2);
}
privatevoid OnMouseDown(BaseEventData arg0)
{
Debug.Log("OnMouseDown");
}
privatevoid OnEventTrigger(BaseEventData arg0)
{
Debug.Log("OnEventTrigger");
}
}
然后在UGUI的UI组件上添加该脚本,或在添加一个EventTrigger组件,运行使用鼠标即可。
然而在游戏物体比如Cube上,也是同UI一样添加脚本和EventTrigger组件。
但是摄像机却不能识别3D的游戏物体的鼠标事件,在网上查了一下,原来还要在摄像机下添加一个Physics Raycaster的组件,用来检测鼠标射线,然后运行使用鼠标即可。