关于Unity中委托与回调函数的应用

1.首先我们需要构造一个用于传输数据并承载回调函数的类

比如:(根据需要自定义构造)

 1 using UnityEngine;
 2 using System.Collections;
 3
 4 //回调函数
 5 public delegate void WarningResult();
 6 public class WarningModel : MonoBehaviour
 7 {
 8     //回调函数
 9     public WarningResult result;
10     //警告文本
11     public string value;
12
13     //构造警告结构体
14     public WarningModel(string s_value, WarningResult s_result = null)
15     {
16         this.value = s_value;
17         this.result = s_result;
18     }
19 }

2.然后在需要的时候实例化出来构造结构体

比如:

 1    /// <summary>
 2     /// 进入游戏按钮触发
 3     /// </summary>
 4     void OnLoginClick()
 5     {
 6         //验证账号密码
 7         //如果账号密码有误,则显示警告面板并return返回
 8         if (m_inputAccount.text == "" || m_inputPassWord.text == "")
 9         {
10                                                             //警告信息                  //回调函数
11             WarningManager.instance.AddWarringError("输入的账号密码不正确,请重新输入",Result);
12             return;
13         }
14
15
16         //进入游戏,按钮弃用
17         m_enterGameBtn.interactable = false;
18
19
20     }
21     //测试用回调函数
22     void Result()
23     {
24         Debug.Log("登录界面回调函数");
25     }
26     

3.最后在需要实现该函数的类中承接回调函数,并实现该方法

如下:

 1  //处理警告后的回调函数
 2     private WarningResult result;
 3
 4     /// <summary>
 5     /// 供外部调用传递显示的警告信息方法
 6     /// </summary>
 7     /// <param name="s_warning">警告信息结构体</param>
 8     public void DoShowWarring(WarningModel s_warning)
 9     {
10         //激活警告界面
11         gameObject.SetActive(true);
12
13         //如果游戏物体没来的及找到,则先赋值游戏物体
14         if (m_warningTex == null)
15         {
16             Init();
17         }
18
19         //显示警告信息
20         m_warningTex.text = s_warning.value;
21         //填充回调函数
22         this.result = s_warning.result;
23
24         //如果回调函数不为空,则执行回调函数
25         if (result != null)
26         {
27             result();
28         }
29     }
时间: 2024-10-10 04:11:43

关于Unity中委托与回调函数的应用的相关文章

Block、委托、回调函数原理剖析(在Object C语境)——这样讲还不懂,根本不可能!

开篇:要想理解Block和委托,最快的方法是搞明白“回调函数”这个概念. 做为初级选手,我们把Block.委托.回调函数,视为同一原理的三种不同名称.也就是说,现在,我们把这三个名词当成一回事.在这篇文章内,Block就是回调函数,委托也是回调函数,不再作详细的区分了.OK,Action! 那么,什么是回调函数?“回调”概念的主语是谁? 举个栗子(伪代码): 首先有个类,我们姑且称之为A类吧. A.h 文件 //声明回调函数:给指定的员工发放工资 -(void)paySalaryForStaff

百度地图 在加载过程中,根据回调函数结果中第一个点设置为中心点

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.4"></script&g

在Inspector 中 设置添加回调函数 - Unity3d编辑器扩展

在做一些开场动画或者其它指定事件触发 一类功能时,需要在编辑环境下设置添加回调函数. 一开始尝试直接使用delegate 来编写,测试发现没有效果,在谷歌搜索到Unity论坛有人提到 delegate 不能被序列化到Inspector 中使用,建议使用 UnityEvent . UnityEvent ,其实在UGUI中经常用到,只是平时不知道是它. 比如按钮的点击事件就是 直接从 UGUI Button 的源代码中搬运出来. 先提供一个带有 UnityEvent 的类 TimeEventPlug

委托和回调函数例子

其实,回调函数就是把方法当做一个参数传入其它方法中,就算直接传递方法名,那宿主方法该用什么来接收这个方法名呢?(比较绕,其实我们知道,如果参数传入"zhangsan",在宿主方法中可以用string来接收它.传入3,可以用int来接收它).聪明的您一定想到了,传入方法,就用委托来接收它. 啥都不说了,例子是最好的老师! public delegate void OutPutMsgHandler(string name); /// <summary> /// 入口类 ///

Unity 之 C# 利用回调函数实现C++匿名函数

做C++开发的都用过匿名函数非常好用,但是C#开发怎么实现呢?前几天做一个拍照功能的时候,我偶然发现某个函数如果是C++的话,用匿名函数太好了,于是开始研究C#的回调,代理,委托等,最后总算是实现了我想要的吧,不知道到底算什么调用.有大神的话可以给出评价. 参考文章: 详解C#委托,事件与回调函数Unity3D研究院之利用C#实现代理模式(四十) 直接上代码吧,不废话了.A类是委托的定义类,B类是调用委托(匿名函数)的类. using UnityEngine; using System.Coll

Java/Android中的函数调用&amp;回调函数&amp;自定义回调函数

在做Android自定义控件时遇到要自定义回调函数的问题,想想自己还暂时没有那么精深的技术,赶紧返过头回来再重新研究Java中回调函数的问题.然而不幸的是,网上太多杂乱的帖子和博客都是转来转去,而且都是那一篇"C中的回调函数.....指针.....java....",一点看不出来是自己的思路,估计都是哪哪哪抄来的!(呵呵,要么就是吐槽对了,要么就是我水平太烂读不懂还妄加评论)还有一些很不错的文章,我会在最后参考中加上链接,大家可以看看. 那么来开始我们的正题--什么是回调函数? 我们一

Cocos2d-x 3.x中新的回调函数归纳

由于引入了C++ 11特性,cocos2d-x 3.x中许多实现方案,相对于以前的cocos2d-x 2.x,都有了很大的改进,当然性能上也得到一定的提升. 本文关注的是回调函数从2.x到3.x的变化. cocos2d-x 2.x时代的回调函数 2.X时代主要使用CCCallFunc.CCCallFuncN和CCCallFuncND等几种方式实现. CCCallFunc.CCCallFuncN和CCCallFuncND都用来创建带有回调函数的动作,区别主要在于回调函数是否带有参数. 2.x时代实

Unity中Awake与Start函数的调用情况总结(转)

在Unity中编写脚本时,有一系列的可重写(override)函数供我们使用,其中的Awake与Start两个函数作为初始化与设置之用,几乎在每个脚本中都要用到.因此,正确的把握这两个函数的调用时机,就能让我们在程序开发过程中避免一些错误,提高开发效率.比较懒,所以就没有上图,欢迎大家的批评指正: ) 1.  Awake函数 首先,我们来看unity的参考手册中对Awake函数的一些说明情况: 当脚本实例被加载时会调用Awake函数:Awake函数在所有的游戏对象被初始化完毕之后才会被调用:在脚

Unity中Awake与Start函数361天恒平台搭建的调用情况总结

在Unity中编写361天恒平台搭建论坛:haozbbs.com Q1446595067 脚本时,有一系列的可重写(override)函数供我们使用,其中的Awake与Start两个函数作为初始化与设置之用,几乎在每个脚本中都要用到.因此,正确的把握这两个函数的调用时机,就能让我们在程序开发过程中避免一些错误,提高开发效率. 1. Awake函数 首先,我们来看unity的参考手册中对Awake函数的一些说明情况: 当脚本实例被加载时会调用Awake函数:Awake函数在所有的游戏对象被初始化完