Unity3D利用代码快速的为组件添加EventTrigger事件
目录
1、博客介绍
平常我们为图片等UI组件添加点击、拖拽等Event事件的时候,我们需要在编辑栏手动的为组件添加EventTrigger,再添加EventTriggerType后,再添加触发的方法(如演示1),本篇博客利用静态拓展的方式为组件快速的添加各种EventTrigger事件。(如演示2)
2、内容
(1)获取EventTrigger
获取目标物体上的EventTrigger组件,没有的话添加一下
//添加EventTrigger组件
EventTrigger trigger = obj.GetComponent<EventTrigger>();
if (trigger == null)
{
trigger = obj.gameObject.AddComponent<EventTrigger>();
}
(2)获取EventTrigger上对应事件
获取EventTrigger的事件列表,给我们要添加的事件添加回调方法callback,若我们要添加的事件不在EventTrigger的事件列表内则Add进去就可以了。
//获取事件列表
List<EventTrigger.Entry> entries = trigger.triggers;
if (entries==null)
{
entries = new List<EventTrigger.Entry>();
}
//获取对应事件
EventTrigger.Entry entry = new EventTrigger.Entry();
bool isExist = false;
for (int i = 0; i < entries.Count; i++)
{
if (entries[i].eventID == eventTriggerType)
{
entry = entries[i];
isExist = true;
}
}
entry.callback.AddListener(callback);
if (!isExist)
{
entry.eventID = eventTriggerType;
trigger.triggers.Add(entry);
}
(3)静态拓展
要做到直接做到 【Image.AddListener(type ,方法)】的效果我们需要做一个静态拓展,对静态拓展不太了解的同学可以看一下博主关于静态拓展的文章,很简单,看一下就懂了,结尾有推送,这里我们做一下Component的静态拓展就可以轻松实现了。
/// <summary>
/// 为组件添加监听事件
/// </summary>
/// <param name="obj"></param>
/// <param name="eventTriggerType"></param>
/// <param name="callback"></param>
/// <returns></returns>
public static void AddListener(this Component obj,EventTriggerType eventTriggerType,UnityAction<BaseEventData> callback)
{
//添加EventTrigger组件
EventTrigger trigger = obj.GetComponent<EventTrigger>();
if (trigger == null)
{
trigger = obj.gameObject.AddComponent<EventTrigger>();
}
//获取事件列表
List<EventTrigger.Entry> entries = trigger.triggers;
if (entries==null)
{
entries = new List<EventTrigger.Entry>();
}
//获取对应事件
EventTrigger.Entry entry = new EventTrigger.Entry();
bool isExist = false;
for (int i = 0; i < entries.Count; i++)
{
if (entries[i].eventID == eventTriggerType)
{
entry = entries[i];
isExist = true;
}
}
entry.callback.AddListener(callback);
if (!isExist)
{
trigger.triggers.Add(entry);
}
}
(4)演示效果
我们现在快速的为一个图片添加一个点击事件:
3、推送
本篇源码放置在静态拓展Github工程内:https://github.com/KingSun5/StaticExtension
静态拓展博客:https://blog.csdn.net/Mr_Sun88/article/details/90106925
4、结语
很简单很方便,若是觉得博主的文章写的不错,不妨关注一下博主,点赞一下博文,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。
QQ交流群:806091680(Chinar)
该群为CSDN博主Chinar所创,推荐一下!我也在群里!
本文属于原创文章,转载请著名作者出处并置顶!!!!