Unity3D最适合的脚本语言是什么?

5
我正在使用Unity3d进行游戏开发,我发现有三种支持的语言用于创建脚本:C#、unityscript和Boo...
虽然我以前从事过网页设计工作,习惯于使用javascript,但是经过几次尝试,我发现Unity3d并没有完全支持该脚本语言。某些元素如new Date().valueOf()和一些方法中的属性arguments等在使用时可能存在问题,而且似乎我的文件不能有一个包含所有其他方法的包装器方法,例如:
(function (scope) {
    function Start() {
        ...
    }
    ...
}(this));

使用诸如 new Date().valueOf() 的代码在 JavaScript 中是有效的,但在 UnityScript 中运行却会出现以下错误:

MissingMethodException: Method not found: 'System.DateTime.valueOf'. Boo.Lang.Runtime.DynamicDispatching.MethodDispatcherFactory.ProduceExtensionDispatcher ()

也许编译器将这种初始的“UnityScript”代码转换成了 Boo 语言?因此,Boo 可能是最合适的“本地”选择,而开发 Unity3D 应用程序时,直接使用 UnityScript 可能并不是最佳方案。

我认为应该选择一种完全支持所有已知本地类和方法且能够无障碍运行的语言。

对以上任何错误表示抱歉,请告知您的想法。

5个回答

9
如果你想成为Unity开发人员并在此领域建立职业生涯,那么学习C#并使用它吧,不要浪费时间在UnityScript上。你可以在Unity之外使用C#进行编程。如果你的主要职业已经是Web开发(或将成为Web开发),那么继续使用JavaScript,因为C#和UnityScript最终具有相同的功能,但C#更广泛地用于编程游戏和应用程序。
我使用过的商店大部分资产都是C#或同时提供JS和C#。混合使用这些语言会导致严重的依赖问题,因为为了在任一语言中使用类,它必须已经被Unity脚本加载顺序处理。要在C#中使用JavaScript定义的类,该脚本文件必须在C#脚本文件之前处理。如果javascript类随后需要从C#类中获取某些内容,则必须找到解决方法,因为从javascript文件中简单地不再可能。Unity有定义脚本顺序的方法。
我想警告你不要混合使用C#和UnityScript,因为如果你不专注于其中一个,你将遇到这个问题。最终,C#是模糊语言(如VB和JavaScript)与死板语言(如C ++)之间的中间地带(我有约10年的C / C ++背景)。
你的标题“最好的xxx”会导致主观性答案,但我正在尝试给出最佳建议而不带主观色彩。即使Unity一年后消失,C#也将使您能够继续前进。UnityScript / JavaScript只能让您成为Web开发人员。 C#开发人员可以轻松转向UnityScript / JavaScript,但反过来则更难(不是不可能,只是更加困难)。

9

Unity并不使用“真正的”Javascript。请参见:

http://forum.unity3d.com/threads/1117-Javascript-Version

UnityScript基于javascript 2.0。有一些东西是缺失的(比如switch语句等),但它们的速度达到了C++的一半,比Mozilla要快得多。

一旦你习惯了它,在Unity中用JS进行开发非常快速和灵活......当然,如果你要开发本地组件或与C中的任何接口进行交互,你需要使用C#(最终,学习C#并不难)。


3

您应该使用C#。它是流行的、成熟的,与.NET本地化。C#是大型团队使用的语言。学习C#将来会很有用。正如已经提到的,Unity3D中的JS不是真正的JS,而且没有人听说过Boo。


1
那绝对是需要考虑的事情,瓦伦丁,谢谢。我曾经使用.NET MVC框架创建网站时有机会学习了一些C#。处理“不是真正的Javascript”的Javascript并不让我感到兴奋。此外,我完全同意Boo这个观点,以前从未听说过它 ;) - zanona
我喜欢Boo,尽管我确信他们只是实现它因为它只需要几秒钟,而不是因为人们想要使用它。 - Gavin Gassmann

1

JS是与Unity一起使用最流行的语言。但是该语言是在Mono中实现的,因此对该实现的任何限制也将影响Unity脚本。

我不知道JS的Mono实现如何工作,但根据错误消息来判断,它至少使用了最初为Boo定义的数据类型。但是,这并不意味着JS会被“转化为”Boo。两者都编译为相同的字节码,由Mono运行时JIT并运行。因此,两种语言都没有比另一种“更本地”。


0

查看使用C#和JavaScript的优缺点这里。 C#比JavaScript稍微快一些,并且您可以获得C#提供的额外功能。您可以从这里获取人们的意见。

使用c#进行开发具有Visual Studio 2010的优势。它提供比Mono develop更好的代码完成功能。

在JavaScript中,只有变量可以没有指定的类型。这仅在声明变量时未分配值时发生。

动态类型变量的性能较慢,并且可能会遇到转换问题。如果这是一个问题,请使用#pragma strict。


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