【unity2D】API-学习记录4-委托Delegate

目标

事件Event是基于委托Delegate的,所以先来学习Delegate的基本概念及其初步应用

是什么

形象地说,委托是存放函数的容器

委托不关心一个函数是如何实现的,它的形态只是一个函数签名,亦可理解为:它定义了某类 具有同样函数签名和返回值的 函数的“类型”

委托除了Delegate,还有Action、Func、predicate,这里我们先只学习Delegate。

使用步骤

使用Delegate,一般分为三步:

  1. 定义委托类型。

当我们用delegate关键字声明委托时,编译器自动为我们生成类。类的名字即为委托变量名,访问类型为定义的委托访问类型。

  1. 声明一个或多个该类型的委托函数。
  2. 把委托函数添加进委托中。
  3. 通过该委托来调用该函数。

代码相关

using UnityEngine;

public class DelegateTest : MonoBehaviour
{
	public delegate void PlantAttck(int zombieNO);//定义委托类型

	public PlantAttck plantAttck;//声明委托变量


	void Update()
	{
		if(Input.GetKeyDown(KeyCode.K))
		{
			plantAttck = null;
			plantAttck += CabbageAttack;
			plantAttck += PeaAttack;
			plantAttck(2);//调用委托
		}

		if(Input.GetKeyDown(KeyCode.L))
		{
			plantAttck = null;
			plantAttck += PeaAttack;
			plantAttck += CabbageAttack;
			plantAttck(3);//调用委托
		}
	}

	void PeaAttack(int zombieNO)//传入僵尸的编号,使豌豆们指定攻击该僵尸
	{
		Debug.Log("Peas are attacking NO."+ zombieNO +" zombie.");
	}

	void CabbageAttack(int zombieNO)//传入僵尸的编号,使卷心菜们指定攻击该僵尸
	{
		Debug.Log("Cabbages are attacking NO."+ zombieNO +" zombie.");
	}
}

依次按下K、L键,结果如图
image

总结

使用委托时,一般分四步:

  1. 定义委托类型。
  2. 声明一个或多个该类型的委托函数。
  3. 把委托函数添加进委托中。
  4. 通过该委托来调用该函数。

注意事项

从上面代码和输出结果应该可以看出一些端倪:

  1. delegate变量作为函数容器,可以同时被添加进多个函数。这种delegate一般被称为multicast delegate。

  2. 函数原型相同时,把这类函数添加到delegate里,delegate就能按照添加顺序,执行它添加的所有函数

参考资料

委托(C# 编程指南)
C# Event/UnityEvent辨析

posted @ 2021-04-30 18:56  AshScops  阅读(159)  评论(0编辑  收藏  举报