5分钟弄明白 || Unity委托与事件

        相信各位自学入门的都不免受到C#一些高级特性的困扰,网上的教程都讲得十分详细,导致自己没有看下去的欲望。

        这篇文章将会尽量采用贴合零基础初学者的语言,达到委托与事件的入门理解,至于更复杂的应用这里就不多讲了。

        Unity是一款采用c#的游戏引擎,那么他的一些高级特性一定会或多或少与我们平时见过的游戏类似,委托与事件就是如此。

        委托 ,即Delegation,相当于RPG游戏中的主城任务板,你定义的一些函数,相当于任务板上贴着的的任务纸条。

        我们直接从例子入手:

        

using UnityEngine;

public delegate void DelegationBoard();
//创建一个任务板的"概念",并非实例,不可以直接用

public class TestDraft : MonoBehaviour
{
    public DelegationBoard delegateBoard;
    //让任务板实例化,可以指定实例使用(添加,删除任务)

    public void ClearBoard()
    {
        if (delegateBoard != null)
        {
            delegateBoard();
        }
    }
    //调用这个方法的时候,如果任务板上有任务,就会完成任务板上的所有任务

    public void AddTask()
    {
        delegateBoard += SomeTask;
    }
    //调用这个方法的时候,会在任务板上添加一个任务

    public void RemoveTask()
    {
        delegateBoard -= SomeTask;
    }
    //调用这个方法的时候,会在任务板上删除一个任务


    public void SomeTask()
    {
        //这里是“任务”的详细内容
    }

    private void Start()
    {
        AddTask();
        //结果:添加了一个SomeTask

        AddTask();
        //结果:添加了一个SomeTask

        RemoveTask();
        //结果:移除了一个SomeTask

        ClearBoard();
        //结果:完成了任务板上仅有的一个SomeTask
    }
}

正如注释中写着的,委托就好像一个任务板,函数就是一个个任务。委托存在的某些意义,就是把很多函数存到一个盒子里面,然后调用一个Box()的方法,一口气调用盒子里的所有方法。

事件也是同理:

public event DelegationBoard delegateBoardEvent;
public DelegationBoard delegateBoard;
//让任务板实例化,可以指定实例使用(添加,删除任务)

唯一的区别在于event在外部类中无法直接使用=赋值,也就是说event不能在除了自己声明的那个类里使用=号直接赋值,只能使用+=和-=,这样就避免了其他类中赋值导致任务板被清空,上面的任务都丢失了而没有被执行。也就是相当于event让自己所处的类成为了管理员,只有管理员可以拆除这个任务板,让所有尚未完成的任务被撤出,其他类就相当于玩家,玩家只有发布和删除任务的权限。

至于所谓的Func和Action,这只是Unity帮我们定做的一些特殊任务板。

总而言之,委托、事件、Func、Action云云,都可以抽象类比成任务板,带着这个想法,再去理解他和函数指针的相似性,以及委托的一些进阶用法,大概也会更加轻松

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Tomokochandesu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值