Unity | 什么是委托?

首先我们要知道内外,unity家族里的东西,想用就用了,实在不行Get一下,基本都可以来回调用,因为再怎么说他们是一家人。

Unity家族里都有谁?看链接。

unity | 核心类图讲解_菌菌巧乐兹的博客-CSDN博客

解释:当我们需要让unity大家族以外的人去做个事的时候,我们就需要用到委托

这里以接口为例,接口的详细解释如下:

Unity | 接口的理解和使用方法_菌菌巧乐兹的博客-CSDN博客

一、委托的使用(依旧以接口为例)

我们希望别人帮我们干点事,我们必须先把事情梳理清楚,把事情都记到一起,然后给别人。

流程:

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");
    }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菌菌巧乐兹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值