什么是Unity3D最好的脚本语言

时间:2012-02-26 11:57:30

标签: c# compiler-construction unity3d unityscript boo

我从使用Unity3d的游戏开发开始,我可以看到有3种支持的语言用于创建脚本:C#,unityscript和Boo ......

虽然来自网页设计过去我很明显与javascript一起使用,但经过几次尝试后我发现Unity3d并不真正完全支持脚本语言和一些元素,如new Date().valueOf()和其他一些元素方法(例如属性arguments和其他许多方法)中的语句将无法正常工作,似乎我的文件也没有包含所有其他方法的包装器方法,如:

(function (scope) {
    function Start() {
        ...
    }
    ...
}(this));

当使用在JS中有效的new Date().valueOf()之类的东西时,我得到:

  

MissingMethodException:找不到方法:'System.DateTime.valueOf'。 Boo.Lang.Runtime.DynamicDispatching.MethodDispatcherFactory.ProduceExtensionDispatcher()

那么编译器可能会将最初的'unityscript'代码转换为Boo语言?所以也许Boo是正确的“原生”选择,也许unityscript本身不是开发unity3d应用程序时最好的方法吗?

我正在考虑一种语言,它完全支持所有已知的本机类和方法,这些语言和方法可以正常工作吗?

对于上述任何错误感到抱歉,请告诉我您的想法。

5 个答案:

答案 0 :(得分:9)

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

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

UnityScript基于javascript 2.0。缺少一些东西(switch语句等),但它们的速度只有C ++的一半,这比Mozilla快。

一旦你习惯了它,用'JS'进行统一开发是非常非常快速和灵活的......但是当然,如​​果你要开发本机组件,或者接口到C中的任何东西,你将会需要使用C#(最后,C#并不难学)。

答案 1 :(得分:9)

如果您想成为Unity的开发人员并在其上建立职业生涯,请学习C#并使用它 - 不要在UnityScript上浪费您的时间。您可以在Unity之外使用C#进行编程。如果您的主要职业已经是Web开发(或将是),那么继续使用javascript,因为最终C#和UnityScript具有相同的功能,但C#更广泛地用于编写游戏和应用程序。

我使用的商店中的大多数资产都是C#或提供JS和C#。语言之间的混合会产生严重的依赖性问题,因为为了在任一语言中使用类,它必须已经由Unity脚本加载顺序处理。要在C#中使用Javascript定义的类,必须在C#脚本文件之前处理该脚本文件。如果javscript类后来需要来自C#类的东西,你必须找到解决方法,因为它不再可能来自javascript文件。 Unity有办法定义脚本顺序。

我认为我会警告你将C#与UnityScript混合,因为如果你不专注于其中一个,你会遇到这个问题。最终,C#是像VB和JavaScript这样含糊不清的语言和像C ++这样的迂腐语言(我有大约10年的C / C ++背景)之间的中间地带。

你的头衔“什么是最好的xxx”会产生自以为是的答案,但我试图在不主观的情况下提供最好的建议。 C#将允许你继续,即使Unity从现在起一年后就会消失。 UnityScript / JavaScript只允许您成为Web开发人员。 C#开发人员可以很容易地进入UnityScript / JavaScript,但反过来要困难得多(不是不可能,只是更难)。

答案 2 :(得分:3)

你应该使用c#。它是流行的,成熟的,原生于.NET。 c#是大团队使用的。学习c#将来会很有用。 Unity3D中的JS并不是真正的JS,如前所述,没有人听说过Boo。

答案 3 :(得分:1)

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

我不知道JS的Mono实现如何工作,但从错误消息判断,它至少使用最初为Boo定义的数据类型。然而,这并不意味着JS“变成了Boo”。两者都被编译成相同的字节码,这是由Mono运行时JIT和运行的。因此,这两种语言都不比其他语言“更本土化”。

答案 4 :(得分:0)

查看使用here中的c#和Java脚本的优缺点。 C#比JavaScript快一点,你可以获得C#提供的额外功能。你可以从here获得民意。

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

仅在JavaScript中,变量可以具有未指定的类型。仅当您在声明变量时未指定值时,才会出现这种情况。

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