【unity2D】API-学习记录4-委托Delegate
目标
事件Event是基于委托Delegate的,所以先来学习Delegate的基本概念及其初步应用。
是什么
形象地说,委托是存放函数的容器。
委托不关心一个函数是如何实现的,它的形态只是一个函数签名,亦可理解为:它定义了某类 具有同样函数签名和返回值的 函数的“类型”。
委托除了Delegate,还有Action、Func、predicate,这里我们先只学习Delegate。
使用步骤
使用Delegate,一般分为三步:
- 定义委托类型。
当我们用delegate关键字声明委托时,编译器自动为我们生成类。类的名字即为委托变量名,访问类型为定义的委托访问类型。
- 声明一个或多个该类型的委托函数。
- 把委托函数添加进委托中。
- 通过该委托来调用该函数。
代码相关
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键,结果如图
总结
使用委托时,一般分四步:
- 定义委托类型。
- 声明一个或多个该类型的委托函数。
- 把委托函数添加进委托中。
- 通过该委托来调用该函数。
注意事项
从上面代码和输出结果应该可以看出一些端倪:
-
delegate变量作为函数容器,可以同时被添加进多个函数。这种delegate一般被称为multicast delegate。
-
函数原型相同时,把这类函数添加到delegate里,delegate就能按照添加顺序,执行它添加的所有函数。