其他分享
首页 > 其他分享> > 【unity2D】API-学习记录4-委托Delegate

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

作者:互联网

目标

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

是什么

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

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

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

用法

使用Delegate,一般分为三步:

  1. 定义委托类型。

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

  1. 声明一个或多个该类型的委托函数。
  2. 通过该委托来调用该函数。

代码相关

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

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

总结

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

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

注意事项

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

  1. delegate变量作为函数容器,可以同时被委任多个函数。

  2. 函数原型相同时,把这类函数传递到delegate上,delegate就能按照“装载”顺序,执行它“装载”的所有函数。

参考资料

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

标签:zombieNO,函数,unity2D,委托,API,plantAttck,Delegate,delegate
来源: https://www.cnblogs.com/OtusScops/p/14722349.html