Unity Visual Studio C#版本同步
Posted
技术标签:
【中文标题】Unity Visual Studio C#版本同步【英文标题】:Unity Visual Studio C# version synchronization 【发布时间】:2017-08-14 20:54:33 【问题描述】:我刚刚开始在我的 Unity 游戏中使用代理和事件在适当的时候更新标签,而不是每帧都更新标签,尽管大多数时候不会发生任何变化。
为了确保,一个静态事件调用
public static event OnSomething onSomething;
其实有听众,我用
if (onSomething!= null)
onSomething();
这只是一个方便的问题,但 Visual Studio 14 (2015) 说,这可以简化为
onSomething?.Invoke();
我也更喜欢它,因为我熟悉 nullables 并希望使用它们,但如果我确实将代码更改为建议,Unity 会说
error CS1644: Feature `null propagating operator' cannot be used, because it is not part of the C# 4.0 language specification.
那么有没有办法让 Unity 项目使用 v4.0 的 C#,或者我可以告诉 Visual Studio,该项目使用的是旧版本的 C#,所以它会停止这些建议?
编辑: 一点澄清:我不一定想使用任何特定的 C# 版本。我想尽可能使用最新版本来使用这些“很酷的新功能”,只要没有不使用最新版本的主要原因。
【问题讨论】:
您确定 Visual Studio 建议进行此更改吗?还是像 Resharper 这样的插件? 我还没有使用 Resharper,所以不可能。 【参考方案1】:我不一定想使用任何特定的 C# 版本。我想要 尽可能使用最新版本来使用这些“很酷的新功能”,如 只要没有不使用最新版本的主要原因。
Unity不官方支持.NET 3以上的任何东西。虽然,他们目前正在为此努力。他们希望先支持 .NET 4,然后再支持其他 .NET 版本。
你能在 Unity 中使用最新的 C# 吗?
是的!
butbucket 上有一个专门用于此的项目,名为 “Unity C# 5.0 和 6.0 集成”。你可以得到它here。它可以让您完全做到这一点,并且使用它所需的说明发布在该网站上。
这适用于 ios、android、Windows 和 MacOS,但我不会仅仅因为它不受官方支持而使用它来发布我的游戏。
至于你尝试使用
onSomething?.Invoke();
我建议您根本不要在 Unity 中使用它。如果你养成使用它的习惯,你会遇到很多问题。
这是因为 Unity 使用 custom equality operator 表示 Components
和 GameObjects
。如果您尝试在Component
或GameObject
上执行此操作,它将不起作用。你只会给自己制造很多问题。 Here 是其中的一个示例,here 是在 Unity 中工作时远离 Null 传播的另一个原因。
编辑:
Unity 2017 现在supports 4.6 将允许此功能工作,但我仍然建议您对此进行大量测试和试验,以确保在发布之前在运行时没有大问题,例如this玩它。
【讨论】:
啊,我明白了。当事件被执行然后导致空引用时,我可能恰好遇到了这种情况。在这里有指向 bitbucket 项目的链接很好,但正如您所建议的,在正式支持之前,我会找到另一个解决方案。再次感谢程序员。 :)【参考方案2】:Unity 最近发布了 .NET 4.6 的预览版,可以通过以下方式启用:编辑 > 项目设置 > 播放器并将脚本运行时版本设置为“实验性(.NET 4.6 等效)”。
不过,您至少需要 Unity 2017.1 才能使用此功能。
我已包含一个包含更多信息的链接:https://docs.unity3d.com/Manual/ScriptingRuntimeUpgrade.html
【讨论】:
【参考方案3】:我想指出,C#4.0 与 .NET 3.5、4.0、4.5 等无关。它是 Visual Studio 和编译器的版本。您从 Visual Studio 获得推荐的原因是因为您使用的是 2015 或更新版本。
我自己已经厌倦了这个建议,并找到了一种禁用它的方法,不幸的是它会在你曾经使用过的所有项目解决方案中禁用它。请注意,这是 Visual Studio 2015 特有的,我有企业版,这还没有在社区版上测试过,所以不确定它是否适用于那个版本,或者文件的位置是否也可能在不同的位置,但这就是我的方式禁用它:
Visual Studio 2015 使用规则集进行代码分析,现在您可以通过右键单击您的项目选择属性然后转到底部的代码分析选项卡,在每个项目的基础上更改这些规则,但每次您使用 Unity将 C# 脚本添加到您的游戏将覆盖您对项目文件所做的任何更改。所以我所做的如下
在文件夹中:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\Rule Sets
是 Visual Studio 2015 用于代码分析的所有规则集,如果您编辑文件:
MinimumRecommendedRules.ruleset
并添加:
<Rules AnalyzerId="Microsoft.CodeAnalysis.CSharp.Features" RuleNamespace="Microsoft.CodeAnalysis.CSharp.Features">
<Rule Id="IDE1005" Action="None" />
</Rules>
在结束 </RuleSet>
之前结束,它将全局禁用所有项目的建议。
希望这可以帮助其他也厌倦了 Unity 项目中的建议的人
【讨论】:
以上是关于Unity Visual Studio C#版本同步的主要内容,如果未能解决你的问题,请参考以下文章
使用Unity时打开C# 弹出opening visual studio一直停在这个界面是啥情况?有啥办法解决?
Visual Studio 智能感知/自动更正适用于 C# 术语,但不适用于 Unity
Unity3DUnity 脚本 ① ( 创建 C# 脚本 | Visual Studio 2019 中打开 C# 脚本 | 编译 C# 脚本 | 挂载 C# 脚本到游戏物体 | 运行脚本 )
错误记录Visual Studio 2019 中运行 Unity C# 脚本时报错 ( 根据解决方案, 可能需要安装额外的组件才能获得 | .NET 桌面开发 | 使用 Unity 的游戏开发 )