F#能够与Unity(游戏引擎)一起使用吗?

17

我开始学习Unity,想知道是否可以使用F#而不是C#,只是因为我更喜欢它的语法。我猜不行,因为它运行的环境非常不同,但也许有一些跨编译代码的东西或其他我没有考虑到的东西。


1
请在https://feedback.unity3d.com/suggestions/f-support投票支持该功能请求。 - Colonel Panic
1
https://github.com/Thorium/Roll-a-ball-FSharp - Tuomas Hietanen
5个回答

41
我不禁觉得其他答案是由一些不太了解他们所说的内容的人编写的。
以下是在Unity项目中使用F#的步骤:
1. 创建一个编译成dll的F#项目。将其构建到Unity项目的assets文件夹中。 2. 添加对UnityEngine.dll和/或UnityEditor.dll的引用。更改引用属性,以便dll不会复制到构建文件夹中。 当然,你不能通过这种方式在Unity编辑器中创建新的F#类,但是你可以分配你在F#中编写的那些类。
目前,您需要启用(实验性的).NET版本4.5支持。或者,您可以下载支持.NET 3.5的旧版FSharp.Core.dll。(请参见here)。
我不能保证您不会因为与FSharp.Core.dll的兼容性问题而遇到麻烦,但这只是一个猜测,因为我自己没有测试过。

1
根据我在其他地方找到的指示,这似乎是最佳答案,可以完全实现您所描述的内容。 - Greg

3

我曾经通过遵循这个 Github 项目:https://github.com/eriksvedang/FSharp-Unity 成功地做到了这一点,我相信这与 Lars Kokemohr 上面的答案大致相同。但是我没有在更近期的 Unity/Mono 版本中测试过它。


3
可以像C#一样在Unity中使用F#作为一流语言。以下是一篇关于此的文章:链接。这是一个非常适合想要在Unity中使用F#的人的博客。如果您建议将其用作第二类语言,请让我告诉您如何做。
  1. 通常我会在.net standard 2.0库项目中创建F#游戏领域并构建它。
  2. 将Unity API兼容级别设置为.net standard 2.0.
  3. 在Unity的asset/plugins中导入库项目dll。
这里有一个自动完成每次构建后的操作的解释:链接
您可能会遇到这个错误,这里是解决方案
话虽如此,我建议不要在Unity中使用F#进行任何严肃的工作,因为您将无法跨平台编译。Unity使用IL2cpp,它不支持F#。简而言之,Unity不支持F#,如果您遇到像Il2cpp中的错误和问题,Unity将不会修复它们因为他们不支持F#。

-2

没有简单的方法来做到这一点,但如果你真的想让它发生,我相信你可以使用类似fs2cs的东西:

https://github.com/hsharpsoftware/fs2cs

理论上,您可以编写一个脚本,在所有Unity C#文件上调用fs2cs。将其与Unity本身集成将是更具挑战性的部分,但理论上您可以在保存文件时触发fs2cs转换并使用转换后的C#文件。

-2

只有 Boo、C# 和 UnityScript 是官方支持的语言!


目前只支持C#。 - Onat Korucu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接