首先我们要知道内外,unity家族里的东西,想用就用了,实在不行Get一下,基本都可以来回调用,因为再怎么说他们是一家人。
Unity家族里都有谁?看链接。
unity | 核心类图讲解_菌菌巧乐兹的博客-CSDN博客
解释:当我们需要让unity大家族以外的人去做个事的时候,我们就需要用到委托
这里以接口为例,接口的详细解释如下:
一、委托的使用(依旧以接口为例)
我们希望别人帮我们干点事,我们必须先把事情梳理清楚,把事情都记到一起,然后给别人。
流程:
1.看看别人能接受什么样的任务
2.把我们的任务装成人家能接受的格式
3.交给他
打包前,我们先看看别人接收哪种格式的,我们以IPointerDownHandler这个接口为例
public interface IPointerDownHandler : IEventSystemHandler
{
void OnPointerDown(PointerEventData eventData);
}
它接收的格式是,方法(一个参数),这个参数是一个鼠标的事件。
我们现在要写一个人家愿意接收的方法,这个方法里面的参数也是鼠标的事件,只不过写法不一样,关于这个知识点,回头再补充,总之,我们一个方法和一个参数,这个格式咱们是对应上了,就是符合人家要求了。
private void DrawLine(BaseEventData baseEventData)
{
Debug.Log("111111");
}
接下来,我们需要把这个符合要求的方法打包,我们选择的打包方式是UnityAction(直接用就行了)
UnityAction<BaseEventData> click = new UnityAction<BaseEventData>(DrawLine);
//打包方式 方法里带了啥参数 名字 初始化一下 啥方法
这样我们就打包好了,打包完后,这个方法就叫click了
二、用接口接收这个打包
打包:以上我们把事情已经写好了,下一步,就是要把写好的事情交给接口,让它看着办
[Unity]EventTrigger事件调用_Eskinlla的博客-CSDN博客
这篇文章里有,用拖拽的方式来添加EventTrigger,我们下面用代码来实现这个过程
这个组件叫EventTrigger,添加里面的内容就是要进入enter
EventTrigger.Entry myclick = new EventTrigger.Entry();
//在里面添加 名称 初始化一下
(2)点了那个add New event type以后,它会让你选,你需要哪种接口,这些接口在里面是eventID,我这里选了个PointerDown
EventTrigger.Entry myclick = new EventTrigger.Entry();
myclick.eventID = EventTriggerType.PointerDown;
//EventTriggerType这个就是个装很多选项的篮子,在里面把PointerDown挑了出来
(3)把你前面包装好的方法交给这个接口
EventTrigger.Entry myclick = new EventTrigger.Entry();
myclick.eventID = EventTriggerType.PointerDown;
myclick.callback.AddListener(click);
这样就完成了完整的交接过程。
三、放一下完整的脚本
这个脚本是:
我单另建了一个按钮
写好我希望它执行的事件
在按钮上加EventTrigger组件,把写好的事件放进去
[SerializeField]
Button button_Blue;
Vector3 position_start ;
void Start()
{
UnityAction<BaseEventData> click = new UnityAction<BaseEventData>(DrawLine);
EventTrigger.Entry myclick = new EventTrigger.Entry();
myclick.eventID = EventTriggerType.PointerDown;
myclick.callback.AddListener(click);
//让干这件事的按钮上加EventTrigger组件
button_Blue.gameObject.AddComponent<EventTrigger>();
//把之前写好的那些步骤都给它
button_Blue.gameObject.GetComponent<EventTrigger>().triggers.Add(myclick);
}
private void DrawLine(BaseEventData baseEventData)
{
Debug.Log("11111");
}