CS5L7——CSharp 5 功能和语法
CS5L7——CSharp 5 功能和语法
本章代码关键字
12async //异步方法关键字await //挂起方法,开启新线程的关键字,直到线程执行完毕再继续执行该方法后续逻辑
C# 5 的新增功能和语法
调用方信息特性(C#进阶——特性)
异步方法 async 和 await
在学习异步方法 async 和 await 之前
我们必须补充一些知识点
线程和线程池
Task类
异步与同步
同步和异步主要用于修饰方法
同步方法:
当一个方法被调用时,调用者需要等待该方法执行完毕后返回才能继续执行
异步方法:
当一个方法被调用时立即返回,并获取一个线程执行该方法内部的逻辑,调用者不用等待该方法执行完毕
简单理解异步编程,我们会把一些不需要立即得到结果且耗时的逻辑设置为异步执行,
这样可以提高程序的运行效率,避免由于复杂逻辑带来的的线程阻塞
何时需要异步编程
需要处理的逻辑会严重影响主线程执行的流畅性时,我们需要使用异步编程,比如:
复杂逻辑计算时
网络下载、网络通讯
资源加载时等等
异步方法async和await
async 和 ...
CS5L6——CSharp 1~4 功能和语法
CS5L6——CSharp 1~4 功能和语法
C# 1~4版本中的功能和语法,大多数我们已经在C#四部曲中学习完毕
命名和可选参数可以帮助我们少写一些重载函数
动态类型可以让我们在某些情况下节约代码量
但是由于要使用.Net 4.x(.NET Framework),并且IL2CPP不支持,所以不建议使用它,但是如果有特殊需求不得不用,那我们只有退而求其次
本章代码关键字
1dynamic //动态类型,编译时不会检查该对象的类型,与该对象相关的操作都将一起打包,只在运行时进行评估
最低支持的C#版本
只要是Unity 5.5及以上的版本,就支持C# 4版本
C# 1~4的功能和语法
注意:
在这里不会提及所有的内容
主要会提及Unity开发中会用到的一些功能和特性
对于一些不适合在Unity中使用的内容会省略
C# 1 —— 委托、事件(C#进阶)
C# 2 —— 泛型、匿名方法、迭代器、可空类型(C#进阶)
C# 3 —— 隐式类型、对象集合初始化、Lambda表达式、匿名类型(C#进阶),
自动实现属性、拓展方法、分部类(C#核心),Linq相关的表达式树(以后专门讲)
...
CS5L5——CSharp版本和Unity的关系
CS5L5——CSharp版本和Unity的关系
由于新版本Unity会同时更新,Scripting Runtime(脚本运行时)和 C#编译器的版本
所以随着Unity版本的提升,我们能够使用到的C#的新功能和新特性也会增加
我们要大概了解自己正在使用的Unity版本能够支持的C#版本,这样在开发时我们就能使用一些对应版本的新功能和特性了
Unity 2021.3 ~ 2022.3 —— C# 9
Unity 2020.3 —— C# 8
Unity 2019.4 —— C# 7.3
Unity 2017 —— C# 6
Unity 5.5 —— C# 4
并且,对于.Net API兼容级别的认识是,正常情况下,我们都会使用 .NET Standard
补充:何为.NET Standard
.NET Standard 是针对多个 .NET 实现推出的一套正式的 .NET API 规范。 推出 .NET Standard 的背后动机是要提高 .NET 生态系统中的一致性。
.NET Standard 允许库在不同的 .NET 实现(如 .NET Core、.NET Framewor ...
CS5L4——IL2CPP模式可能存在的问题处理
CS5L4——IL2CPP模式可能存在的问题处理
对于我们目前开发的新项目,都建议大家使用IL2CPP脚本后处理模式来进行打包
主要原因是因为它的效率相对 Mono 较高,同时由于它自带裁剪功能,包的大小也会小一些
但是如果在测试时出现类型无法识别等问题,需要用到我们这节课学习的知识点来解决这些问题
安装IL2CPP打包工具
Edit——Project Settings——Player——Scripting Backend里选择IL2CPP即可将IL2CPP作为脚本后处理方式
但是在此之前,我们需要先到Unity Hub里下载IL2CPP模块才能使用IL2CPP打包
IL2CPP打包存在的问题
类型裁剪
IL2CPP在打包时会自动对Unity工程的DLL进行裁剪,将代码中没有引用到的类型裁剪掉,以达到减小发布后包的尺寸的目的。
然而在实际使用过程中,很多类型有可能会被意外剪裁掉,造成运行时抛出找不到某个类型的异常。
特别是通过反射等方式在编译时无法得知的函数调用,在运行时都很有可能遇到问题
解决方案:
IL2CPP处理模式时,将 PlayerSetting -> ...
CS5L3——Unity跨平台的基本原理之IL2CPP
CS5L3——Unity跨平台的基本原理之IL2CPP
本章主要内容
IL2CPP是什么
是Unity4.6.1版本之后加入的新的一种跨平台解决方案
Mono跨平台回顾
C#代码—>Mono C#编译器—>IL中间代码—>Mono VM—>操作系统的原生代码
IL2CPP跨平台原理
C#代码—>Mono C#编译器—>IL中间代码—>IL2CPP—>C++—>C++编译器—>原生汇编代码—>IL2CPP VM
Mono和IL2CPP的区别
IL2CPP效率高于Mono,跨平台也更好维护。
Mono是JIT即时编译,IL2CPP是AOT提前编译
Mono和IL2CPP两种方式的使用建议
建议使用效率更高的IL2CPP
IL2CPP
IL2CPP 是在 Unity4.6.1 p5 之后的版本中加入的脚本后处理方式
你可以把它简单理解为是:继Mono之后的一种跨平台解决方案
顾名思义就是把 IL中间代码 转译为 CPP代码(C++)
想要了解它我们可以先回顾一下Mono,Mono的优缺点回顾
IL2CPP跨平台原理
通过I ...
CS5L2——Unity跨平台的基本原理之Mono
CS5L2——Unity跨平台的基本原理之Mono
主要内容
Unity和Mono的关系
利用Mono实现Unity上层逻辑的跨语言和跨平台
Unity跨平台的必备概念
Unity底层是C/C++,上层逻辑支持多语言(目前只用C#)
Mono的基本构成有C#编译器、Mono运行时(虚拟机)、各种类库等
Unity跨平台的基本原理(Mono)
将基于CLI公共语言基础规则的语言编译成CIL公共中间语言,再通过Mono VM(虚拟机) 将其在各操作系统中转译为原生机器码进行运行
基于Mono跨平台的优缺点
无限跨平台,维护工作量大,低版本的Mono无法支持新版C#新功能
Unity和Mono的关系
我们上节课了解了.Net的相关知识
我们先回顾一下其中的两个关键点:
Mono是基于.Net的跨平台方案,同时它具备.Net平台的跨语言特点
Mono的第一个版本是在2004年发布的
Unity公司于2004年成立
Unity的底层是通过C/C++来完成的
但是为了更方便的让开发者使用,Mono在当时成为了不二之选,因为它同时具备跨平台和跨语言的两个特性
总结:
Unity希望能有更多的 ...
CS5L1——.NET相关知识
CS5L1——.NET相关知识
微软的.NET是什么
是一个包含编程语言、框架、IDE等产品的系列产品统称
.Net跨语言的实现
CLI公共语言基础结构(CTS公共类型系统)
CLS公共语言规范是它的子级
.Net跨平台的实现
基于 .NET Framework 的 Mono 和 .NET Core
都基于CLI公共语言基础结构和CLR公共语言运行时实现跨语言和跨平台
.NET
微软的 .NET 既不是编程语言也不是框架,是类似于 互联网时代、次时代、21世纪、信息时代 之类的宣传口号
它是一整套技术体系的统称,或者说它是微软提供的技术平台的代号
包含的内容有:
框架体系:.NET Framework、.NET Core、Mono 等等
开发语言:C#、VB、F等等(C#是.Net平台主推的开发语言)
开发工具:Visual Studio、Visual Studio Code 等等
你可以简单理解.NET本质上就是微软为自己的一系列产品取的一个代号
微软做.NET平台的目的
跨语言
只要是面向.NET平台的编程语言(C#、VB、C++、F#等等),
用其中一种语言编写 ...
CS5——CSharp知识补充
CS5——CSharp知识补充
C#知识补充——系列代号CS5
虽然通过C#四部曲的学习,我们已经掌握了绝大部分常用和实用的C#知识点。
但是通过本套C#知识补充课程,我们可以达成以下目的:
了解Unity跨平台的基本原理
了解不同版本Unity使用的C#版本,并学习这些C#版本中的知识点
对实用的C#知识点进行补充
从而进一步的提高我们阅读代码的能力和编程能力
注意!C#新加的内容更多是为了节省代码量提升开发效率,但是它并不是必备的内容 ,
因为即使你没有学习这些内容,也能够进行正常开发要根据实际需求选择使用,
而不要为了使用而使用,更重要的还是要培养自己的逻辑思维能力
由于该系列是对 C# 知识点的补充,随着Unity版本的更新和 C# 版本的更新,
将来可能会存在各种新功能和新语法,所以本系列将一直处于持续更新的状态
随着 Unity 对 C# 版本支持的提高,以及新知识点的加入,其中 C# 各版本新功能和语法和 C# 其它知识补充,将会随着时间推移不停的往其中添加新知识点
C# 知识补充主要讲哪些知识:
Unity跨平台的基本原理
C#版本和Unity的关系
C#各版本新 ...
UMVCL1——MVC基本概念
UMVCL1——MVC基本概念
MVC基础概念.pdf
MVC的历史——主要用于软件和网页开发
MVC的基本概念——数据、界面、业务逻辑分离
MVC在游戏中的应用——非必须的UI系统开发框架
MVC的历史
MVC思想的出现,并不是为了做游戏,它是一种软件开发的编程思想
自定前提:
我们粗略的把计算机上使用的工具分为:应用软件、网页、游戏
MVC是应用软件开发和网页开发里最常用和流行的通用开发框架
软件、网页的基本构成
应用软件和网页基本功能都是由UI(用户界面)和Data(数据)构成的
软件、网页的使用规则
就是因为下面的使用规则,所以诞生了MVC
MVC的基本概念
MVC全名是Model View Controller
是模型(model)-视图(view)-控制器(controller)的缩写
它是一种软件设计规范,用一种将业务逻辑、数据、界面显示这三者分离的方法来组织代码
将业务逻辑聚集到一个部件里面,再改进和个性化定制
界面及用户交互的同时,不需要重新编写业务逻辑
不使用或者使用MVC思想制作一个界面功能
左图为不使用的,右图为使用的
MVC的基本 ...
UMVCL5——MVX
UMVCL5——MVX
MVC的美中不足
M和V之间存在着联系,也就是数据和界面之间存在着耦合性,当数据结构改变时会牵扯界面逻辑随之改动。
在MVC中当需求变化时,需要维护的对象数量会增加
例如:
修改数据Model,可能涉及View和Controller都要修改,
是因为界面和数据还存在一定的耦合性造成的
MVX
铁打的M和V,流水的X(X即不确定的内容)
因为数据Model和界面View是必备的内容,所以我们可以通过改变X元素来优化原本的MVC
也就是改变联系和处理M(数据)和V(界面)的方式
MVP:切断View和Model的耦合,让Presenter(主持人)处理一切
MVVM:MVP的升级版,让ViewModel和V进行双向数据绑定,更新VM等同于更新V,反之同理
MVE:用EventCenter事件中心来分发消息
学习MVX的目的
不要拘泥于框架结构和设计模式****要找到一个适合自己项目的,一个稳定的,有序的,能满足项目需求的实现方式