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 Framework、Mono 等)之间共享代码,
.NET Standard 常用于开发一个可以在多个 .NET 实现上运行的库,
对于需要在不同平台(如 Windows、Linux、macOS、iOS、Android)上运行的应用,.NET Standard 也提供了一致的 API 集

各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

更多信息可以在Unity官网说明查看:Unity - 手册:C# 编译器 (unity3d.com)

为什么不同Unity版本支持的C#版本不同?

之所以不同Unity版本支持的C#版本不同,主要是不同Unity版本 使用的 C#编译器和脚本运行时版本不同

比如:Unity2021.3 使用的脚本运行时版本等效于 .NET 5,编译器为 Roslyn(罗斯林编译器)
所以随着Unity的更新,它一般会采用较新的 编译器和运行时版本
新版本的脚本运行时将为 Unity 带来了大量的新版 C# 功能和 .NET 的功能,也就意味着它可以支持更高版本的C#

不同版本的C#对于我们来说有什么意义?

我们可以根据不同 Unity 支持的对应 C# 版本,来判断我们是否可以使用 C# 各版本中的一些新功能用来编程
虽然即使我们没有掌握这些功能也能正常进行开发,但是往往新功能可以让我们写出更简单明了的代码,可以节约代码量

Unity的.Net API兼容级别

在PlayerSetting->Other Setting->Api Compatibility Level中
我们可以设置.Net API的兼容级别,主要有两种选择 (2020.3版本以前!)

  • .Net 4.x(特殊需求时):
    具备较为完整的.Net API,甚至包含了一些无法跨平台的API
    如果你的应用主要针对Windows平台,
    并且会使用到.Net Standard 2.0中没有的功能时,会选择使用它

  • .Net Standard 2.0(建议使用):
    是一个.Net标准API集合,相对.Net 4.x包含更少的内容,
    可以减小最终可执行文件大小,它具有更好的跨平台支持

  • 注意!(2021.3版)

    2021.3版里,没有了.NET 4.x选项,取而代之的是.NET Framework****而 .Net Standard 2.0 也变为了 .Net Standard 2.1

2020.3及以前:

image

2021.3:

image

.NET Standard 2.0 (.NET Standard 2.1)配置文件大小是 .NET 4.x 配置文件的一半,所以我们尽量使用 .NET Standard 2.0(.NET Standard 2.1)