Unity Visual Studio C#版本同步

Tav*_*dos 5 c# unity-game-engine visual-studio

我刚开始在我的Unity游戏中使用委托和事件来在适当的时候更新标签,而不是每帧更新标签,尽管大多数时候没有发生变化.

为了确保,这是一个静态事件调用

public static event OnSomething onSomething;
Run Code Online (Sandbox Code Playgroud)

实际上有听众,我用

if (onSomething!= null) {
    onSomething();
}
Run Code Online (Sandbox Code Playgroud)

这只是一个方便的问题,但Visual Studio 14(2015)说,这可以简化为

onSomething?.Invoke();
Run Code Online (Sandbox Code Playgroud)

我也更喜欢,因为我熟悉nullables并想使用它们,但如果我确实将代码更改为建议,Unity表示

error CS1644: Feature `null propagating operator' cannot be used, because it is not part of the C# 4.0 language specification.
Run Code Online (Sandbox Code Playgroud)

那么有没有办法让Unity项目使用C#的v4.0,或者我可以告诉Visual Studio,该项目使用旧版本的C#,所以它会停止这些建议吗?

编辑:很少澄清:我不一定要使用任何特定的C#版本.我想使用最新版本来使用这些"酷炫的新功能",只要没有主要原因不使用最新版本.

Pro*_*mer 5

我不一定要使用任何特定的C#版本.我想使用最新版本来使用这些"酷炫的新功能",只要没有主要原因不使用最新版本.

Unity 没有 正式支持.NET 3以上的任何内容.虽然,他们目前正在研究这个问题.他们希望首先支持.NET 4,然后支持其他.NET版本.

你能在Unity中使用最新的C#吗?

是!

butbucket上有一个专门用于此项目的项目,称为"Unity C#5.0和6.0集成".你可以在这里得到它.它允许您完成此操作,并在该站点上发布使用它所需的说明.

这适用于iOS,Android,Windows和MacOS,但我不会用它来发布我的游戏只是因为它没有得到官方支持.


至于你的尝试使用

onSomething?.Invoke();
Run Code Online (Sandbox Code Playgroud)

我建议你不要在你的Unity中使用它.如果你养成使用它的习惯,你会遇到很多问题.

这是因为Unity使用自定义相等运算符 for ComponentsGameObjects.如果您尝试在Component或上执行此操作,它将无法工作GameObject.你只会为自己创造很多问题.这里是一个的例子,这里的另一个原因是在Unity工作时要远离零传播了.

编辑:

2017年团结现在支持 4.6,这将使此功能工作,但我还是会建议你测试和试验了很多本,以确保不存在大的问题,如期间它释放你的比赛前的运行时间.