我想与时俱进,看着 C#6/7 中的新芯片和包子,得到了启发。那里的一切都那么美味和凉爽,不使用它是一种罪过。我打开Unity、Visual Studio,写了几行然后……陷入了绝望。对于任何使用新功能的尝试,他们都会告诉我一件事:
功能bla bla bla在 C#4 中不可用。请使用语言版本 6 或更高版本
或者
功能bla bla bla不能使用,因为它不是 C# 4.0 语言规范的一部分
查看Unity 5.6使用的Mono版本(!!!最新版本),它是:. 因此,它拥有 C#3 中的所有内容,外加 C#4 中的一部分。2.0 (Visual Studio built mono)
这并不能使我很高兴和满足。
毕竟,有没有可能使用该语言的新版本,而不是在遥远的 2010 年停滞不前?可以做什么以及如何做?
更新 (01/12/2021)
根据数据,您现在可以使用本机和 C# 7.3 。
2020.1 beta 文档仍然提到 7.3,但 2020.2 表示将支持 8.0。
其他统一版本的旧答案
是的,可以使用较新的版本,但有一个警告......下面有更多内容。
虽然Unity在CLR 2.0上停留了很长时间,但新的 C# 功能并不需要最新版本的CLR。如果明确要求,Microsoft和 Mono编译器可以为CLR 2.0编译C# 5/6/7 。
注意:但是,某些功能仍然不可用,例如
dynamic
.因此,可以在Unity C# 5.0 和 6.0 Integration bitbucket 存储库中找到此功能(目前可能是唯一的功能)
需要做什么?
对于 C# 6.0
CSharp60Support
从存储库(或从下载页面)复制到您的Unity项目。该文件夹必须放在项目根目录中,在Assets
. 不在里面!CSharp60Support.unitypackage
(位于文件夹中CSharp60Support
)到您的项目中。/CSharp60Support/ngen install.cmd
以管理员权限运行。该命令将使用Ngen编译 csc.exe、pdb2mdb.exe 和 mcs.exe ,这将使Unity的编译速度更快一些。对于 C# 7.0
CSharp70Support
从存储库(或从下载页面)复制到您的Unity项目。该文件夹必须放在项目根目录中,在Assets
. 不在里面!CSharp70Support.unitypackage
(位于文件夹中CSharp70Support
)到您的项目中。/CSharp70Support/ngen install.cmd
以管理员权限运行。该命令将使用Ngen编译 csc.exe、pdb2mdb.exe 和 mcs.exe ,这将使Unity的编译速度更快一些。因此,仅更改当前项目所在的文件夹。其余项目将照常使用当前版本的语言、Mono 和其他 tin :)
这个怎么运作?
/Assets/CSharp vNext Support/Editor/CSharpVNextSupport.dll
是一个编辑器扩展,它通过反射修改编辑器的内部数据,告诉它使用替代的 C# 编译器 (/CSharpXXSupport/CSharpCompilerWrapper.exe
)。如果不存在,则使用默认值。CSharpCompilerWrapper.exe
接收来自Unity的编译请求并将其转发到当前的 C# 编译器之一,该编译器使用以下规则:CSharp70Support
且包含文件夹Roslyn
,则使用 C# 7.0 编译器;CSharp60Support
并且包含文件夹Roslyn
,则使用 C# 6.0 编译器;CSharp60Support
并且包含,则使用Mono C# 6.0mcs.exe
编译器;/Unity/Editor/Data/Mono/lib/mono/2.0/gmcs.exe
)。确保编译器
CSharpCompilerWrapper.exe
确实有效!为此,请查看编译日志:UnityProject/CSharpXXSupport/compilation.log
支持哪些平台?
它适用于所有主要平台:
您可以在存储库的主页上阅读更多信息和小限制 ,也可以(因为上面给出了主要信息)以英文来源的引用形式:
PS我会尝试跟踪主题并保持最新版本的链接是最新的。
目前(01/12/2020)在Unity中,C#7.3语言的版本是证明 ,不需要执行特殊操作,一切都是开箱即用的,如果我错了,请指正。