Unity-通过Action和Func来注册事件(event)

                     Unity-通过Action和Func来注册事件(event)


目录

1.博文介绍

2.Action And Func<>

3.具体用法

4.资源下载

5.结语


1.博文介绍

利用Action 和 Func<>可以简化事件的声明过程,本篇文章只介绍通过Action 和 Func<>来注册事件。


2.Action And Func<>

public delegate void MyDelegate();

public event MyDelegate myEvent;

上述两个式子可以简写为:public event Action myEvent;

 

Action:表示没有参数无返回值的委托

Action<>:表示带参数的委托

Func<T>:表示带返回值的委托

Func<T,DT>:表示带参数带返回值的委托


3.具体用法

直接撸代码了,大家看代码,清晰明了

TestOne:脚本1声明了事件

using System;
using UnityEngine;

/// <summary>
/// Action and Func<>
/// Date:2018/11/4
/// Author:Mr.Sun
/// </summary>
public class TestOne : MonoBehaviour {

	#region Action 表式无参数无返回值

	/// <summary>
	///这个式子等同于
	/// public delegate void Mydelegate();
	/// publid static event Mydelegate myEvent;
	/// </summary>
	public static event Action myEvent;

	
	#endregion
	
	#region Action<> 带参数

	/// <summary>
	///这个式子等同于
	/// public delegate void Mydelegate(string str);
	/// publid static event Mydelegate myEventTwo;
	/// </summary>
	public static event Action<String> myEventTwo;

	/// <summary>
	///这个式子等同于
	/// public delegate void Mydelegate(string str,int num,bool isFuc);
	/// publid static event Mydelegate myEventThree;
	/// </summary>
	public static event Action<String,int,bool> myEventThree;
	
	#endregion

	#region Func<string> 带返回值,无参数

	/// <summary>
	///这个式子等同于
	/// public delegate string Mydelegate();
	/// publid static event Mydelegate myEventFour;
	public static event Func<string> myEventFour; 

	#endregion

	#region Func<string,int> string参数 int返回值

	/// <summary>
	///这个式子等同于
	/// public delegate string Mydelegate(int num);
	/// publid static event Mydelegate myEventFive;
	public static event Func<int,string> myEventFive; 
	
	/// <summary>
	///这个式子等同于
	/// public delegate string Mydelegate(int num,bool isFuc);
	/// publid static event Mydelegate myEventFive;
	public static event Func<int,bool,string> myEventSix; 

	#endregion
	
	// Update is called once per frame
	void Update () {

		if (Input.GetKeyDown(KeyCode.A))
		{
			if (myEvent!=null)
			{
				myEvent();
			}
			
			if (myEventTwo!=null)
			{
				myEventTwo("Action<String>");
			}
			
			if (myEventThree!=null)
			{
				myEventThree("Action<String,int.bool>",10,true);
			}
			
			if (myEventFour!=null)
			{
				print(myEventFour());
			}
			
			if (myEventFive!=null)
			{
				print(myEventFive(1));
			}
			
			if (myEventSix!=null)
			{
				print(myEventSix(10,true));
			}
		}
		
	}
}

 

TestTwo:脚本2绑定了方法

using System;
using UnityEngine;


/// <summary>
/// Action and Func<>
/// Date:2018/10/13
/// Author:Mr.Sun
/// </summary>
public class TestTwo : MonoBehaviour {

	
	// Use this for initialization
	void Start ()
	{
		TestOne.myEvent += FucOne;

		TestOne.myEventTwo += FucTwo;
		
		TestOne.myEventThree += FucThree;
		
		TestOne.myEventFour += FucFour;

		TestOne.myEventFive += FucFive;
		
		TestOne.myEventSix += FucSix;

	}
	

	void FucOne()
	{
		print("【Action】:无参数,无返回值");
	}

	void FucTwo(string str)
	{
		print("参数1:"+str);
	}
	
	void FucThree(string str,int num,bool isFuc)
	{
		print("参数1:"+str+"\n参数2:"+num+"\n参数3:"+isFuc);
	}

	string FucFour()
	{
		return "【Func<String>】";
	}

	String FucFive(int num)
	{
		print("参数:"+num);
		return "返回值:【Func<int,string>】";
	}
	
	
	String FucSix(int num,bool isFuc)
	{
		print("参数1:"+num+"\n参数2:"+isFuc);
		return "返回值:【Func<int,bool,string>】";
	}
	
}

非常清晰明了,不用做解释了。


4.资源下载

本文源码:

https://download.csdn.net/download/mr_sun88/10762569


5.结语

       希望各位同学看过后能有所收获,另博主能力有限,文中若有错误的地方期望各位看家可以指点交流。

       QQ交流群:806091680(Chinar)

       该群为CSDN博主Chinar所创,推荐一下!我也在群里!

       本文属于原创文章,转载请著名作者出处!!!!!

“中级/进阶篇”讲解特点与内容:         本“中级”与“进阶”篇, 是面向初中级游戏研发人员,以及Unity中高级学习者。为了更加深入的刨析各个语法的本质,我们采用反编译解读IL中间语言的方式,来解构语法重点与难点。 中级篇内容主要讲解: .Net 框架、里氏替换原则(LSP)、类的属性极其本质特性、IS ,AS 关键字、字符串的“驻留性” 原理、深入解析Equals() 原理、枚举类型、自定义集合、深入解析动态集合特性与内部原理、泛型集合、泛型约束、初级委托事件讲解等。 进阶篇是在中级篇的基础之上,进一步研究与讲解关于IO操作、序列化、正则表达式、系统委托ActionFunction、Predicate等)、反射原理与特性、Linq查询表达式、多线程、线程池、任务、Socket套接字编程(Tcp与UDP协议),以及最后使用Unity开发具备实战价值的通讯聊天程序等。C#“进阶篇”教学详细说明如下:1: IO操作与序列化      学习文件、目录、二进制文件、文本文件的读取与写入底层原理。学习文件序列化与反序列化技能。2: 正则表达式      学习正则表达式的强大作用与常用原字符的含义与应用场景。3: 深入委托事件      学习ActionFunc、Predicate 系统内置委托类型,已经适用场合。学习匿名方法、Lambda表达式。深入解析委托事件的区别。4: 反射与特性      学习反射的概念与动态调用的重要应用价值,以及Type、Assembley核心类等,最后讲解“特性”技术。5: Linq 查询表达式     学习Linq 查询表达式对于“对象集合”(支持IEnumberable 或IEnumberable) 以及SQL数据库、XML文档方面的强大查询功能。    6: 多线程     学习多线程以及线程传参、线程取得返回数值技术,前台与后台线程、线程的同步、线程池、任务等技术。   7: Socket套接字通讯     学习Socket套接字通讯中,Tcp与UPD通讯协议的不同应用场景,以及各自的演示示例,最后用Unity开发一款实用性的聊天通讯工具。温习提示:           本C# for Unity 使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(学员使用更高版本,对学习没有任何影响)。      A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值