评论

收藏

基于unity开发了解C#语言中的委托与事件(一)

游戏开发 游戏开发 发布于:2021-07-18 09:21 | 阅读数:350 | 评论:0

这部分文章基于unity开发主要介绍的内容包含C#语言中的泛型类,泛型方法,委托,多播委托,事件,匿名方法,Lambda 表达式等知识点。
在正式开始之前,我们先来简单了解些前置知识。
1.什么是.Net平台?
①.Net 平台是“微软开发者全家桶”,是一个优化过的“开发解决方案”
②.Net 平台不单单包含C#,还包含ASP.Net,VB.Net,F#等语言,另外使用.Net 平台能开发的方向涵盖手机应用,桌面应用,Web 应用等方向。
③使用.Net 平台开发出来的产品,都不是直接运行在电脑的CPU 和内存里的,而是运行在.Net 虚拟机(.Net Framework)里面的。
2.是C# 语言,C#语言是.Net 平台下主推的一门编程语言。
①我们使用C#写的代码,并不是真正的代码;
C 语言编写的的代码,编译后直接是二进制格式,双击就可以运行;
所有.Net 平台下的语言写的代码,编译后不是二进制,而是“IL 中间语言”,双击运行,需要经过.Net 虚拟机环境进行二次解析才能运行;
④所以说.Net 平台开发的程序相对于C,C++开发的程序,效率较低。
3.Mono 虚拟机
Mono 是第三方公司开发的一个开源项目,目的就是让.Net 开发出来的产品可以跨平台运行使用C#脚本开发的Unity 项目,之所以能在Android,IOS等其他平台正常运行,依赖的就是Mono 环境。
4.两种C#脚本
在Unity 项目开发过程中,我们可以使用“两种C#脚本”;
其一:Mono 子类C#脚本,在Project 面板上直接右键创建出来的C#脚本,这种脚本默认直接继承MonoBehaviour 类。
①这种脚本其实就是Unity 中的自定义组件,可以直接挂载到Unity 场景中任何游戏物体上
不需要我们使用new 关键字进行实例化,只有挂载到了游戏物体上,运行起来后,unity 引擎会自动完成该脚本的对象实例化;
脚本中含有生命周期方法(Awake,Start,Update......);
其二:非Mono 子类C#脚本,取消对MonoBehaviour 类的继承。
①这种就是普通的C#脚本,不是Unity 中的组件,也就无法挂载到游戏物体上
必须使用new 关键字进行类的对象的实例化
没有继承Mono,也就没有生命周期方法
所有在Mono 类中定义的方法,都无法使用,比如:Invoke 和协程。
那么何时使用非Mono 子类C#脚本呢?
①当该脚本不需要挂载到游戏物体上的时候;
②开发过程中的数据实体类;
③工具类,例如专门负责xml 的读写;
做个简单的表格归类,如下图所示:
DSC0000.png

5.Mono 子类继承关系
Object[对象] --> Component[组件] --> Behaviour[行为类] -->MonoBehaviour[Mono 行为类] --> MyScript[我们写的类]
6.GameObject 与gameObject
GameObject
这是一个类,这个类中有很多静态方法,我们直接使用类名.方法名()进行使用。是类就会有对象,Unity 中所有的游戏物体都会实例化出一个该类的对象。我们使用gameObject 来访问。
gameObject
是Component 脚本中定义的一个“自读属性”返回值类型GameObject。代表的是当前脚本所挂载到的游戏物体本身的实例对象。

关注下面的标签,发现更多相似文章