[unity3d]unity中C#委托的应用
C#中有一种还是挺实用的类型,就是委托类型,这也是初学者比较难理解的类型,我们常常将委托和事件合起来讲,其实他们两是有些区别的,委托(delegate)是一种类型,而事件(Event)是一种实例(委托中的一种)。下面我就从参考网上的一个例子,讲解一下unity中C#委托的应用。
我们新建一个脚本,取名TestDelegate。这个主要的功能就是点击中文按钮输出中文名字,点击英文按钮输出英文名字。这里有两个函数分别实现了这两个功能。如果不用委托,可以用if else,switch来实现,相比新手用的是比较多的,但大牛们的代码一般比较少出现,所以这就告示我们要对我们的代码进行仔细的研究,下面就看一下代码:
using UnityEngine; using System.Collections; public class TestDelegate : MonoBehaviour //定义一个委托(格式是不是很类很像),用来指向我们某个函数。(c++里面的指针函数) //param参数是名字 private delegate void DebugString(string param); /// summary /// 输出中文名字 /// /summary public void DebugNameOfChina(string str) Debug.Log("中文名字:" + str); /// summary /// 输出英文名字 /// /summary public void DebugNameOfEnglish(string str) Debug.Log("English Name:" + str); //定义一个委托的变量事件 private DebugString handlerDebugString;
//我想输出中文名字的话就给handlerDebugString 赋值成输出中文名字的这个函数DebugNameOfChina handlerDebugString = DebugNameOfChina; handlerDebugString("丁小未"); else if (GUILayout.Button("Debug English Name")) //我想输出英文名字的话就给handlerDebugString 赋值成输出中文名字的这个函数DebugNameOfEnglish handlerDebugString = DebugNameOfEnglish; handlerDebugString("DingXiaowei"); }
这里参考了一些网上的教程,@与现实冲突的教程写的比较不错,但我也加入一点自己的理解,我个人理解这个委托有点类似就是指针函数的意味,定义一个委托变量,也就类似C/C++中的函数指针,指向哪个函数就调用执行该函数的功能。
然后我们运行一下,看一下效果:
了解过C/C++的同学一类比函数指针也就比较容易理解了,其实也就那么回事,想要用哪个函数就指向这个函数,然后去调用这个函数的方法,其实委托还有+=和-=也就是多路广播机制,下面举例:
using UnityEngine; using System.Collections; public class TestDelegate : MonoBehaviour //定义一个委托(格式是不是很类很像),用来指向我们某个函数。(c++里面的指针函数) //param参数是名字 private delegate void DebugString(string param); /// summary /// 输出中文名字 /// /summary public void DebugNameOfChina(string str) Debug.Log("中文名字:" + str); /// summary /// 输出英文名字 /// /summary public void DebugNameOfEnglish(string str) Debug.Log("English Name:" + str); //定义一个委托的变量事件 private DebugString handlerDebugString;
大家猜猜结果是啥,跟你预期的是不是一样的呢?
可能觉得容易出错的就是第二条和第三条,也就是红色部分,他是分别执行了这两个事件,我们后来加上了一个事件嘛,所以就都执行一遍,然后参数就是委托方法带的参数,委托这是C#的基础知识,跟unity没关系,unity知识一个UI展示的界面而已,后带支持的还是C#语言,所以在学习unity开发的时候,C#/.NET基础学好还是很有必要的!
==================== 迂者 丁小未 CSDN博客专栏=================
MyBlog:http://blog.csdn.net/dingxiaowei2013 MyQQ:1213250243
Unity QQ群:375151422 cocos2dx QQ群:280818155
====================== 相互学习,共同进步 ===================
转载请注明出处:http://blog.csdn.net/dingxiaowei2013/article/details/18428727
欢迎关注我的微博:http://weibo.com/u/2590571922
有趣而又被忽略的Unity技巧 一个常见的工作情景是我们在调整场景内的某些组件参数时,没有注意到自己是在Play Mode的模式下进行的,从而导致修改没有被保存下来。这个问题的关键在于是我们没有意识到自己已经处在Play Mode,如果我们能够在修改参数的时候,清楚的意识到自己处于Play Mode,那么我们自然可以通过Copy Component来保存数据或者是选择在Editor Mode进行修改。
Unity小技巧介绍 技巧一为字段声明的代码中加上[Tooltip(“XX”)]属性声明,在检视面板中,当鼠标悬停在字段名上,会出现Tooltip中指定的提示信息,让策划人员能更好地理解字段代表的意思。技巧二在层级视图中选中游戏对象,按快捷键Shift + Alt + A可以快速设置对象激活状态。
本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)
蓬莱仙羽 麦子学院讲师,游戏蛮牛专栏作家,CSDN博客专家,热爱游戏开发,热爱Coding!
相关文章
- c#代码的执行过程及反射的应用
- 实际应用中的C#加密
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 VC中进程与进程之间共享内存 .net环境下跨进程、高频率读写数据 使用C#开发Android应用之WebApp 分布式事务之消息补偿解决方案
- C#学习记录——集合:使用集合
- C#【必备技能篇】Winform实现多语言切换(.resx文件的应用)
- C#,字符串匹配(模式搜索)BF(Brute Force)暴力算法的源代码
- C#,初学琼林(02)——数组和值计算(Sum,求和)的源程序,相关问题及解决之道
- C#实现UDP广播
- C#数组按值和按引用传递数组区别
- C# 实现WEBSOCKET聊天应用示例
- C#委托Delegate教程案例
- c#中虚方法和抽象方法的应用
- c# 中的JsonConverter进行自定义序列化与反序列化,自定义转换器
- 关于C#static的总结
- C# 之 随机数应用 -- 洗牌算法
- 在C#应用中使用Common Logging日志接口
- C#-中IO的应用
- C#特性的介绍及应用场景
- C#快速开发移动应用了
- C# Devexpress GridView获得当前活动行(选中行)的索引
- 【C#】使用user32.dll的MessageBox弹窗消息
- C# 非递归生成树 10万+数据的一个递归 正式版